Essbase 快取與計算效能
若要最佳化計算效能,特別是針對大型計算, Essbase 會使用快取來協調記憶體使用狀況。請確定計算器快取 (如果使用的話) 大於足以最佳化計算。複查索引快取、資料快取、動態計算器快取及應用程式快取的關聯性。
計算立方體時, Essbase 會使用大綱中每個成員大約 30 個位元組的記憶體。因此,如果立方體有 5,000 個成員,則 Essbase 需要大約 150 KB 的記憶體來進行計算。
附註:
您可以結合計算命令檔來避免使用過多的記憶體。您可以搭配單一計算指令碼使用平行計算來取得良好效能。請參閱使用平行計算。
Essbase 會使用記憶體來最佳化計算效能,尤其是針對大型計算。除非更改立方體大綱的大小,否則使用的記憶體大小無法控制。不過,您可以確保記憶體快取大小可讓 Essbase 最佳化計算。
Essbase 會使用下列快取來協調記憶體使用狀況:
-
計算機快取。
當您第一次計算立方體時,計算器快取的大小對於計算效能很重要。如果可能的話,請確定計算機快取的大小足以讓 Essbase 使用最佳計算機快取選項。
請參閱調整計算器快取大小。
-
動態計算器快取。請參考調整動態計算機快取大小。
-
索引記憶體快取。如果立方體很大,預設的索引快取就不夠大,無法提供最佳的計算效能。請參閱 INDEXCACHESIZE 應用程式組態特性,或 MaxL alter database set index_cache_size 。
-
資料快取。請參閱 DATACACHESIZE 應用程式組態特性,或 MaxL alter database set data_cache_size 。
-
資料檔快取。
-
應用程式快取。如果區塊儲存立方體中使用混合模式,應用程式快取可協助您管理擷取的記憶體使用狀況。應用程式快取類似於彙總儲存快取;如需詳細資訊,請參閱彙總儲存快取。
調整計算器快取大小
如果使用 Essbase 計算器快取的最佳大小,則視大綱中稀疏維度的數目與密度而定。瞭解計算機快取位元映射可協助您最佳化調整計算機快取的大小。
若要最佳化區塊管理, Essbase 可以建立點陣圖,其大小由計算器快取的大小控制,以在計算期間記錄和追蹤資料區塊。位元映射是比磁碟 I/O 更快速的 Essbase 擷取方法,尤其是第一次計算立方體,或是計算具有稀疏資料的立方體時。
Essbase 會使用計算機快取點陣圖,如果資料庫至少有兩個稀疏維度,而且也符合其中一個條件:
-
您至少要計算一個完整的稀疏維度。
-
您可以在計算命令檔中指定 SET CACHE ALL 命令。
關於計算機快取點陣圖
對於計算器快取, Essbase 會將稀疏維度分隔成兩個群組:
-
點陣圖維度: Essbase 符合至點陣圖為止的稀疏維度。放置在點陣圖中的稀疏維度的每個成員組合佔用 1 位元的記憶體。位元映射中必須有足夠的空間,才能將稀疏維度的每個成員組合放置在位元映射中。
-
錨定維度:資料庫大綱中不符合點陣圖的其餘一或多個稀疏維度。
Essbase 會從大綱中的第一個稀疏維度開始,並盡可能符合點陣圖中的數目。適合的尺寸為點陣圖尺寸。因為計算機快取會控制點陣圖的大小,所以可容納的稀疏維度數目取決於計算機快取的大小。
其餘的稀疏維度為錨定維度。對於錨定維度, Essbase 無法使用點陣圖來判斷區塊是否存在。
若要查看哪些維度是錨定維度,以及哪些是點陣圖維度,請使用 SET MSG DETAIL 計算命令在應用程式日誌中顯示點陣圖資訊。
請仔細排列大綱中的稀疏維度,以便儘可能將多個維度放入點陣圖中。從包含最少成員的維度開始,然後繼續直到具有最多成員的維度最後。此順序可讓更多維度符合點陣圖,進而提升計算效能。
附註:
大綱中的稀疏維度順序也會影響查詢效能。請參考設計大綱以最佳化效能。
如果有多個錨定維度 (或計算器快取不足以支援多個點陣圖),則 Essbase 會使用單一點陣圖;如果有一個錨定維度,則使用多個點陣圖。單一位元映射使用最少的記憶體,但比多個位元映射效率低。
多個位元映射使用更多的記憶體,但比使用單一位元映射更快。一個位元映射會追蹤子項區塊,一個追蹤父項區塊。當您第一次計算資料庫時,效能的改進特別高。
使用的位元映射數目由錨定維度中任何成員的相依父項數目上限決定。成員具有一個相依父項,除非該成員具有共用成員。例如,假設 Sample.Basic 資料庫的 Product 維度。成員 Cola (100-10) 有一個父項 Colas (100)。不過,飲食科拉 (100-20) 有兩個父母:飲食飲品 (Diet) 和科拉斯 (100)。產品沒有任何成員具有兩個以上的相依上階。因此,如果 Product 是錨定維度,則最大相依父項為 2。
Essbase 會為計算選擇三個選項中的其中一個,如下表所示:
表格 34-2 計算機快取選項
| 選項 | 方法 | 績效評等 |
|---|---|---|
|
1 |
單一錨定維度,多個位元映射 |
1 |
|
2 |
單一錨定維度,單一點陣圖 |
2 |
|
3 |
多重錨定尺寸,單一點陣圖 |
3 |
Essbase 會根據計算器快取的大小,選擇計算的最佳效能方法。如果計算機快取大小對上述任一選項而言太小,則 Essbase 不會使用計算機快取。計算效能可能會大幅減損。
啟用平行計算可能會變更使用的計算機快取選項。請參閱 CALCPARALLEL 平行計算與其他 Essbase 功能之間的關係。
警示:
如果您是第一次計算資料庫,計算器快取的大小對於計算效能特別重要。如果可能的話,請確定計算機快取的大小足以讓 Essbase 使用最佳計算機快取選項。
決定計算機快取大小
計算機快取的最佳大小取決於系統可用的記憶體,以及立方結構的本質和組態。
使用下列公式,您可以計算 Essbase 所需的計算機快取大小,以選擇上述計算機快取選項表格中的每個選項:
Calculator cache = Bitmap size in bytes * Number of bitmaps
其中
Bitmap size in bytes = Max ((member combinations on the bitmap dimensions / 8), 4)
以及何處
Number of bitmaps = Maximum number of dependent parents in the anchoring dimension + 2 constant bitmaps附註:
最小點陣圖大小為 4 個位元組。如果 (點陣圖維度 /8 的成員組合) 小於 4 個位元組, Essbase 會使用 4 個位元組的點陣圖大小。
請考慮使用五個稀疏維度 (S1 到 S5) 的範例立方體:
表格 34-3 範例:含有五個稀疏維度的範例立方體
| 疏鬆維度 | 成員數目 | 眷屬上階 |
|---|---|---|
|
S1 |
20 |
不適用 |
|
S2 |
20 |
不適用 |
|
S3 |
50 |
不適用 |
|
S4 |
50 |
不適用 |
|
S5 |
200 |
3 |
使用此範例立方體進行下列範例計算:
- 選項 1:單一錨定維度、多重點陣圖
- 選項 2:單一錨定維度、單一點陣圖
- 選項 3:多重錨定尺寸,單點陣圖
選項 1:單一錨定維度、多重點陣圖
對於此範例計算,假設資料庫有下列相關事實:
-
點陣圖尺寸:S1、S2、S3、S4
-
定錨尺寸:S5
-
錨定維度中的相依上階:3
執行此計算:
Bitmap size in bytes = (S1 * S2 * S3 * S4) / 8
= (20 * 20 * 50 * 50) / 8
= 125,000 bytes
Number of bitmaps = Maximum number of dependent parents in the anchoring dimension
= +
= 2 constant bitmaps
= 3 + 2
= 5
Calculator cache = Bitmap size * Number of bitmaps
= 125,000 * 5
= 625,000 bytes若要讓 Essbase 將多個位元映射用於一個錨定維度的此資料庫,計算機快取必須為 625,000 個位元組。
選項 2:單一錨定維度、單一點陣圖
對於此範例計算,假設資料庫有下列相關事實:
-
點陣圖尺寸:S1、S2、S3、S4
-
定錨尺寸:S5
-
錨定維度中的相依上階:不適用
執行此計算:
Bitmap size in bytes = (S1 * S2 * S3 * S4) / 8
= (20 * 20 * 50 * 50) / 8
= 125,000 bytes
Number of bitmaps = Single bitmap
= 1
Calculator cache = Bitmap size * Number of bitmaps
= 125,000 * 1
= 125,000 bytes若要讓 Essbase 將單一點陣圖用於此資料庫與一個錨定維度,計算機快取必須為 125,000 個位元組。
選項 3:多重錨定尺寸,單點陣圖
對於此範例計算,假設資料庫有下列相關事實:
-
點陣圖尺寸:S1、S2、S3
-
定錨尺寸:S4、S5
-
錨定維度中的相依上階:不適用
執行此計算:
執行此計算:
Bitmap size in bytes = (S1 * S2 * S3) / 8
= (20 * 20 * 50) / 8
= 2,500 bytes
Number of bitmaps = Single bitmap
= 1
Calculator cache = Bitmap size * Number of bitmaps
= 2,500 * 1
= 2,500 bytes若要讓 Essbase 對具有多個錨定維度的此資料庫使用單一點陣圖,計算機快取必須為 2,500 個位元組。
下表根據指定的計算機快取大小,顯示 Essbase 使用的計算機快取選項:
表格 34-4 根據計算器快取大小選取計算器快取選項
| 指定大小下限 | 已選取選項 |
|---|---|
|
625,000 個位元組 |
選項 1 (提供最佳效能) |
|
125,000 個位元組 |
選項 2 |
|
2,500 個位元組註腳 1 |
選項 3 |
Footnote 1
如果您指定小於 2,500 個位元組的計算機快取大小,則 Essbase 在計算期間不會使用計算機快取。計算效能可能會大幅減損。
您可以使用計算命令檔中的 SET MSG SUMMARY 命令來檢查 Essbase 可以使用的計算機快取選項。在空白立方體上執行下列計算命令檔:
SET MSG SUMMARY;
CALC ALL;Essbase 會在應用程式日誌中顯示計算機快取設定。請參閱用於計算測試和統計的 SET 命令。
您可以指定的最大計算機快取大小為 200,000,000 個位元組。預設值為 200,000 位元組。您選擇的計算機快取大小取決於可用的記憶體和立方體的組態。
附註:
計算器、索引、資料檔及資料快取的大小,如果計算是以加總為基礎且較少公式計算,通常會對效能有較大的影響。
如果您是第一次計算立方體,計算器快取的大小特別重要。如果可能的話,請確定計算機快取的大小足以讓 Essbase 使用「選項 1」。
您可以使用預設計算器快取大小,也可以在計算命令檔中設定計算器快取的大小。如果您從計算指令碼設定大小,則該設定僅用於計算指令碼的持續時間。請參閱計算命令檔 SET CACHE 命令和 CALCCACHE 組態設定值。
調整動態計算機快取大小
對於每個開啟的立方體, Essbase 會為資料區塊在動態計算器快取中配置一個區域。若要判斷動態計算器快取是否有效使用,請複查應用程式日誌和組態設定值。
複查動態計算器快取使用狀況
DYNCALCCACHEMAXSIZE 組態設定會指定 Essbase 伺服器上每個動態計算機快取的最大大小。依預設,大小設定為 20 MB。Essbase 會為資料區塊配置動態計算器快取中的區域,直到配置 DYNCALCACHEMAXSIZE 設定所指定的最大記憶體區域為止。
Essbase 會將兩個訊息寫入應用程式日誌,以供每次擷取資料。在下列 (截斷) 範例中,第一個訊息說明擷取所需的總時間:
[2024-07-27T16:43:52.707+00:00] ... [EXEC_TIME: 0.53] Regular extractor completed successfully
[2024-07-27T16:43:52.707+00:00] ... Regular Extractor Big Block Allocs -- Dyn.Calc.Cache : [30] non-Dyn.Calc.Cache : [0]如果使用動態計算器快取,則第二個訊息會顯示資料計算器快取 (Dyn.Calc.Cache:[n]) 中計算的區塊數,以及動態計算器快取 (non-Dyn.Calc.Cache:[n]) 之外的記憶體中計算的區塊數。
若要判斷動態計算器快取是否有效使用,請複查這兩個訊息,然後考慮您的組態設定。例如,如果訊息指出區塊是在動態計算機快取外進行計算,您可以增加 DYNCALCCACHEMAXSIZE 設定。
如果指定的最大大小是您可以負擔的,而且如果在計算機快取外使用記憶體來完成動態計算的擷取,導致無法接受的延遲,請將 DYNCALCCACHEWAITFORBLK 設為 TRUE。
您可以使用查詢資料庫 MaxL 敘述句和效能統計資料文法來檢視動態計算器快取活動的摘要。
變更動態計算器快取大小
有五個與動態計算器快取相關的組態設定。這些設定值的最佳值取決於 Essbase 伺服器機器上的記憶體、 Essbase 資料庫的組態,以及使用者查詢的性質。
以下為每個配置設定的描述,包括如何決定系統值的建議。若要符合您網站的獨特需求,您可能需要測試和調整設定值。
-
DYNCALCCACHEMAXSIZE :此設定指定 Essbase 可配置給每個動態計算器快取的大小上限。
建議的設定值 = C * S * U。
-
C 是 Essbase 在計算一個區塊時需要修正 (可定址到) 的區塊數目上限值。通常,值 100 對此值而言是好的近似值。如果您在公式計算中合併大量子系,這個數字可以較高的數字。
-
S 是 Essbase 伺服器機器上所有資料庫的最大擴充區塊大小。若要計算展開的區塊大小,請將每個密集維度中的成員數目 (包括動態計算成員和動態時間序列成員) 乘以區塊中的儲存格數目,然後將儲存格數目乘以每個成員儲存格的大小 (8 個位元組)。
例如,假設 Sample.Basic 中密集維度的成員計數 (不計算「僅標籤」成員):
-
19 (年度,12 個預存成員和 7 個動態計算成員,包括 HTD 和 QTD)
-
14 (包含 8 個預存成員和 6 個動態計算成員的計量)
-
4 (具有 2 個預存成員和 2 個動態計算成員的案例)
S = 19 * 14 * 4 個儲存格 (8 個位元組 / 儲存格) = 每個區塊 8512 個位元組
這個數字會顯示在應用程式日誌中作為邏輯區塊大小。
-
-
U 是資料庫上具有最多並行使用者的預期並行使用者數目上限。
將值 0 (零) 指定給 DYNCALCACHEMAXSIZE 會告知 Essbase 不要使用動態計算機快取。
此值的大小預設為 20 MB (20,971,520 個位元組)。
-
-
DYNCALCCACHEWAITFORBLK :如果 Essbase 使用配置給動態計算器快取的所有區域,則此設定會告知 Essbase 是否要等待快取中的空間可用,或立即寫入並計算快取外之記憶體中的區塊。如果快取太小,就有可能將多個繫線排入佇列。
建議的設定值 = FALSE (預設值)。
設定為 TRUE 之前,請嘗試下列替代方法:
-
新增實體記憶體至伺服器機器
-
增加 DYNCALCCACHEMAXSIZE、測試和重複的值,直到您確認動態計算器快取無法再使用任何記憶體為止。
-
-
DYNCALCCACHEBLKTIMEOUT :如果 Essbase 要等待動態計算器快取中的可用空間,此設定會定義它等待的時間。
建議設定值 = WT/B。
-
WT 是查詢可容忍的等待時間上限,例如 5 秒。
-
B 是在最大查詢中存取的邏輯區塊總數。
若要判斷 B 值,請檢查應用程式日誌中的訊息,以取得查詢的最大 Dyn.Calc.Cache「大區塊配置」數目。
-
-
DYNCALCCACHEBLKRELEASE :如果 Essbase 已等待指定的時間,但動態計算器快取中仍無法使用空間,此設定會告知 Essbase 是否要立即在動態計算器快取之外寫入和計算區塊,或是藉由交換區塊並暫時壓縮緩衝區中交換的區塊來建立空間。
建議的設定值 = FALSE (預設值)。
只有在發生嚴重的記憶體不足問題時,才設為 TRUE。
-
DYNCALCCACHECOMPRBLKBUFSIZE :如果 Essbase 已等待指定的等待時間,且 DYNCALCCACHEBLKRELEASE 設定為 TRUE,則此設定是動態計算機快取壓縮區塊緩衝區的大小。
建議設定值 = (C * S) / 2
其中 C 是 Essbase 在計算一個區塊時需要修正 (可定址至) 的最大區塊數值,而 S 是機器上所有資料庫的最大擴充區塊大小。計算 C 和 S 的方式與描述或 DYNCALCCACHEMAXSIZE 設定相同。