Question & Answer
Question
Db2 はオペレーティング・システムから割り当てたメモリーを、独自の方法で管理して使用しています。 Db2 のメモリーの管理方法およびモニター方法を教えてください。
Cause
Db2 9.5 以降のメモリー管理について、以下の文書で解説します。
- Db2 のメモリー管理 - 1.概要 (この文書)
- Db2 のメモリー管理 - 2.各メモリー・セットの役割
- Db2 のメモリー管理 - 3.各メモリー・プールの役割
Answer
このページでは、Db2 がどのような単位でメモリーを管理し、OS 視点の情報との関連性について説明します。
- Db2 におけるメモリーの管理方法
Db2 は他のデータベース管理システム同様、キャッシュや一時的なバッファーの目的でメモリーを利用します。
メモリーは OS からまとまった単位で確保され、確保されたメモリーを Db2 自身で管理します。
Db2 の各コンポーネントでメモリーが必要になった場合、コンポーネントは Db2 のメモリー・マネージャーにメモリーを要求します。
ここでは、Db2 が OS からどのようにメモリーを確保して利用するのかを説明します。
- メモリー・セット / メモリー・プール / メモリー・ブロック
Db2 は、以下の 3 つの単位でメモリーを管理しています。
* メモリー・セット
Db2 は OS から取得したメモリーを、メモリー・セットとして管理します。
メモリー・セットは利用目的ごとにいくつかのタイプに分けられます。
例えば、データベースの管理のために用いられるメモリー・セットは「データベース・メモリー・セット」です。
共有メモリー・セットを割り当てるために、Linux/UNIX では shmget 、Windows では CreateFileMapping で共有メモリーを作成します。 PRIVATE メモリー・セットは、Linux/UNIX では malloc や mmap、 Windows は VirtualAlloc でプロセス・プライベートなヒープを割り当てます。
- インスタンス全体のメモリー・セットの利用状況の概要は db2pd -dbptnmem で確認できます。
$ db2pd -dbptnmem Database Partition 0 -- Active -- Up 9 days 22:16:07 -- Date 07/25/2012 11:04:34 Database Partition Memory Controller Statistics Controller Automatic: Y Memory Limit: 13819056 KB Current usage: 392512 KB HWM usage: 694528 KB Cached memory: 198976 KB Individual Memory Consumers: Name Mem Used (KB) HWM Used (KB) Cached (KB) ======================================================== APPL-SAMPLE 160000 160000 158208 DBMS-db2inst1 50176 50176 10304 FMP_RESOURCES 22528 22528 0 PRIVATE 16128 22656 6912 DB-SAMPLE 143552 143552 23552
- PRIVATE メモリー・セット以外の各メモリー・セットの詳細な情報は db2pd -memsets で確認できます。
$ db2pd -inst -alldbs -memsets Database Partition 0 -- Database SAMPLE -- Active -- Up 1 days 01:31:05 -- Date 07/25/2012 11:05:08 Memory Sets: Name Address Id Size(Kb) Key DBP Type Unrsv(Kb) Used(Kb) HWM(Kb) Cmt(Kb) Uncmt(Kb) DBMS 0x0780000000000000 577765464 50176 0x6A27D161 0 0 10304 15104 16896 16896 33280 SAMPLE 0x0700000040000000 517996551 143616 0x0 0 1 23552 65152 65344 65472 78144 FMP 0x0780000010000000 1070596177 22592 0x0 0 0 2 0 960 22592 0 AppCtl 0x0700000030000000 251658392 160064 0x0 0 12 0 1856 12416 17792 142272
* メモリー・プール
各コンポーネントはメモリー・ブロックという単位で必要なメモリーを要求し、Db2 のメモリー・マネージャーはメモリー・セットからメモリーを割り振ります。
このメモリー・ブロックを役割ごとにまとめた論理的な単位をメモリー・プールと呼び、利用の目的、揮発性、使用量増加時の制約などの共通の属性が定義されています。
例えば、ステートメント・ヒープは、ステートメントのコンパイルのために用いられるヒープで、データベース構成パラメーターの STMTHEAP で設定された値を上限に使用されます。また、ステートメント・ヒープはステートメントのコンパイル中に適宜使用され、コンパイルが完了すると解放されます。
- メモリー・プールの情報は、db2pd -mempools で確認できます。
$ db2pd -inst -db SAMPLE -mempools Database Partition 0 -- Database SAMPLE -- Active -- Up 1 days 01:32:13 -- Date 07/25/2012 11:06:16 Memory Pools: Address MemSet PoolName Id Overhead LogSz LogUpBnd LogHWM PhySz PhyUpBnd PhyHWM Bnd BlkCnt CfgParm0x07800000000012A8 DBMS fcm 74 0 0 1931054 0 0 1966080 0 Ovf 0 n/a 0x0780000000001160 DBMS fcmsess 77 65376 1401568 1687552 1401568 1572864 1703936 1572864 Ovf 3 n/a 0x0780000000001018 DBMS fcmchan 79 65376 259584 507904 259584 393216 524288 393216 Ovf 3 n/a 0x0780000000000ED0 DBMS fcmbp 13 65376 656896 925696 656896 851968 983040 851968 Ovf 3 n/a 0x0780000000000D88 DBMS fcmctl 73 111872 1594213 8675736 1594213 1769472 8716288 1769472 Ovf 11 n/a 0x0780000000000C40 DBMS monh 11 0 43244 368640 184584 131072 393216 393216 Ovf 33 MON_HEAP_SZ 0x0780000000000AF8 DBMS resynch 62 41216 155320 2752512 155320 262144 2752512 262144 Ovf 2 n/a 0x07800000000009B0 DBMS apmh 70 4512 1028580 8192000 1301708 1114112 8192000 1507328 Ovf 62 n/a 0x0780000000000868 DBMS kerh 52 0 650696 4128768 1097080 786432 4128768 1245184 Ovf 83 n/a 0x0780000000000720 DBMS bsuh 71 38752 2629531 15204352 3101907 3014656 15204352 3735552 Ovf 97 n/a 0x07800000000005D8 DBMS sqlch 50 0 2588975 2621440 2588975 2621440 2621440 2621440 Ovf 203 n/a 0x0780000000000490 DBMS krcbh 69 0 148352 196608 148792 196608 196608 196608 Ovf 13 n/a 0x0780000000000348 DBMS eduah 72 65440 2621384 2621408 2621384 2686976 2621440 2686976 Ovf 1 n/a 0x0700000040001910 SAMPLE utilh 5 0 3840 20512768 187948 65536 20512768 262144 Ovf 16 UTIL_HEAP_SZ 0x0700000040001680 SAMPLE pckcacheh 7 56896 978280 Unlimited 1030589 1179648 Unlimited 1179648 Ovf 311 PCKCACHESZ 0x0700000040001538 SAMPLE xmlcacheh 93 48832 147616 20971520 147616 196608 20971520 196608 Ovf 1 n/a 0x07000000400013F0 SAMPLE catcacheh 8 32640 427533 Unlimited 465285 524288 Unlimited 524288 Ovf 65 CATALOGCACHE_SZ 0x0700000040001160 SAMPLE bph 16 0 8600384 Unlimited 8600384 8650752 Unlimited 8650752 Ovf 64 n/a
* メモリー・ブロック
各コンポーネントはメモリー・ブロックという単位で必要なメモリーを要求し、Db2 のメモリー・マネージャーはメモリー・セットからメモリーを割り振ります。
割り振られたメモリーは、メモリー・プールを構成するブロックとして管理されます。
例えば、パッケージ・キャッシュの追加割り当てのためにメモリー・ブロックが要求された場合、ブロックはデータベース・メモリー・セットから割り当てられ、pckcacheh メモリー・プールの一部として管理されます。
- db2pd -memblocks でメモリー・ブロックの情報を確認できます。(注: 非常に多くのメモリー・ブロックに関する情報が出力されるため、パフォーマンスに影響を与える可能性があります。サポートから指示された場合など取得の必要があるタイミングのみで取得するようにしてください。)
$ db2pd -inst -db <データベース名> -memblocks All memory blocks in DBMS set. Address DataAddress PoolID PoolName BlkAge Size(Bytes)LOC File 0x0780000000820068 0x0780000000820080 77 fcmsess 3 865280 498 3002113363 0x0780000000810068 0x0780000000810080 77 fcmsess 2 12000 391 3002113363 0x078000000078FFC8 0x078000000078FFE0 77 fcmsess 1 524288 246 3315196337 0x0780000000720068 0x0780000000720080 79 fcmchan 3 126976 498 3002113363 0x0780000000710068 0x0780000000710080 79 fcmchan 2 1536 391 3002113363 0x07800000006EFFC8 0x07800000006EFFE0 79 fcmchan 1 131072 246 3315196337 0x0780000000610068 0x0780000000610080 13 fcmbp 3 524288 498 3002113363 0x0780000000600068 0x0780000000600080 13 fcmbp 2 1536 391 3002113363 0x07800000005DFFC8 0x07800000005DFFE0 13 fcmbp 1 131072 246 3315196337 0x0780000000A81928 0x0780000000A81940 73 fcmctl 11 321184 1650 2986298236 0x0780000000A31928 0x0780000000A31940 73 fcmctl 10 321184 1650 2986298236 0x0780000000E70248 0x0780000000E70260 11 monh 3 3248 2902 3400632764 0x0780000000E70F28 0x0780000000E70F40 11 monh 12613 456 303 882766201 0x0780000000E71DE8 0x0780000000E71E00 11 monh 13192 456 303 882766201 0x0780000000E71FC8 0x0780000000E71FE0 11 monh 13193 3248 2902 3400632764 0x0780000000E72CA8 0x0780000000E72CC0 11 monh 42331 16 621 3284019182 <以下略>
- インスタンス全体のメモリー・セットの利用状況の概要は db2pd -dbptnmem で確認できます。
- OS 上の情報との関連付け
PRIVATE を除くメモリー・セットは共有メモリーとして取得されます。
db2pd の出力における Id と ipcs の出力における ID を参照することで、メモリー・セットがどの共有メモリー・セグメントとして取得されているかがわかります。- ipcs コマンドから見た Db2 の共有メモリー・セット
$ ipcs -Sam T ID KEY MODE OWNER GROUP CREATOR CGROUP SEGSZ ... m 517996551 0xffffffff --rw------- db2inst1 db2grp1 db2inst1 db2grp1 268435456 <= SAMPLE SID : 0x11ecabe m 1070596177 0xffffffff --rw------- v97fenc2 staff db2inst1 db2grp1 268435456 <= FMP SID : 0x11578d4 m 577765464 0x6a27d161 --rw------- db2inst1 db2grp1 db2inst1 db2grp1 51380224 <= DBMS SID : 0x1126832 m 251658392 0xffffffff --rw------- db2inst1 db2grp1 db2inst1 db2grp1 163905536 <= AppCtl SID : 0x1184bd8 ...
AIX では、db2pd の出力における Address と svmon における Esid を参照することで、db2sysc プロセスがどのようにメモリーをマップしているかがわかります。
また、svmon における Vsid と ipcs における SID を参照することで、アタッチされている共有メモリーがどの共有メモリー・セグメントのものかがわかります。プライベート・メモリー・セットは、プロセスの heap 領域に確保されます。(svmon コマンドは、rootユーザーで実行してください。)- svmon で見た Db2 のメモリーセット
# svmon -P <db2sysc_PID> ------------------------------------------------------------------------------- Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB 295154 db2sysc 0 76 462 286559 Y Y Y Vsid Esid Type Description PSize Inuse Pin Pgsp Virtual 1126832 78000000 work default shmat/mmap s 0 0 0 4212 <= DBMS 11ecabe 70000004 work default shmat/mmap s 0 0 0 16356 <= SAMPLE 1177896 11 work text data BSS heap s 0 0 0 4730 <= PRIVATE 11578d4 78000001 work default shmat/mmap s 0 0 0 36 <= FMP 1184bd8 70000003 work default shmat/mmap s 0 0 0 4436 <= AppCtl
- ipcs コマンドから見た Db2 の共有メモリー・セット
関連情報
db2pd - Db2 データベースのモニターおよびトラブルシューティング・コマンド
[{"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
swg21620781