Question & Answer
Question
Db2 はオペレーティング・システムから割り当てたメモリーを、独自の方法で管理して使用しています。 Db2 のメモリーの管理方法およびモニター方法を教えてください。
Cause
Db2 9.5 以降のメモリー管理について、以下の文書で解説します。
- Db2 のメモリー管理 - 1.概要
- Db2 のメモリー管理 - 2.各メモリー・セットの役割
- Db2 のメモリー管理 - 3.各メモリー・プールの役割 (この文書)
Answer
このページでは、各メモリー・プールの役割およびモニター方法を、以下6項目の観点から説明します。
3. メモリー・プールとは
各コンポーネントはメモリー・ブロックという単位で必要なメモリーを要求し、Db2 のメモリー・マネージャーは、メモリー・セットからメモリーを割り振ります。
このメモリー・ブロックを役割ごとにまとめた論理的な単位をメモリー・プールと呼び、利用の目的、揮発性、使用量増加時の制約などの共通の属性が定義されています。
データベース・セットとアプリケーション・セットに含まれる主なメモリー・プールには以下のものがあります。
- 利用の目的
- 割り当てのタイミング
- 使用されるタイミング
- 制御するパラメーター
- 所属するメモリー・セット
- ヒープ使用量のモニター方法
3. メモリー・プールとは
各コンポーネントはメモリー・ブロックという単位で必要なメモリーを要求し、Db2 のメモリー・マネージャーは、メモリー・セットからメモリーを割り振ります。
このメモリー・ブロックを役割ごとにまとめた論理的な単位をメモリー・プールと呼び、利用の目的、揮発性、使用量増加時の制約などの共通の属性が定義されています。
データベース・セットとアプリケーション・セットに含まれる主なメモリー・プールには以下のものがあります。
- BP (bph) バッファー・プール・ヒープ
- PACKAGE_CACHE (pckcacheh) パッケージ・キャッシュ・ヒープ
- CAT_CACHE (catcacheh) カタログ・キャッシュ・ヒープ
- DATABASE (dbh) データベース・ヒープ
- LOCK_MGR (lockh) ロック・マネージャー・ヒープ
- UTILITY (utilh) ユーティリティー・ヒープ
- SHARED_SORT (shsorth) 共有ソート・ヒープ
- APPLICATION (apph) アプリケーション・ヒープ
- STATEMENT (stmth) ステートメント・ヒープ
- STATISTICS (stath) 統計ヒープ
- BP バッファー・プール・ヒープ 利用の目的
バッファー・プールは、表および索引のデータがディスクから読み取られるときに、それらをキャッシュに入れるために使用されます。データベース・マネージャーによって割り振られるメイン・メモリーの領域です。
割り当てのタイミング
データベース活動化時に設定されたサイズが割り当てられます。
STMM で自動調整している場合は、前回非活動化した時点のサイズが割り当てられます。
使用されるタイミング
SQL 要求などに応じて、表や索引などのオブジェクトがアクセスされると、該当データが含まれるページがバッファー・プールに固定されます。 固定されたページは、データベースがシャットダウンされるか、別のページを固定するために固定解除されるまで、バッファー・プール内に留まります。
制御するパラメーター
データベース構成パラメーターはありません。
新規データベースごとに、デフォルトのバッファー・プール (IBMDEFAULTBP) が定義されます。
追加のバッファー・プールを CREATE BUFFERPOOL、DROP BUFFERPOOL および ALTER BUFFERPOOL ステートメントを使用して、作成、ドロップおよび変更できます。 SYSCAT.BUFFERPOOLS カタログ・ビューで、データベース内に定義されたバッファー・プールの情報がリストできます。詳細はバッファー・プールを参照してください。
所属するメモリー・セット
DATABASE
ヒープ使用量のモニター方法- db2pd -bufferpool でデータベースに存在する各バッファー・プールのサイズが表示できます。
$ db2pd -db sample -bufferpool Database Member 0 -- Database SAMPLE -- Active -- Up 0 days 00:00:13 -- Date 2023-03-17-20.37.14.654397 Bufferpools: First Active Pool ID 1 Max Bufferpool ID 1 Max Bufferpool ID on Disk 1 Num Bufferpools 5 Address Id Name PageSz PA-NumPgs BA-NumPgs CurrentSz PostAlter SuspndTSCt Automatic 0x00007FEE4D534120 1 IBMDEFAULTBP 8192 1000 0 1000 1000 0 False 0x00007FEE4D4FFF20 4096 IBMSYSTEMBP4K 4096 16 0 16 16 0 False 0x00007FEE4D50CFA0 4097 IBMSYSTEMBP8K 8192 16 0 16 16 0 False 0x00007FEE4D51A020 4098 IBMSYSTEMBP16K 16384 16 0 16 16 0 False 0x00007FEE4D5270A0 4099 IBMSYSTEMBP32K 32768 16 0 16 16 0 False
- db2pd -pages summary の Total number of pages はバッファー・プールの使用量を示します。 バッファープールが複数ある場合は、BUFFERPOOL ID を指定して使用量を確認できます。
バッファー・プールが複数あり BUFFERPOOL ID を指定しない場合は合計値が戻されます。
データベース全体の合計:$ db2pd -db sample -pages summary Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:03:41 -- Date 10/10/2012 19:17:20 Bufferpool Pages: First Active Pool ID 1 Max Bufferpool ID 2 Max Bufferpool ID on Disk 2 Num Bufferpools 6 Total number of pages: 597
$ db2pd -db sample -pages summary 1 Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:04:23 -- Date 10/10/2012 19:18:02 Bufferpool Pages: First Active Pool ID 1 Max Bufferpool ID 2 Max Bufferpool ID on Disk 2 Num Bufferpools 6 Total number of pages: 124 $ db2pd -db sample -pages summary 2 Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:06:13 -- Date 10/10/2012 19:19:52 Bufferpool Pages: First Active Pool ID 1 Max Bufferpool ID 2 Max Bufferpool ID on Disk 2 Num Bufferpools 6 Total number of pages: 473
- db2pd -bufferpool でデータベースに存在する各バッファー・プールのサイズが表示できます。
- PACKAGE_CACHE パッケージ・キャッシュ・ヒープ 利用の目的
パッケージ・キャッシュはデータベース上の静的および動的 SQL および XQuery ステートメントのセクションをキャッシュするために使用されます。
割り当てのタイミング
データベースの活動化時に最低限のサイズが割り当てられます。
使用されるタイミング
SQL の実行オブジェクト (セクションまたはバリエーション) をパッケージ・キャッシュに保持することにより、システム・カタログからの取り出し (静的 SQL) や SQL のコンパイル (動的 SQL) のオーベーヘッドを低減します。
このため、動的および静的 SQL 要求により、キャッシュ・エントリーが挿入されるたびに単調増加します。
追加のキャッシュ挿入によってキャッシュの論理サイズが PCKCACHESZ を超える場合にキャッシュのクリーンアップが試行され、追加のキャッシュ挿入後も PCKCACHESZ を超えないように管理されます。使用中のキャッシュ・エントリーが多いなどの理由で、クリーンアップを行っても PCKCACHESZ を超えてしまった場合は、パッケージ・キャッシュ・オーバーフロー (ADM4500W) が記録されます。
SQL で参照する表の ALTER や統計更新などにより、無効化されたキャッシュ・エントリーは自動的に除去されます。
制御するパラメーター
pckcachesz - パッケージ・キャッシュ・サイズ構成パラメーターを参照ください。
所属するメモリー・セット
DATABASE
ヒープ使用量のモニター方法- db2pd -mempools で LogSz がプール・メモリー要求の現在の合計を示します。
$ db2pd -alldbs -mempools Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:49:37 -- Date 10/10/2012 14:17:07 Memory Pools: Address MemSet PoolName Id Overhead LogSz LogUpBnd LogHWM PhySz PhyUpBnd PhyHWM Bnd BlkCnt CfgParm 0x0700000040001910 SAMPLE utilh 5 0 4800 20512768 50164 65536 20512768 65536 Ovf 20 UTIL_HEAP_SZ 0x0700000040001680 SAMPLE pckcacheh 7 63584 1258985 Unlimited 1278407 1376256 Unlimited 1376256 Ovf 359 PCKCACHESZ
- db2pd -dynamic/-static の出力では、Current Memory Used がパッケージ・キャッシュによって使用されるバイト数を示します。
$ db2pd -alldbs -dynamic Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:51:31 -- Date 10/10/2012 14:19:01 Dynamic Cache: Current Memory Used 1258985
$ db2pd -alldbs -static Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:54:02 -- Date 10/10/2012 14:21:32 Static Cache: Current Memory Used 1258985
- db2pd -mempools で LogSz がプール・メモリー要求の現在の合計を示します。
- CAT_CACHE カタログ・キャッシュ・ヒープ 利用の目的
カタログ・キャッシュはデータベース共用メモリーから割り振られ、システム・カタログ情報をキャッシュに入れる場合に使用されます。パーティション・データベース・システムでは、それぞれのデータベース・パーティションごとにカタログ・キャッシュが 1 つずつあります。
割り当てのタイミング
データベースの活動化時に最低限のサイズが割り当てられます。
使用されるタイミング
SQL のコンパイル時や権限のチェック時に、システム・カタログの内容を検索した結果がキャッシュされます。
パッケージ・キャッシュと同様の方法で管理され、キャッシュがいっぱいになるまで単調増加します。
制御するパラメーター
catalogcache_sz - カタログ・キャッシュ・サイズ構成パラメーターを参照ください。
所属するメモリー・セット
DATABASE
ヒープ使用量のモニター方法- db2pd -mempools で LogSz がプール・メモリー要求の現在の合計を示します。
$ db2pd -alldbs -mempools Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:49:37 -- Date 10/10/2012 14:17:07 Memory Pools: Address MemSet PoolName Id Overhead LogSz LogUpBnd LogHWM PhySz PhyUpBnd PhyHWM Bnd BlkCnt CfgParm 0x0700000040001910 SAMPLE utilh 5 0 4800 20512768 50164 65536 20512768 65536 Ovf 20 UTIL_HEAP_SZ 0x0700000040001680 SAMPLE pckcacheh 7 63584 1258985 Unlimited 1278407 1376256 Unlimited 1376256 Ovf 359 PCKCACHESZ 0x07000000400013F0 SAMPLE catcacheh 8 32640 267430 Unlimited 292126 327680 Unlimited 393216 Ovf 52 CATALOGCACHE_SZ
- db2pd -catalogcache の Current Size でも確認できます。
-catalogcache は各キャッシュ・エントリーの詳細やロック名も表示します。$ db2pd -alldbs -catalogcache Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:48:02 -- Date 10/10/2012 14:15:32 Catalog Cache: Configured Size 819200 Current Size 279934 #カタログ・キャッシュで使用される現在のバイト数。
- db2pd -mempools で LogSz がプール・メモリー要求の現在の合計を示します。
- DATABASE データベース・ヒープ
利用の目的
データベース・ヒープはデータベースごとに 1 つ存在します。
このヒープには、表、索引、表スペース、およびバッファー・プールのコントロール・ブロック情報が含まれます。また、ログ・バッファー (logbufsz)、およびユーティリティーによって使用される一時メモリー用のスペースも含まれます。
さらに、上記以外の文書化されていない様々なメモリー要求を満たすためにも使用されます。
割り当てのタイミング
データベース活動化時に、ログ・バッファーを含む基本的なサイズが割り当てられます。
使用されるタイミング
データベース・ヒープは様々な目的に利用されるため、各利用目的に応じて適宜使用されます。
制御するパラメーター
dbheap - データベース・ヒープ構成パラメーターを参照ください。
所属するメモリー・セット
DATABASE
ヒープ使用量のモニター方法- db2pd -mempools で LogSz がプール・メモリー要求の現在の合計を示します。
$ db2pd -alldbs -mempools Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:49:37 -- Date 10/10/2012 14:17:07 Memory Pools: Address MemSet PoolName Id Overhead LogSz LogUpBnd LogHWM PhySz PhyUpBnd PhyHWM Bnd BlkCnt CfgParm *中略* 0x0700000040000348 SAMPLE dbh 2 173024 35362853 49086464 35392259 36044800 49086464 36044800 Ovf 1912 DBHEAP
- db2pd -mempools で LogSz がプール・メモリー要求の現在の合計を示します。
- LOCK_MGR ロック・マネージャー・ヒープ
利用の目的
ロック・リストは該当のオブジェクトのロックを保留、記録するのに使われます。
データベースごとに 1 つのロック・リストが存在し、ロック・リストにはデータベースに同時に接続しているすべてのアプリケーションが保持しているロックが含まれます。
割り当てのタイミング
データベースが活動化されたときに LOCKLIST で指定されたサイズが確保されます。
使用されるタイミング
トランザクションによってロック要求が行われると使用され、ロック期間が過ぎた場合やトランザクションの完了で解放されます。
現在どの程度使用されているかは、lock_list_in_use (単位:バイト) モニター・エレメントを参照します。
制御するパラメーター
locklist - ロック・リスト用最大ストレージ構成パラメーターを参照ください。
所属するメモリー・セット
DATABASE
ヒープ使用量のモニター方法
MON_GET_DATABASE 表関数を使用して、使用中のロック・リスト・メモリーの合計サイズ (バイト) を確認できます。
MON_GET_DATABASE 表関数 - データベース・メトリックの取得
lock_list_in_use - 使用中のロック・リスト・メモリーの合計 : モニター・エレメント-
$ db2 "select lock_list_in_use from table(mon_get_database(-1)) as t" LOCK_LIST_IN_USE -------------------- 64000 1 レコードが選択されました。
-
- UTILITY ユーティリティー・ヒープ
利用の目的
BACKUP、RESTORE、および LOAD (ロード・リカバリーを含む) ユーティリティーによって同時に使用されます。
割り当てのタイミング
データベース活動化時にヒープ管理用の最低限のサイズが割り当てられます。
使用されるタイミング
BACKUP、RESTORE および LOAD ユーティリティーの実行時に使用され、ユーティリティーの終了で解放されます。
制御するパラメーター
util_heap_sz - ユーティリティー・ヒープ・サイズ構成パラメーターを参照ください。
所属するメモリー・セット
DATABASE
ヒープ使用量のモニター方法- db2pd -mempools の LogSz が現在のプール・メモリー要求の合計を示します。
$ db2pd -alldbs -mempools Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:49:37 -- Date 10/10/2012 14:17:07 Memory Pools: Address MemSet PoolName Id Overhead LogSz LogUpBnd LogHWM PhySz PhyUpBnd PhyHWM Bnd BlkCnt CfgParm 0x0700000040001910 SAMPLE utilh 5 0 4800 20512768 50164 65536 20512768 65536 Ovf 20 UTIL_HEAP_SZ
- db2pd -mempools の LogSz が現在のプール・メモリー要求の合計を示します。
- SHARED_SORT 共有ソート・ヒープ
利用の目的
ソートの他にも、ハッシュ結合、索引 ANDing、ブロック索引 ANDing、マージ結合、およびメモリー内の表などのソート・メモリー・コンシューマーがあります。
共用ソート・メモリー・コンシューマーの共用メモリーの合計が限界値 sheapthres_shr に近づくと、メモリー・スロット機構が活動化され、将来の共用ソート・メモリー・コンシューマー要求に対して、その要求よりも少ない量のメモリーが付与される場合があります。
割り当てのタイミング
データベース活動化時にヒープ管理用の最低限のサイズが割り当てられます。
使用されるタイミング
共有ソートが行われるとき、エージェントによって要求されたサイズが使用されます。共有ソートの合計サイズは sheapthres_shr パラメーターで緩やかに制限されます。
制御するパラメーター
sheapthres_shr - 共用ソートのソート・ヒープのしきい値構成パラメーターを参照ください。
所属するメモリー・セット
DATABASE
ヒープ使用量のモニター方法- db2pd -mempools で LogSz が現在のプール・メモリー要求の合計を示します。
$ db2pd -alldbs -mempools Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:49:37 -- Date 10/10/2012 14:17:07 Memory Pools: Address MemSet PoolName Id Overhead LogSz LogUpBnd LogHWM PhySz PhyUpBnd PhyHWM Bnd BlkCnt CfgParm *中略* 0x07000000400005D8 SAMPLE shsorth 18 0 0 20512768 354400 65536 20512768 524288 Ovf 0 SHEAPTHRES_SHR
- db2pd -mempools で LogSz が現在のプール・メモリー要求の合計を示します。
- APPLICATION アプリケーション・ヒープ
利用の目的
このヒープは、そのアプリケーションに対して動作するすべてのデータベース・エージェントで共有されます。
割り当てのタイミング
アプリケーションが接続したとき、ヒープを管理する最低限のサイズが割り当てられます。
使用されるタイミング
宣言済み一時表の記述子や LOB 記述子が使用する領域など、アプリケーション接続に関連する多目的なヒープとして使用されます。
制御するパラメーター
applheapsz - アプリケーション・ヒープ・サイズ構成パラメーターを参照ください。
所属するメモリー・セット
APPLICATION
ヒープ使用量のモニター方法- db2pd -mempools で LogSz が現在のプール・メモリー要求の合計を示します。
$ db2pd -alldbs -mempools Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 01:49:37 -- Date 10/10/2012 14:17:07 Memory Pools: Address MemSet PoolName Id Overhead LogSz LogUpBnd LogHWM PhySz PhyUpBnd PhyHWM Bnd BlkCnt CfgParm *中略* 0x0700000030001160 Appl apph 1 0 10963 1048576 10963 65536 1048576 65536 Phy 17 APPLHEAPSZ 0x0700000030001018 Appl apph 1 0 10963 1048576 10963 65536 1048576 65536 Phy 17 APPLHEAPSZ 0x0700000030000ED0 Appl apph 1 0 10963 1048576 10963 65536 1048576 65536 Phy 17 APPLHEAPSZ 0x0700000030000D88 Appl apph 1 0 10963 1048576 10963 65536 1048576 65536 Phy 17 APPLHEAPSZ 0x0700000030000C40 Appl apph 1 0 10963 1048576 10963 65536 1048576 65536 Phy 17 APPLHEAPSZ 0x0700000030000AF8 Appl apph 1 0 92883 1048576 93387 196608 1048576 196608 Phy 1041 APPLHEAPSZ 0x07000000300009B0 Appl apph 1 0 10963 1048576 10963 65536 1048576 65536 Phy 17 APPLHEAPSZ 0x0700000030000868 Appl apph 1 0 10963 1048576 12947 65536 1048576 65536 Phy 17 APPLHEAPSZ 0x0700000030000720 Appl apph 1 0 10963 1048576 10963 65536 1048576 65536 Phy 17 APPLHEAPSZ 0x0700000030000490 Appl apph 1 0 16597 1048576 52182 65536 1048576 65536 Phy 30 APPLHEAPSZ 0x0700000030000348 Appl appshrh 20 11552 669560 4096000 685208 851968 4128768 851968 Phy 267 application shared
- db2pd -mempools で LogSz が現在のプール・メモリー要求の合計を示します。
- STATEMENT ステートメント・ヒープ
利用の目的
ステートメント・ヒープは、SQL または XQuery コンパイラーが SQL または XQuery ステートメントをコンパイルするためのワークスペースとして使用されます。
この作業域は、動的 SQL または XQuery ステートメントの場合はプログラムの実行時に使用されるのに対して、静的 SQL または XQuery ステートメントの場合はバインド処理時に使用され、プログラム実行時には使用されません。
割り当てのタイミング
個々の SQL ステートメントのコンパイル、プリコンパイル、バインド時にコンパイラーが必要とするサイズが割り当てられます。コンパイルが終わると解放されます。
制御するパラメーター
stmtheap - ステートメント・ヒープ・サイズ構成パラメーターを参照ください。
所属するメモリー・セット
APPLICATION
ヒープのモニター方法
各 SQL の EXPLAIN を採取し、HEAPUSE : (Maximum Statement Heap Usage) を確認できます。
stmtheap は(ヒープの存続期間が極めて短いため、通常 db2pd -memp や db2mtrk では確認できません。例えば以下の EXPLAIN の例では 32 ミリ秒しか存在しません。また、これらのツールで表示されて、該当コンパイルが使用した最大量を示す数値かどうかは確認できません。)- db2exfmt 出力より抜粋
Plan Details: ------------- 1) RETURN: (Return Result) *中略* Arguments: --------- BLDLEVEL: (Build level) DB2 v9.7.0.5 : s111017 HEAPUSE : (Maximum Statement Heap Usage) 80 Pages PREPTIME: (Statement prepare time) 32 milliseconds STMTHEAP: (Statement heap size) 8192
- db2exfmt 出力より抜粋
- STATISTICS 統計ヒープ
利用の目的
統計ヒープは RUNSTATS コマンドを使って統計を収集するときに使用されます。
割り当てのタイミング
RUNSTATS コマンドなどによる統計情報の収集時。統計情報の収集が終わると解放されます。
制御するパラメーター
stat_heap_sz - 統計ヒープ・サイズ構成パラメーターを参照ください。
統計オプションが多ければ多いほど、使用されるメモリー量も多くなります (例えば、LIKE 統計または DETAILED 索引統計が収集される場合)。
列統計が収集される場合、統計収集対象の列の数に応じて使用されるメモリー量も多くなります。
分散統計が収集される場合、収集対象の頻出値および/または変位値の数に応じて、使用されるメモリー量も多くなります。(デフォルトの設定の AUTOMATIC が推奨値です。)
所属するメモリー・セット
APPLICATION
ヒープ使用量のモニター方法- RUNSTATS 実行中の db2pd -mempools で LogSz が現在のプール・メモリー要求の合計を示します。
$ db2pd -alldbs -mempools Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:31:06 -- Date 10/24/2012 10:58:03 Memory Pools: Address MemSet PoolName Id Overhead LogSz LogUpBnd LogHWM PhySz PhyUpBnd PhyHWM Bnd BlkCnt CfgParm *中略* 0x07000000300012A8 Appl stath 6 0 1376 17956864 1376 65536 17956864 65536 Phy 4 STAT_HEAP_SZ
- RUNSTATS 実行中の db2pd -mempools で LogSz が現在のプール・メモリー要求の合計を示します。
運用上の考慮点
- db2pd -mempools の LogSz と PhySz の違い
LogSz (論理サイズ) は、プール・メモリー要求の現在の合計で、割り当てられたメモリー・ブロックの合計値を示します。
PhySz (論理サイズに必要な物理サイズ) には、実際にメモリー・プールに割り当てられたチャンクの合計値を示します。
Db2 内部でプールにメモリーが割り振られる単位はバイト単位ではなく、64KB のチャンク単位です。
そのため、64KB より小さいメモリー・ブロックが要求されてもチャンク単位でプールに割り当てられるため、プールの PhySz は LogSz より大きくなります。
たとえば、20KB のメモリー・ブロックを要求して 64KB の新しいチャンクから割り当てられたとき、論理サイズ は20KB 増えますが、物理サイズは 64KB 増えます。
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m0z000000GozAAAS","label":"Memory"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
23 August 2023
UID
swg21620787