IBM Support

[Db2] Db2 のメモリー管理 - 2.各メモリー・セットの役割

Question & Answer


Question

Db2 はオペレーティング・システムから割り当てたメモリーを、独自の方法で管理して使用しています。 Db2 のメモリーの管理方法およびモニター方法を教えてください。

Cause

Db2 9.5 以降のメモリー管理について、以下の文書で解説します。

Answer

このページでは、Db2 が OS から取得する単位である各メモリー・セットの役割とモニター方法について説明します。
 
  1. メモリー・セットとは

    メモリー・セットは、Db2 が OS からメモリーを取得する単位です。
    利用目的および Db2 内の様々な処理ごとに分けられます。
    例えば、データベースの管理のために用いられるメモリー・セットは「データベース・メモリー・セット」です。
     
  2. インスタンス・メモリー (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 程度に設定する必要があります。



     
  3. 各メモリー・セットの説明

    下記のメモリー・セットの概要、モニター方法について説明します。
    • 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

     
  4. 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
      
      Mem Used (KB) <-- 現在割り当てられている各メモリー・セットの量
      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
      Size(Kb) = メモリー・セットの設定値
      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_SIZE(Kb) = メモリー・セットの構成済み設定値か、自動的に管理される内部計算値
      MEMORY_SET_COMMITTED(Kb) = コミット済みのメモリー量、 RAM またはページング・スペース上に格納されている量
      MEMORY_SET_USE(Kb) = コミット済みのメモリーの中で、使用されているメモリー量
      MEMORY_SET_USED_HWM(Kb) = メモリー・セット作成されてから割り当てられた最高メモリー量

関連情報
メモリー・セットの概要
MON_GET_MEMORY_SET 表関数 - メモリー・セット情報の取得
db2pd - Db2 データベースのモニターおよびトラブルシューティング・コマンド
 
 
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
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"}]

Document Information

Modified date:
23 August 2023

UID

swg21620786