ロックリスト ( LOCKLIST ) はどのくらい確保しておけばよいですか?
DB2 v9.1以降、ロックリストは自己チューニング・メモリー(STMM)の対象となっていますので、デフォルトでは自動的に調整されます。
また、DB2 v9.7からは「CS with CC」とよばれる機能が追加され、分離レベルCSで稼動しているときは、ロック開放を待たずに(ロックウェイトせずに)コミット済みのデータを返す仕組みがデフォルトになっています。
そのため、設定を調整しなくてもロック・エスカレーションは起きずらくなっています。
しかしバッチ大量更新などで急に大量に必要になったばあいには自己チューニング・メモリーの増加が追いつかず、不足することがありえます。
以下が LOCKLIST サイズについての考え方です。
-
ロックリスト はデータベース全体で1つです。一時点で複数の処理が使いますので、同時に複数の処理が更新を行えば、その分、多く必要になります。
-
処理がコミットされればそれまで使われていたロックのエントリーは開放され他の処理で使えるようになります。なのでOLTP等ではそれほど大量には使用しないと思われます。考慮すべきなのは1トランザクションで大量の更新を行うバッチやインポート・ユーティリティなどでしょう。
-
v9.5では1つのロック・エントリーの大きさは32bit環境で96バイト、64bit環境で128バイト です。ざっくり100バイトと考えると、1Mバイトで1万更新分を保持できる計算です。
上記より、一般的には数十~100MBくらい確保しておけば十分なケースが多いでしょう(もちろん要件により異なります)。なお、指定は4K単位の数で行いますので10MBバイトを確保したい場合は(10MB÷4K=)2560を指定します。