Question & Answer
Question
Db2 はオペレーティング・システムから割り当てたメモリーを、独自の方法で管理して使用しています。 Db2 のメモリーの管理方法およびモニター方法を教えてください。
Cause
Db2 9.5 以降のメモリー管理について、以下の文書で解説します。
- Db2 のメモリー管理 - 1.概要
- Db2 のメモリー管理 - 2.各メモリー・セットの役割 (この文書)
- Db2 のメモリー管理 - 3.各メモリー・プールの役割
Answer
このページでは、Db2 が OS から取得する単位である各メモリー・セットの役割とモニター方法について説明します。
関連情報
メモリー・セットの概要
MON_GET_MEMORY_SET 表関数 - メモリー・セット情報の取得
db2pd - Db2 データベースのモニターおよびトラブルシューティング・コマンド
- メモリー・セットとは
メモリー・セットは、Db2 が OS からメモリーを取得する単位です。
利用目的および Db2 内の様々な処理ごとに分けられます。
例えば、データベースの管理のために用いられるメモリー・セットは「データベース・メモリー・セット」です。
- インスタンス・メモリー (INSTANCE_MEMORY)
各メモリー・セットの説明の前に、Db2 インスタンス (1つのデータベース・パーティション) のメモリー使用量を制限するための、インスタンス・メモリー構成パラメーター (INSTANCE_MEMORY) について説明します。
Db2 9.5 以降の環境において、Db2 インスタンスのメモリー使用量の最大量をインスタンス・メモリー構成パラメーター (INSTANCE_MEMORY) によって制御することが可能になりました。
Db2 は OS からメモリー・セットと呼ばれる単位でメモリーを取得しますが、各メモリー・セットは INSTANCE_MEMORY に含まれています。- DB (Database) memory set
- Application memory set
- DBMS memory set
- FCM memory
- FMP memory set
- Private memory set
- Local Communication memory set
INSTANCE_MEMORY を AUTOMATIC に設定した場合、システムに搭載されたメモリー量にもとづいて値が決定されます。INSTANCE_MEMORY の詳細は以下のページを参照してください。
instance_memory - インスタンス・メモリー構成パラメーター
注: 4GB 以上の物理メモリーを搭載したシステムで 32 ビット・インスタンスを使用する場合、カーネルが使用するアドレス範囲のために、AUTOMATIC で設定された値は実際に使えない可能性があります。
例えば、Windows 32 ビットで /3GB スイッチを設定していない場合、ユーザーモードは 2GB に制限されます。この範囲内にプログラム・テキストやスタックも割り当てる必要があるため、ヒープの合計としての INSTANCE_MEMORY は 1.7GB 程度に設定する必要があります。
- 各メモリー・セットの説明
下記のメモリー・セットの概要、モニター方法について説明します。- DB memory set
- Application memory set
- DBMS memory set
- FCM memory
- FMP memory set
- Private memory set
- Local Communication memory set
DB (Database) memory (データベース・メモリー・セット)
概要- このセットはデータベースの単位で取得され、単一のデータベース固有の処理に使用されます。
- DATABASE_MEMORY 構成パラメーター (デフォルト AUTOMATIC) で上限値を設定可能です。
- データベース活動化時に領域が割り当てされますが、実際に使用されるタイミングは各メモリー・プールの性質に依存します。
- 以下の各メモリー・プールで構成されており、DATABASE_MEMORY と各メモリー・プールの関係は以下の図のように表すことができます。
- BP バッファー・プール・ヒープ
- PACKAGE_CACHE パッケージ・キャッシュ・ヒープ
- CAT_CACHE カタログ・キャッシュ・ヒープ
- DATABASE データベース・ヒープ
- LOCK_MGR ロック・マネージャー・ヒープ
- UTILITY ユーティリティー・ヒープ
- SHARED_SORT 共有ソート・ヒープ
モニター方法- 以下のいずれかの方法で使用量を確認できます。
- db2pd -dbptnmem
- db2pd -inst -alldbs -memsets
- MON_GET_MEMORY_SET 表関数 (V9.7 FixPack 5以降)
Application memory (アプリケーション・メモリー・セット)
概要:- このセットはデータベースの単位で取得され、このセットから割り振られるメモリーは、一般にアプリケーション固有の処理 (作業領域等) に使用されます。例えば、アプリケーション・ヒープ、統計ヒープ、ステートメント・ヒープ、および構成不要な共有作業域などが含まれます。
- APPL_MEMORY 構成パラメーター (デフォルト AUTOMATIC) で上限値を設定可能です。
- データベース活動化時に領域が確保されますが、実際に使用されるタイミングは下記の各ヒープの性質に依存し、それらの多くは接続数やアクティビティ数に依存します。
- 以下の各ヒープにより構成されています。
- Application Shared Heap (appshrh。各データベースごとにひとつ、構成不可)
- Application Heap (APPLHEAPSZ)
- Statement Heap (STMTHEAP)
- Statistic Heap (STAT_HEAP_SZ)
モニター方法:- 以下のいずれかの方法で使用量を確認できます。
- db2pd -dbptnmem
- db2pd -inst -alldbs -memsets
- MON_GET_MEMORY_SET 表関数 (V9.7 FixPack 5以降)
DBMS (Database Manager System) memory
概要:- このセットはインスタンスの単位で取得され、大部分の領域は、データベースに特定されない通信サービスなどの基本インフラストラクチャーの目的で使用されます。
- ユーザー構成可能メモリーにはモニター・ヒープ・サイズ (mon_heap_sz) と監査バッファー・サイズ (audit_buf_sz) が含まれていますが、ユーザーによる構成が不可であるインスタンスレベルの内部ヒープなども含まれるため、全体量は設定できません。
- インスタンス起動時に領域が確保されますが、実際に使用されるタイミングは各内部ヒープなどに依存します。
モニター方法:- 以下のいずれかの方法で使用量を確認できます。
- db2pd -dbptnmem
- db2pd -inst -alldbs -memsets
- MON_GET_MEMORY_SET 表関数 (V9.7 FixPack 5以降)
FCM memory
概要:- このセットはホストの単位で取得され、各パーティション間での 高速コミュニケーション・マネージャー (FCM) による通信のために使用されます。
- fcm_num_buffers および fcm_num_channels データベース・マネージャー構成パラメーターを使用して構成でき、すべてのローカル・パーティション (同一OS環境内の論理パーティション) で共有されます。
- インスタンス起動時に領域が割り当てられますが、実際に使用されるタイミングは FCM の使用状況に依存します。
モニター方法:- 以下のいずれかの方法で使用量を確認できます。
- db2pd -dbptnmem
- db2pd -inst -alldbs -memsets
- MON_GET_MEMORY_SET 表関数 (V9.7 FixPack 5以降)
FMP (Fenced Mode Process) memory
概要:- このセットはインスタンスの単位で取得され、 このセットから割り振られるメモリーは、エージェント (db2agent) と fenced モード・プロセス (db2fmp) の間の通信に使用されます。
- Db2_FMP_COMM_HEAPSZ レジストリー変数と aslheapsz (アプリケーション・サポート層ヒープ・サイズ) 構成パラメーターを使用して構成できます。
- インスタンス起動時に領域が確保され、コミットされます。
モニター方法:- 以下のいずれかの方法で使用量を確認できます。
- db2pd -dbptnmem
- db2pd -inst -alldbs -memsets
- MON_GET_MEMORY_SET 表関数 (V9.7 FixPack 5以降)
Private memory
概要:- このセットはインスタンスの単位で取得され、Db2 の動作に関する様々な情報を格納するために使用されており、db2sysc プロセスのプライベートエリアに確保されます。
- 構成不可能な領域であり、Db2 の内部で管理されています。
- sheapthres > 0 に設定している場合は、この領域に専用ソートの領域が確保されます。
モニター方法:- 以下のいずれかの方法で使用量を確認できます。
- db2pd -dbptnmem
- MON_GET_MEMORY_SET 表関数 (V9.7 FixPack 5以降)
Local Communication memory set
概要:- このセットはローカル・アプリケーションとの接続の単位で取得され、このセットから割り振られるメモリーはローカル・アプリケーションとその関連エージェントの間の通信に使用されます。
- aslheapsz (アプリケーション・サポート層ヒープ・サイズ) 構成パラメーターを使用して構成できます。
- データベース・マネージャー・エージェント・プロセスがローカル・アプリケーションで開始するときに確保され、コミットされます。
モニター方法:- 以下の方法で使用量を確認できます。
- db2pd -dbptnmem
- INSTANCE_MEMORY や各メモリー・セットのモニター方法
- db2pd -dbptnmem コマンド
INSTANCE_MEMORYや各メモリー・セットの状況は、db2pd コマンドの dbptnmem オプションで確認できます。$ db2pd -dbptnmem Database Partition 0 -- Active -- Up x days xx:xx:xx -- Date xx/xx/20xx xx:xx:xx Database Partition Memory Controller Statistics Controller Automatic: Y Memory Limit: 3355444 KB <-- インスタンス・メモリー (INSTANCE_MEMORY) の最大量 Current usage: 433216 KB <-- 現在消費されているインスタンス・メモリーの量 HWM usage: 433216 KB <-- インスタンス・メモリーの消費量のピーク水準点または最高水準点 Cached memory: 200896 KB <-- 確保しているが使用中ではない領域 Individual Memory Consumers: Name Mem Used (KB) HWM Used (KB) Cached (KB) ======================================================== APPL-TPCC 160000 160000 158848 <-- Application memory set DBMS-ryumuck 53696 53696 10496 <-- DBMS memory set FMP_RESOURCES 22528 22528 0 <-- FMP memory set PRIVATE 11392 11392 1088 <-- PRIVATE memory set LCL-p1601762 128 128 0 <-- Local Communication Memory DB-TPCC 185472 185472 30464 <-- DB memory sets
HWM Used (KB) <-- 各メモリー・セットの量のピーク水準点または最高水準点
Cached (KB) <-- Mem Used のうち、現在使用中ではないものの、今後のメモリー割り振りのためにすぐに使用可能な量
db2pd -dbptmem コマンド以外にも、下記のいずれかの方法で確認が可能です。- db2pd -memsets コマンド
各メモリー・セット (Private memoryは除く) の状況は、db2pd コマンドの -memsets オプションを使用することにより確認できます。
ただし、この方法では Private memory と INSTANCE_MEMORY の状況は確認できません。$ db2pd -inst -alldbs -memsets (略) Memory Sets: Name Address Id Size(Kb) Key DBP Type Unrsv(Kb) Used(Kb) HWM(Kb) Cmt(Kb)Uncmt(Kb) DBMS 0x0780000000000000 346030088 53696 0x463E9761 0 0 10496 15360 15424 15424 38272 TPCC 0x0700000040000000 721420304 185536 0x0 0 1 30464 65536 67968 67968 117568 FMP 0x0780000010000000 5242921 22592 0x0 0 0 2 0 192 22592 0 AppCtl 0x0700000030000000 208666682 160064 0x0 0 12 0 1216 1280 1280 158784 App7 n/a 212860974 128 0x0 0 4 0 128 0 128 0 Trace 0x0770000000000000 324010031 137570 0x463E9774 0 -1 0 137570 0 137570 0
Unrsv(Kb) = 現在使用中ではないが、今後のメモリー割り振りのためにすぐに使用可能な量
Used(Kb) = コミット済みのメモリーの中で、使用されているメモリー量
Cmt(Kb) = コミット済みのメモリー量、RAM またはページング・スペース上に格納されている量
HWM(Kb) = メモリー・セット作成されてから割り当てられた最高メモリー量
- MON_GET_MEMORY_SET 表関数 (V9.7 FixPack 5 以降の環境)
V9.7 FixPack 5 以降の環境では、MON_GET_MEMORY_SET 表関数を使用することにより各メモリー・セットの状況を確認できます。
ただし、この方法では INSTANCE_MEMORY の状況は確認できません。$ db2 "select varchar(memory_set_type, 20) as set_type, varchar(db_name, 20) as dbname, memory_set_size, memory_set_committed, memory_set_used, memory_set_used_hwm from table( mon_get_memory_set(null, current_server, -2))" SET_TYPE DBNAME MEMORY_SET_SIZE MEMORY_SET_COMMITTED MEMORY_SET_USED MEMORY_SET_USED_HWM ----------- ------ --------------- -------------------- --------------- -------------------- DBMS - 54984 15794 15728 15794 FMP - 23134 23134 196 196 PRIVATE - 11665 11665 10551 10747 DATABASE TPCC 189988 69599 67371 69599 APPLICATION TPCC 163905 1703 1245 1703
MEMORY_SET_COMMITTED(Kb) = コミット済みのメモリー量、 RAM またはページング・スペース上に格納されている量
MEMORY_SET_USE(Kb) = コミット済みのメモリーの中で、使用されているメモリー量
MEMORY_SET_USED_HWM(Kb) = メモリー・セット作成されてから割り当てられた最高メモリー量
- db2pd -dbptnmem コマンド
関連情報
メモリー・セットの概要
MON_GET_MEMORY_SET 表関数 - メモリー・セット情報の取得
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
swg21620786