Часть 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 куб