4.1.3 Explicitヒープサイズを見積もる
Explicitヒープサイズを見積もる計算式を次に示します。
-
ノンブロッキングI/O通信制御を使用しない場合は,ノンブロッキングI/O通信制御を使用しない場合の計算式で見積もってください。
-
ノンブロッキングI/O通信制御を使用する場合は,ノンブロッキングI/O通信制御を使用する場合の計算式で見積もってください。
keyとvalueのうち,value部分が格納される領域と,更新操作の履歴が格納される領域を足した値がExplicitヒープサイズとなります。なお,Explicitヒープサイズの3%は管理領域として使用されます。
算出した値は,共通設定のeads.java.external.heapsizeパラメタに指定します。
- ■ノンブロッキングI/O通信制御を使用しない場合
-
Explicitヒープサイズ(単位:メガバイト)(ノンブロッキングI/O通信制御を使用しない場合)=
(a÷1,0242※1+b÷1,0242)÷0.97※2
- ■ノンブロッキングI/O通信制御を使用する場合
-
Explicitヒープサイズ(単位:メガバイト)(ノンブロッキングI/O通信制御を使用する場合)=
(a÷1,0242※1+b÷1,0242+c÷1,0242)÷0.97※2
- 変数の説明
-
a:value部分が格納される領域のサイズ(単位:バイト)
b:更新操作の履歴が格納される領域のサイズ(単位:バイト)
c:ノンブロッキングI/O通信バッファのサイズ(単位:バイト)
- 注※1
-
データ総量監視機能を使用する場合,「a÷1,0242」は,データの多重度の倍数(単位:メガバイト)になるよう切り上げてください。
- 注※2
-
「a÷1,0242」,「b÷1,0242」,「c÷1,0242」のそれぞれの計算式では小数点以下の値は切り上げてください。そのあとで,最終的な計算結果も小数点以下の値は切り上げてください。
各領域のサイズを見積もる計算式を次に示します。
- 〈この項の構成〉
(1) value部分が格納される領域のサイズ
keyとvalueのうち,value部分が格納される領域のサイズを見積もる計算式を次に示します。ただし,valueをExplicitヒープに格納しない(キャッシュタイプがディスクキャッシュのキャッシュだけを使用する)場合は,0としてください。
value部分が格納される領域のサイズ(単位:バイト)= (メモリキャッシュおよび2Wayキャッシュに格納するデータ1件当たりのvalueサイズ※1(単位:バイト) +2バイト)※2 ×(1レンジ当たりのメモリキャッシュおよび2Wayキャッシュに格納するデータ件数の合計×データの多重度 +メモリキャッシュおよび2Wayキャッシュのキャッシュ数の合計 ×データの多重度+500) |
- 注※1
-
シリアライズ後のサイズです。
- 注※2
-
この括弧内の計算式は16バイト単位で切り上げて見積もってください。
- データの多重度:
-
共通設定のeads.replication.factorパラメタの指定値
(2) 更新操作の履歴が格納される領域のサイズ
更新操作の履歴が格納される領域のサイズを見積もる計算式を次に示します。
算出した値は,メガバイト単位に切り上げてから,共通設定のeads.replication.external.heapsizeパラメタに指定します。
更新操作の履歴が格納される領域(単位:バイト)= {(データの多重度×2−1)×キャッシュ数×更新操作の履歴の最大数+500} ×(更新操作の履歴の最大サイズ(単位:バイト)+1,024)+1,048,576 |
- 注
-
小数点以下の値は切り上げます。
- データの多重度:
-
共通設定のeads.replication.factorパラメタの指定値
- 更新操作の履歴の最大数:
-
更新操作の履歴の最大数を見積もる計算式を次に示します。
更新操作の履歴の最大数=
更新操作の履歴が保持される最大数+合意処理で一度に合意できる処理の最大数
- 更新操作の履歴が保持される最大数:
-
更新操作の履歴が保持される最大数を見積もる計算式を次に示します。
更新操作の履歴が保持される最大数=
((ハートビートのタイムアウト時間
+MAX(生存確認の接続タイムアウト時間,生存確認の受信タイムアウト時間)
×(生存確認タイムアウト時のリトライ回数+1)
+ハートビートの送信間隔時間×疑惑しきい値係数)÷1,000)
×1EADSサーバへのデータの更新操作のスループット(単位:件/秒)※1,※2
- 注※1
-
キャッシュごとにスループットが大きく異なる場合は,キャッシュごとに算出したスループットのうち,最大の値を代入してください。
- 注※2
-
データ自動削除機能を使用する場合,create,put,putAllで更新するデータ件数分のデータを削除するため,create,put,putAllでデータを更新する件数を倍にして1EADSサーバへのデータの更新操作のスループットを見積もってください。
- ハートビートのタイムアウト時間:
-
サーバ定義のeads.failureDetector.heartbeat.timeoutパラメタの指定値
- MAX:
-
計算結果の最も大きい値を選ぶことを示しています。
(例)MAX(2,10)の計算結果は10となります。
- 生存確認の接続タイムアウト時間:
-
サーバ定義のeads.failureDetector.connection.timeoutパラメタの指定値
- 生存確認の受信タイムアウト時間:
-
サーバ定義のeads.failureDetector.read.timeoutパラメタの指定値
- 生存確認タイムアウト時のリトライ回数:
-
サーバ定義のeads.failureDetector.retryパラメタの指定値
- ハートビートの送信間隔時間:
-
サーバ定義のeads.failureDetector.heartbeat.intervalパラメタの指定値
- 疑惑しきい値係数:
-
サーバ定義のeads.failureDetector.assertive.thresholdパラメタの指定値が1の場合は1を代入してください。2以上の場合は2を代入してください。
- 合意処理で一度に合意できる処理の最大数:
-
共通設定のeads.replication.preparationsパラメタの指定値
- 更新操作の履歴の最大サイズ(単位:バイト):
-
更新操作の履歴の最大サイズを見積もる計算式を次に示します。
更新操作の履歴の最大サイズ(単位:バイト)=
MAX(クラスタに格納できるkeyの最大サイズ+valueの最大サイズ×2,(クラスタに格納できるkeyの最大サイズ+valueの最大サイズ)×最大同時更新データ件数)
- MAX:
-
計算結果の最も大きい値を選ぶことを示しています。
(例)MAX(2,10)の計算結果は10となります。
- クラスタに格納できるkeyの最大サイズ:
-
共通設定のeads.cache.key.maxsizeパラメタの指定値
- valueの最大サイズ:
-
put,create,update,replace実行時に指定するvalueの最大サイズ
- 最大同時更新データ件数:
-
メモリキャッシュを使用して,データの一括操作を実行する場合は,10を代入してください。それ以外の場合は,1を代入してください。
(3) ノンブロッキングI/O通信バッファのサイズ
ノンブロッキングI/O通信制御用の通信バッファサイズを見積もる計算式を次に示します。求めた値は,メガバイト単位に切り上げてから,共通設定のeads.server.nonBlocking.external.heapsizeパラメタに指定してください。
ノンブロッキングI/O通信バッファサイズ(単位:バイト)= MAX(最大通信データサイズ(単位:バイト)×最大同時割当数,1×1,0242) |
- MAX:
-
計算結果の最も大きい値を選ぶことを示しています。
(例)MAX(2,10)の計算結果は10となります。
- 最大通信データサイズ(単位:バイト):
-
次の表から使用するクライアントAPIの中で最も大きい通信データサイズを確認してください。その際,ノンブロッキングI/O通信バッファのサイズは,クラスタを再起動して変更するため,Key長などの変数は,現在値ではなく将来を見越した値を代入してください。
表4‒1 クライアントAPIと通信データサイズの一覧 項番
クライアントAPI
通信方向
通信データサイズ(単位:バイト)※
1
get
リクエスト
150+CacheName長+Key長
2
get
レスポンス
100+Value長
3
remove
リクエスト
150+CacheName長+Key長
4
remove
レスポンス
50
5
put
リクエスト
150+CacheName長+Key長+Value長
6
put
レスポンス
50
7
create
リクエスト
150+CacheName長+Key長+Value長
8
create
レスポンス
50
9
update
リクエスト
150+CacheName長+Key長+Value長
10
update
レスポンス
50
11
replace
リクエスト
150+CacheName長+Key長+Value長+比較Value長
12
replace
レスポンス
50
13
putAll
リクエスト
150+CacheName長+Σ[一括操作数](各要素のKey長+25)+Σ[一括操作数](各要素のValue長+25)
14
putAll
レスポンス
50
15
putAll:失敗
レスポンス
100+一括操作数×25
16
getAll(キー指定)
リクエスト
150+CacheName長+Σ[一括操作数](各要素のKey長+25)
17
getAll(キー指定)
レスポンス
100+Σ[一括操作数](各要素のValue長+25)
18
getAll(グループ指定)
リクエスト
150+CacheName長+Group長+Key長
19
getAll(グループ指定)
レスポンス
100+Σ[一括操作数](各要素のKey長+25)+Σ[一括操作数](各要素のValue長+25)
20
removeAll(キー指定)
リクエスト
150+CacheName長+Σ[一括削除数](各要素のKey長+25)
21
removeAll(キー指定)
レスポンス
50
22
removeAll(キー指定):失敗
レスポンス
100+一括削除数×25
23
removeAll(グループ指定)
リクエスト
150+CacheName長+Group長
24
removeAll(グループ指定)
レスポンス
50
25
removeAll(ノード指定)
リクエスト
150+CacheName長
26
removeAll(ノード指定)
レスポンス
50
27
getGroupNameSet
リクエスト
150+CacheName長
28
getGroupNameSet
レスポンス
100+Σ[一括取得Group数](各要素のGroup長+25)
29
getKeySet(グループ指定)
リクエスト
150+CacheName長+Group長
30
getKeySet(グループ指定)
レスポンス
100+Σ[一括取得Key数](各要素のKey長+25)
31
getKeySet(ノード指定)
リクエスト
150+CacheName長
32
getKeySet(ノード指定)
レスポンス
100+Σ[一括取得Key数](各要素のKey長+25)
33
getGroupCount
リクエスト
150+CacheName長
34
getGroupCount
レスポンス
100
35
getKeyCount(グループ指定)
リクエスト
150+CacheName長+Group長
36
getKeyCount(グループ指定)
レスポンス
100
37
getKeyCount(ノード指定)
リクエスト
150+CacheName長
38
getKeyCount(ノード指定)
レスポンス
100
39
getFirstKey(グループ指定)
リクエスト
150+CacheName長+Group長
40
getFirstKey(グループ指定)
レスポンス
100+Key長
41
getFirstKey(ノード指定)
リクエスト
150+CacheName長
42
getFirstKey(ノード指定)
レスポンス
100+Key長
43
getNextKey(グループ指定)
リクエスト
150+CacheName長+Group長+Key長
44
getNextKey(グループ指定)
レスポンス
100+Key長
45
getNextKey(ノード指定)
リクエスト
150+CacheName長+Key長
46
getNextKey(ノード指定)
レスポンス
100+Key長
47
executeFunction(キーまたはグループ指定)
リクエスト
150+CacheName長+FunctionName長+Key長またはGroup長+Function引数長
48
executeFunction(キーまたはグループ指定)
レスポンス
100+Function戻り値長
49
executeFunction(ノード指定)
リクエスト
150+CacheName長+FunctionName長+Function引数長
50
executeFunction(ノード指定)
レスポンス
100+Function戻り値長
- 注※
-
通信データサイズは,計算した結果に対して16バイト単位で切り上げて見積もってください。
- CacheName長:
-
キャッシュ名の文字数を代入してください。不明な場合は最大値(32)を代入してください。
- Key長:
-
キー名の文字数を代入してください。不明な場合は共通設定のeads.cache.key.maxsizeパラメタの指定値を代入してください。
- Group長:
-
グループ名の文字数を代入してください。不明な場合は{共通設定のeads.cache.key.maxsizeパラメタの指定値−2}を代入してください。
- Value長,比較Value長:
-
Value,比較Valueがnullである場合は0を代入してください。バイト配列である場合はそのバイト配列の長さを代入してください。オブジェクトである場合はそのオブジェクトをjava.io.ObjectOutputStream#writeObjectメソッドでシリアライズした際のバイト配列の長さを代入してください。不明な場合は最大値(262,144)を代入してください。
- FunctionName長:
-
ファンクション名の文字数を代入してください。不明な場合はEADSサーバにデプロイした全ファンクション中,最も長いファンクション名の文字数を代入してください。
- Function引数長, Function戻り値長:
-
nullである場合は0を代入してください。バイト配列である場合はそのバイト配列の長さを代入してください。オブジェクトである場合はそのオブジェクトをjava.io.ObjectOutputStream#writeObjectメソッドでシリアライズした際のバイト配列の長さを代入してください。
- 一括操作数:
-
APIの引数に渡したKey数とクライアント設定のeads.client.batchOperation.unitパラメタの指定値のどちらか小さい方を代入してください。
- 一括削除数:
-
APIの引数に渡したKey数と1,024のどちらか小さい方を代入してください。
- 一括取得Group数:
-
Groupの格納状況によって1EADSサーバで取得できると想定されるGroup数を代入してください。
- 一括取得Key数:
-
Keyの格納状況および引数によって取得できると想定されるKey数を代入してください。
- 最大同時割当数
-
サーバ設定のeads.server.nonBlocking.maxAllocateConnectionsパラメタの指定値
最大同時割当数を見積もる式を次に示します。
最大同時割当数=「最大通信データサイズ>データの送受信バッファのサイズ」を満たしており,
かつ同時に実行されるキャッシュ操作およびファンクション操作リクエスト数の最大値
-
最大通信データサイズ(単位:バイト)
この「4.1.3(3) ノンブロッキングI/O通信バッファのサイズ」の冒頭で見積もった最大通信データサイズの値
-
データの送受信バッファのサイズ(単位:バイト)
サーバ設定のeads.server.connection.buffersizeパラメタの指定値
-
(4) Explicitヒープサイズを見積もる際の注意事項
Explicitヒープサイズを見積もる際の注意事項を次に示します。
-
Explicitヒープの見積もりが適切でない場合,Explicitヒープの空き容量が少なくなると,value,更新操作の履歴およびノンブロッキングI/O通信バッファのフラグメントが発生し,性能が低下するおそれがあります。また,データ総量監視機能を使用していない場合,Explicitヒープの空き容量が不足して,valueを格納できなくなると,EADSサーバが縮退します。
-
Explicitヒープの空き容量が不足して更新操作の履歴が格納できなくなると,EADSサーバは既存の更新操作の履歴を削除することでExplicitヒープを確保しようとします。これによって,EADSサーバ間での更新操作の履歴の補完処理に失敗するおそれがあります。更新操作の履歴の補完処理については,「9.3.2(8) 更新操作の履歴の補完処理」を参照してください。
-
ノンブロッキングI/O通信バッファが不足してノンブロッキングI/O通信バッファを割り当てられない場合,または1ギガバイトより大きいサイズのノンブロッキングI/O通信バッファを要求された場合,EADSクライアントが次のエラーを返す場合があります。
-
クライアントAPI実行時:EAD_ERROR_SERVER_LIMIT_RECEIVE_BUFFER,またはEAD_ERROR_SERVER_LIMIT_SEND_BUFFER
-
EADSクライアント初期化時:EAD_ERROR_INIT_CLUSTERINFO
-