IBM Support

[Db2] Db2 のメモリー管理 - 1.概要

Question & Answer


Question

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

Cause

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

Answer


このページでは、Db2 がどのような単位でメモリーを管理し、OS 視点の情報との関連性について説明します。
 
  1.  Db2 におけるメモリーの管理方法

    Db2 は他のデータベース管理システム同様、キャッシュや一時的なバッファーの目的でメモリーを利用します。
    メモリーは OS からまとまった単位で確保され、確保されたメモリーを Db2 自身で管理します。
    Db2 の各コンポーネントでメモリーが必要になった場合、コンポーネントは Db2 のメモリー・マネージャーにメモリーを要求します。
    ここでは、Db2 が OS からどのようにメモリーを確保して利用するのかを説明します。
     
  2. メモリー・セット / メモリー・プール / メモリー・ブロック

    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
      <以下略>
  3. 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
      ...
    プロセスのメモリー・マップを参照することで、Db2 が各メモリー・セットをどのようにマップしているかが確認できます。
    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

関連情報
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

swg21620781