Оптимизация CalcCashe

источник

Часть 1. Как было настроено до оптимизации

Настройки Essbase.cfg

...
CALCCACHEHIGH    200000000 
CALCCACHEDEFAULT 50000000 
CALCCACHELOW     10000000
...


Порядок измерений (песочные часы):

Dimension                    Type    Declared Size  Actual Size

=============================================

Account                          DENSE   809            785

Period                             DENSE   20               18

Currency Rates               SPARSE  6                  5

Scenario                         SPARSE  7                  6

SparseDimA                   SPARSE  8                  6

Years                             SPARSE  8                  7

Currency                        SPARSE  10                8

Version                          SPARSE  15               15

SparseDimB                  SPARSE  17                13

SparseDimC                  SPARSE  125            122

SparseDimD                  SPARSE  125            124

Entity                             SPARSE  198            196

SparseDimE                  SPARSE  199            197

SparseDimF                  SPARSE  288            144

Скрипт агрегации:

SET CACHE ALL;
SET CACHE HIGH;
SET AGGMISSG ON;
SET UPDATECALC OFF;
SET FRMLBOTTOMUP ON;
SET MSG SUMMARY;
SET LOCKBLOCK HIGH;
SET EMPTYMEMBERSETS ON;
 
FIX(InputValue, FY10, RUR, Work, Budget)
 
       CALC DIM (Account, Period, SparseDimA, SparseDimB...)
 
ENDFIX


Часть 2. Что получилось улучшить

1. Сделал динамическими родителей в измерениях Period и Account  +25%

      Размер блока:

  • было  Account(785) х Period(18) х 8байт =  113040
  • стало  Account(705) х Period(13) х 8байт = 73320 (~уменьшился на 30%)


    P.S. Не делайте динамическими dense элементы с комплексными формулами (есть ссылка на другой блок)

2. Изменил порядок измерений +15%:

  • Dense – от большего к меньшему
  • Sparse – от меньшего агрегируемого к большему, неагрегируемые измерения, большие плоские измерения для паралельных вычислений


Dimension                    Type    Declared Size  Actual Size

=============================================

/* Dense от большего к меньшему */

Account                          DENSE   809            705

Period                             DENSE   20               13

/* Агрегируемые */

SparseDimC                  SPARSE  125            122

SparseDimD                  SPARSE  125            124

SparseDimE                  SPARSE  199            197

SparseDimA                  SPARSE  8                  6

SparseDimB                  SPARSE  17                13

/* Прочие (неагрегируемые) измерения */

Currency Rates               SPARSE  6                  5

Scenario                         SPARSE  7                  6

Years                             SPARSE  8                  7

Currency                        SPARSE  10                8

Version                          SPARSE  15               15

/* Измерения для параллельных расчетов */

Entity                             SPARSE  198            196

SparseDimF                  SPARSE  288            144

    P.S. Измерения  SparseDimA и SparseDimB логичнее поставить выше, но на них не хватит CalcCache, поэтому эти измерения перемещены ниже

    P.S.S. Какие sparse измерения необходимо переместить вниз, а какие вверх определяется только опытным путем т.е. тестируем-тестируем-тестируем

3. Включил параллельные вычисления +40%

    SET CALCPARALLEL 4;

    SET CALCTASKDIMS 2;

4. Расчитал Calculator Cache +5%

   SparseDimC (122) х SparseDimD(124) х SparseDimE (197) х 8байт / 1024 = 23 282 кб

Изменения в essbase.cfg

...
CALCCACHEHIGH    200000000 
CALCCACHEDEFAULT 50000000 
CALCCACHELOW     25000000 
...

5. Изменил скрипт агрегации +50%

SET CACHE ALL;
SET CACHE LOW; /* 25Мб */;
 
SET AGGMISSG ON;
SET UPDATECALC OFF;
SET FRMLBOTTOMUP ON;
SET MSG SUMMARY;
SET LOCKBLOCK HIGH;
SET EMPTYMEMBERSETS ON; 
 
SET CALCPARALLEL 4;
SET CALCTASKDIMS 2;
/* WaterFall agreggetion */ FIX(InputValue, FY10, RUR, Work, Budget, @RELATIVE(YearTotal,0)) /*main*/ FIX(@RELATIVE(&vEntity,0)) FIX(@RELATIVE(SparseDimA,0)) FIX(@RELATIVE(SparseDimB,0)) FIX(@RELATIVE(SparseDimC,0)) FIX(@RELATIVE(SparseDimD,0)) FIX(@RELATIVE(SparseDimE,0)) FIX(@RELATIVE(SparseDimF,0)) CALC DIM (Account); ENDFIX FIX(@DESCENDANTS(Account)) AGG(SparseDimF); ENDFIX ENDFIX /*SparseDimF*/ FIX(@DESCENDANTS(Account) @DESCENDANTS(SparseDimF)) AGG(SparseDimE); ENDFIX ENDFIX /*SparseDimD*/ FIX(@DESCENDANTS(Account) @DESCENDANTS(SparseDimF) @DESCENDANTS(SparseDimE)) AGG(SparseDimD); ENDFIX ENDFIX /*SparseDimC*/ FIX(@DESCENDANTS(Account) @DESCENDANTS(SparseDimF) @DESCENDANTS(SparseDimE) @DESCENDANTS(SparseDimD)) AGG(SparseDimC); ENDFIX ENDFIX /*SparseDimB*/ FIX(@DESCENDANTS(Account) @DESCENDANTS(SparseDimF) @DESCENDANTS(SparseDimE) @DESCENDANTS(SparseDimD) @DESCENDANTS(SparseDimC)) AGG(SparseDimB); ENDFIX ENDFIX /*SparseDimA*/ FIX(@DESCENDANTS(Account) @DESCENDANTS(SparseDimF) @DESCENDANTS(SparseDimE) @DESCENDANTS(SparseDimD) @DESCENDANTS(SparseDimC) @DESCENDANTS(SparseDimB)) AGG(SparseDimA); ENDFIX ENDFIX /*Entity*/ FIX(@DESCENDANTS(Account) @DESCENDANTS(SparseDimF) @DESCENDANTS(SparseDimE) @DESCENDANTS(SparseDimD) @DESCENDANTS(SparseDimC) @DESCENDANTS(SparseDimB) @DESCENDANTS(SparseDimA)) @IDESCENDANTS(&vEntity, -1); @ANCESTORS(&vEntity); ENDFIX ENDFIX /*main*/


Часть 3. Не забываем про стандартные рекомендации

    – ACR (Average clustering Rate) должен стремится к  1, для этого запускайте dense реструктуризацию

    – Размер блока должен быть между 10 и 100KB (может быть больше для 64 bit essbase)

    – Data cache должен быть около 12.5% от общего размера pag файлов

    – Index cache должен быть таким же как ind файлы

    – В одном приложение только 1 куб