現在の一般メモリヒープ(gmheap)と取得可能なロックテーブル(locksiz)最大サイズについて
これは InterSystems FAQ サイトの記事です。
データ取込み処理の性能・エラー(Lock Table Full)対策として、一般メモリヒープ(gmheap)や ロックテーブルサイズ(locksiz)のパラメータチューニングを行う場合があると思います。
実際に、現在どのくらいの一般メモリヒープが確保できているのかは、ターミナルと管理ポータルで確認することができます。
★ターミナルの場合
// 一般メモリヒープサマリ
USER>w$system.Config.SharedMemoryHeap.GetUsageSummary()
4992226,6029312,59441152一般メモリヒープサマリは、使用量,アロケート量,構成量(bytes) で戻り値が表示されます。
使用量は、アロケートされたロックテーブルやプロセステーブルなどで実際に使用されている量になります。
アロケート量は、gmheapの領域でロックテーブルやプロセステーブルなどでアロケートされている量になります。
構成量は、gmheap(KB) +IRISシステム追加領域 で、これが現在の最大利用可能な量(実際の一般メモリヒープの領域の値)になります。
上で述べたように、構成量は構成パラメータの gmheap の単体の値と一致していません。
これは、IRISが自動で 構成パラメータ gmheap に内部で使用するメモリ領域分を付加して、一般メモリヒープの領域を構成しているためになります。詳細は以下のドキュメントをご覧ください。
以下のコマンドでは、ロックテーブル使用量を取得できます。
使用可能量, ユーザ使用可能量, 使用量(bytes) で戻り値が表示されます。詳細はこちらの記事をご覧ください。
%SYS>w##class(SYS.Lock).GetLockSpaceInfo()
16772624,16764624,4592
★管理ポータルの場合
システムオペレーション > システム使用 > 共有メモリヒープ使用状況 より確認できます。
一般メモリヒープ全体については、
"Total SMH Pages Used"の項目の"割り当てられたSMH/ST"が、アロケート量(bytes) を示します。


.png)
ロックテーブルについては
"Lock Table"の項目の"SMH/ST使用中"が、ロックテーブルの使用量(byte) を示します。
ユーザ使用可能量は、locksiz 値からこの値の差分により求める必要があります。
.png)
gmheap を変更する場合、IRISインスタンスの再起動を伴います。
現在の gmheap 内で設定可能な、locksiz の最大値を求めるには以下のように行います。
locksiz のみであれば、再起動なしに変更が可能です。
%SYS>write##class(SYS.Lock).GetMaxLockTableSize()
16777216
GetMaxLockTableSize() で取得できる値よりも大きな locksiz を指定したい場合は、差分を gmheap に追加して設定する必要があります。
その場合は、IRISインスタンスの再起動後に新しい設定値が反映されます。
【注目】
2023.1以降のバージョンでは、共有メモリヒープ(gmheap)や ロックに使用する共有メモリ(locksiz) の既定値が「0」に変更されました。リリースノートは、こちら
※2022.2は、gmheap=37,568(KB)、locksiz=65,536 (Byte) でした。
構成されたグローバルバッファサイズ(データベースキャッシュサイズ)に基づき、最も効果的な設定値が適用されます。
ユーザによって、グローバルバッファサイズが設定されていない場合は、使用可能なシステムメモリから構成されます。
以前のバージョンと同様に、ユーザは引き続き特定の値でこれらの既定値をオーバーライドすることが可能です。
Comments
2023.1以降のバージョンより、共有メモリヒープ(gmheap)や ロックに使用する共有メモリ(locksiz) の既定値が「0」に変更されましたので、記事後半、【注目】以降に追記しました。