Hitachi

インメモリデータグリッド Hitachi Elastic Application Data Store ユーザーズガイド


4.1.3 Explicitヒープサイズを見積もる

Explicitヒープサイズを見積もる計算式を次に示します。

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) Explicitヒープサイズを見積もる際の注意事項

Explicitヒープサイズを見積もる際の注意事項を次に示します。

  1. Explicitヒープの見積もりが適切でない場合,Explicitヒープの空き容量が少なくなると,value,更新操作の履歴およびノンブロッキングI/O通信バッファのフラグメントが発生し,性能が低下するおそれがあります。また,データ総量監視機能を使用していない場合,Explicitヒープの空き容量が不足して,valueを格納できなくなると,EADSサーバが縮退します。

  2. Explicitヒープの空き容量が不足して更新操作の履歴が格納できなくなると,EADSサーバは既存の更新操作の履歴を削除することでExplicitヒープを確保しようとします。これによって,EADSサーバ間での更新操作の履歴の補完処理に失敗するおそれがあります。更新操作の履歴の補完処理については,「9.3.2(8) 更新操作の履歴の補完処理」を参照してください。

  3. ノンブロッキング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