IBM Support

[Db2] ADM4500W パッケージ・キャッシュ・オーバーフローの原因と対処方法

Question & Answer


Question

イベントログ (Windows)、管理通知ログ (Unix/Linux) に「ADM4500W パッケージ・キャッシュのオーバーフロー条件が発生しました。」が記録されています。 この警告の原因と対処方法を教えてください。

Cause

Db2 は、SQL コンパイラーを使って SQL ステートメントを実行可能な形式にコンパイルします。動的 SQL は実行時にコンパイルされ、同じステートメントをコンパイルするオーバーヘッドを減らすため、必ずパッケージ・キャッシュに挿入されます。静的 SQL はバインド時にコンパイルされてシステム・カタログに格納され、カタログ読み取りのオーバーヘッドを減らすため実行時にパッケージ・キャッシュに挿入されます。
エージェント (db2agent) は、パッケージ・キャッシュから実行可能オブジェクト (セクション) を取り出し、ランタイム・インタープリターで実行します。

エージェントがパッケージ・キャッシュにキャッシュ・エントリーを挿入するとき、挿入によってパッケージ・キャッシュの論理サイズが pckcachesz データベース構成パラメーターを超える場合、キャッシュ・スペースのクリーンアップが行われ、挿入後も パッケージ・キャッシュの論理サイズが pckcachesz を超えないように管理されます。
しかし、使用中のキャッシュ・エントリーが多いなどの理由で十分にクリーンアップできず、追加のキャッシュ挿入によってパッケージ・キャッシュの論理サイズが pckcachesz を超えてしまった場合、以下のような警告が管理通知ログに記録されます。
2020-12-15-11.07.03.984000   Instance:DB2   Node:000
PID:548(db2syscs.exe)   TID:3460   Appid:C0A87814.ND10.101215020637
access plan manager  sqlra_cache_mem_please Probe:100   Database:SAMPLE

ADM4500W  パッケージ・キャッシュのオーバーフロー条件が発生しました。エラーではあ
りませんが、これはパッケージ・キャッシュが構成されている最大サイズを超えているこ
とを示しています。この状態が続く場合は、追加のモニターを実行して、PCKCACHESZ DB
構成パラメーターを変更する必要があるかどうかを判別してください。また、それを
AUTOMATIC に設定する必要があります。

このとき、DB2 診断ログ (db2diag.log) には以下のようなイベント・メッセージが記録されます。
2020-12-15-11.07.03.984000+540 E7115125F1141      LEVEL: Event
PID     : 548                  TID  : 3460        PROC : db2syscs.exe
INSTANCE: DB2                  NODE : 000         DB   : SAMPLE
APPHDL  : 0-50648              APPID: 192.168.0.10.ND10.101215020637
AUTHID  : DB2ADMIN
EDUID   : 3460                 EDUNAME: db2agent (SAMPLE)
FUNCTION: DB2 UDB, access plan manager, sqlra_cache_mem_please, probe:100
MESSAGE : ADM4500W  A package cache overflow condition has occurred. There is
          no error but this indicates that the package cache has exceeded the
          configured maximum size. If this condition persists, you should
          perform additional monitoring to determine if you need to change the
          PCKCACHESZ DB configuration parameter. You could also set it to
          AUTOMATIC.
REPORT  : APM : Package Cache : info
IMPACT  : Unlikely
DATA #1 : String, 223 bytes
Package Cache Overflow
memory needed            : 323
current used size (OSS)  : 3421732
maximum cache size (APM) : 3412910
maximum used size (OSS)  : 6619136
owned size (OSS)         : 4063232
number of overflows      : 1

Answer

メッセージが示すように、この警告はエラーではないため、SQL ステートメントの処理は問題なく実行されています。
しかし、パッケージ・キャッシュが小さすぎる可能性を示唆しているため、頻発しているようであればパフォーマンスに悪影響を与えている可能性があります。

なお、アプリケーションで述部にリテラルを使った動的 SQL を大量に利用している場合、パラメーター・マーカーの利用やステートメント・コンセントレーターにより、パッケージ・キャッシュの使用量を削減できる可能性があります。

それらの対応をとっても現在の値が小さすぎると考えられる場合は、以下の手順でパッケージ・キャッシュ・サイズを増やすことを検討してください。
  1. データベース管理者としてデータベースに接続します。
    db2 connect to <dbname>
  2. パッケージ・キャッシュの現在の設定を確認します。
    db2 get db cfg show detail | grep PCKCACHESZ
    ※ 値が二つ表示されますが、左が現在有効な値、右がデータベース再活動化後に有効な値です。
    ※ Windows の場合は grep の代わりに findstr コマンドを使います。
  3. パッケージ・キャッシュのサイズを増やします。もしくは AUTOMATIC に設定します。
    db2 update db cfg using PCKCACHESZ <new_value>
    または
    db2 update db cfg using PCKCACHESZ AUTOMATIC

パッケージ・キャッシュはデータベース共有メモリーに割り当てられるため、データベース共有メモリーに余裕があることを確認してください。

運用上の考慮点
パッケージ・キャッシュの現在の論理サイズは db2pd コマンドの -memp でモニターできます。
  • SAMPLE データベースのパッケージ・キャッシュ論理サイズを表示する例 (単位: バイト)
    db2pd -db SAMPLE -memp | grep -e ^Address -e PCK
    Address    MemSet   PoolName   Id    Overhead   LogSz
    0x09170CC0 SAMPLE   pckcacheh  7     55504      140976
    ※ Windows の場合は grep の代わりに findstr コマンドを使います。

データベースが活動化されてからパッケージ・キャッシュがオーバーフローした回数は、pkg_cache_num_overflows モニター・エレメントに記録されています。
このモニター・エレメントはデータベース・スナップショットや SNAPDB 表関数などを使って参照できます。
  • 現在接続しているデータベースのパッケージ・キャッシュ・オーバーフロー回数を照会する例
    db2 select PKG_CACHE_NUM_OVERFLOWS from SYSIBMADM.SNAPDB
    
    PKG_CACHE_NUM_OVERFLOWS
    -----------------------
                         21
      1 record(s) selected.
パッケージ・キャッシュはキャッシュ・タイプのヒープなので、クリーンナップが行われるまでメモリー使用量は単調増加します。(表のドロップや変更などでパッケージやバリエーションが無効化されると、クリーンナップしなくても使用量が減ることがあります。)
十分に大きな PCKCACHESZ が設定されているにもかかわらず、パッケージ・キャッシュ・オーバーフローが頻繁に報告され、かつ FLUSH PACKAGE CACHE DYNAMIC コマンドを実行してもパッケージ・キャッシュの倫理サイズが期待通りに減らない場合は、パッケージ・キャッシュにおけるメモリー・リークの可能性があります。

関連情報

[Db2] パスポート・アドバンテージによく寄せられる質問
pckcachesz - パッケージ・キャッシュ・サイズ構成パラメーター
UPDATE DATABASE CONFIGURATION コマンド
GET DATABASE CONFIGURATION コマンド
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":"a8m500000008PmRAAU","label":"Programming Interface-\u003EBind and Packages"}],"ARM Case Number":"","Platform":[{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"All Versions"}]

Document Information

Modified date:
26 October 2023

UID

swg21601206