I've a question about the memory usage of TM1.
I don't understand the memory usage while executing a TM1 process. And I absolutly don't find anything with Google etc.
Every time I repeat my process to load data into a cube, it uses more and more memory from Windows. After some time I need to restart the TM1-server to release all allocated memory.
It is not a big deal, but I still want to know why TM1 needs more memory, even if i delete the data from the cube and write exactly the same data again.
As an example:
Right now, I have three TM1-servers. Every department has its own server (fail-over etc.).
A specific example is a TM1-Server with only one Cube called "PPV".
In this Cube, there are 13 dimensions. The biggest one has ~520k elements. The second largest only ~400.
There is no rule for the cube. All calculations are made in the database.
We are loading ~10m data rows into the cube.
If I restart the TM1-Server, the cube only needs about 3,2GB. The Data is already in the cube in this time. If I repeat the process now to load Data into the Cube, the TM1-Server needs about 5,7GB. Everytime the process is used, TM1 takes about 2,7GB - 3,2GB for each iteration. That means, the server will be using ~25GB in 10 days. (Every night runs a process to delete all data from the cube and then loads the actual data).
For a better understanding, there are attachements with pictures about the TM1 memory usage.
Another question: Why is the "number of populated numeric cells" not constant ? Why is this even getting bigger, even if I use a "CubeClearData"?
Here is the code from the process to load the data:
Prologue:
Code: Select all
#****Begin: Generated Statements***
#****End: Generated Statements****
CubeClearData('PPV');
Data:
Code: Select all
#****Begin: Generated Statements***
#****End: Generated Statements****
#CellPutN(MENGE_VOLLZUG,'PPV',ID_ORGANISATION,ID_ZEIT,ID_ZEIT_AUFGELADENER_STAND,ID_VORGANGSSCHLUESSEL,ID_EINHEIT,ID_EINSCHLAGSURSACHE,ID_BAUMART,ID_HERKUNFTSGEBIET,ID_HERKUNFTSSICCHERHEIT,ID_BESITZART,ID_BESTANDESINDEX,ID_STANDORTSREGION,'Menge Vollzug');
#CellPutN(MENGE_PLAN,'PPV',ID_ORGANISATION,ID_ZEIT,ID_ZEIT_AUFGELADENER_STAND,ID_VORGANGSSCHLUESSEL,ID_EINHEIT,ID_EINSCHLAGSURSACHE,ID_BAUMART,ID_HERKUNFTSGEBIET,ID_HERKUNFTSSICCHERHEIT,ID_BESITZART,ID_BESTANDESINDEX,ID_STANDORTSREGION,'Menge Plan');
#CellPutN(MENGE_FE,'PPV',ID_ORGANISATION,ID_ZEIT,ID_ZEIT_AUFGELADENER_STAND,ID_VORGANGSSCHLUESSEL,ID_EINHEIT,ID_EINSCHLAGSURSACHE,ID_BAUMART,ID_HERKUNFTSGEBIET,ID_HERKUNFTSSICCHERHEIT,ID_BESITZART,ID_BESTANDESINDEX,ID_STANDORTSREGION,'Menge FE');
CellPutN(CellGetN('PPV',ID_ORGANISATION,ID_ZEIT,ID_ZEIT_AUFGELADENER_STAND,ID_VORGANGSSCHLUESSEL,ID_EINHEIT,ID_EINSCHLAGSURSACHE,ID_BAUMART,ID_HERKUNFTSGEBIET,ID_HERKUNFTSSICCHERHEIT,ID_BESITZART,ID_BESTANDESINDEX,ID_STANDORTSREGION,'Menge Vollzug')+MENGE_VOLLZUG,'PPV',ID_ORGANISATION,ID_ZEIT,ID_ZEIT_AUFGELADENER_STAND,ID_VORGANGSSCHLUESSEL,ID_EINHEIT,ID_EINSCHLAGSURSACHE,ID_BAUMART,ID_HERKUNFTSGEBIET,ID_HERKUNFTSSICCHERHEIT,ID_BESITZART,ID_BESTANDESINDEX,ID_STANDORTSREGION,'Menge Vollzug');
CellPutN(CellGetN('PPV',ID_ORGANISATION,ID_ZEIT,ID_ZEIT_AUFGELADENER_STAND,ID_VORGANGSSCHLUESSEL,ID_EINHEIT,ID_EINSCHLAGSURSACHE,ID_BAUMART,ID_HERKUNFTSGEBIET,ID_HERKUNFTSSICCHERHEIT,ID_BESITZART,ID_BESTANDESINDEX,ID_STANDORTSREGION,'Menge Plan')+MENGE_PLAN,'PPV',ID_ORGANISATION,ID_ZEIT,ID_ZEIT_AUFGELADENER_STAND,ID_VORGANGSSCHLUESSEL,ID_EINHEIT,ID_EINSCHLAGSURSACHE,ID_BAUMART,ID_HERKUNFTSGEBIET,ID_HERKUNFTSSICCHERHEIT,ID_BESITZART,ID_BESTANDESINDEX,ID_STANDORTSREGION,'Menge Plan');
CellPutN(CellGetN('PPV',ID_ORGANISATION,ID_ZEIT,ID_ZEIT_AUFGELADENER_STAND,ID_VORGANGSSCHLUESSEL,ID_EINHEIT,ID_EINSCHLAGSURSACHE,ID_BAUMART,ID_HERKUNFTSGEBIET,ID_HERKUNFTSSICCHERHEIT,ID_BESITZART,ID_BESTANDESINDEX,ID_STANDORTSREGION,'Menge FE')+MENGE_FE,'PPV',ID_ORGANISATION,ID_ZEIT,ID_ZEIT_AUFGELADENER_STAND,ID_VORGANGSSCHLUESSEL,ID_EINHEIT,ID_EINSCHLAGSURSACHE,ID_BAUMART,ID_HERKUNFTSGEBIET,ID_HERKUNFTSSICCHERHEIT,ID_BESITZART,ID_BESTANDESINDEX,ID_STANDORTSREGION,'Menge FE');
Epilogue - Nothing;
The Attachements are in German - sorry about that!
I don't have a problem to restart the TM1 Server. But right now, we use three TM1 Servers and after about 10 days all three are using about 100GB from the 500GB on the Windows server. We restart the TM1 servers every month to free the allocated memory.
But also we want to expand our TM1 Usage. That means we want more TM1 Servers.
In my opinion, that means I need to restart the TM1 servers more often. (Every 15 days etc...)
But before we are doing that, I really want to know why this is even happening.
I understand, that a process needs memory to work. But why is the cube getting bigger? Why isn't it just rolling into the garbage?
And why is TM1 not using the garbage for the process again?
Information about server / TM1:
IBM Cognos TM1 10.2.2 FP7
Windows Server 2008 R2 Enterprise
512 GB RAM
16 cores.
Sorry if you have trouble to read my questions. I'm not a native english speaker.
Thanks a lot,
Patrick