IBM Support

[Db2] fenced モード・プロセス (db2fmp) の役割と、起動および終了のタイミング

Question & Answer


Question

Db2 の稼動中に db2fmp という名前のプロセスが生成されることがあります。 このプロセスは何ですか?また、どのようなタイミングで起動したり終了するのでしょうか?

Cause

Db2 はルーチン (ストアード・プロシージャーおよびユーザー定義関数) を利用してサーバー・サイドにビジネス・ロジックを実装できます。
ルーチンは NOT FENCED モードもしくは FENCED モードで動作するよう選択できます。前者は Db2 エンジン・プロセス (db2sysc) 内で、後者は fenced モード・プロセス (db2fmp) 内で実行されます。

両モードの詳細は、以下のページを参照してください。
ルーチン開発に関するパフォーマンスの考慮

Answer

fenced モード・プロセス (db2fmp) にはいくつかの種類があり、種類によって利用方法が異なります。
  1. シングル・スレッド用 db2fmp
    以下のいずれかのトリガーで起動します。
    • NUM_INITFENCED > 0 の場合、インスタンス起動時
    • NOT THREADSAFE と定義された fenced ルーチンの呼び出し
    起動したシングル・スレッド用 db2fmp は、KEEPFENCED および FENCED_POOL パラメーターに従って、インスタンスにプールされます。
  2. マルチ・スレッド用 db2fmp
    THREADSAFE と定義された fenced ルーチンの呼び出しで起動し、データベース・マネージャー構成パラメーターの設定に関係なくインスタンスを停止するまで存続します。
    ただし、マルチ・スレッド db2fmp がメモリーなどのリソースを使い切った場合は unstable とマークされ、実行中のすべてのスレッドが完了した時点で終了します。
    マルチ・スレッド用 db2fmp が unstable とマークされたあとで、後続の THREADSAFE Fenced ルーチンの実行要求がくると、新しいマルチ・スレッド用 db2fmp プロセスが起動します。
    注: マルチ・スレッド用 db2fmp の場合、FENCED_POOL はプロセス内にプールされるスレッドの数を意味します。
以下は、主な fenced モード・プロセスの一覧です。
  1. シングル・スレッド用 fenced モード・プロセス (NOT THREADSAFE ルーチンが使用)
    プロセス名: db2fmp (エージェント EDUID)
    アプリケーションが初めて fenced モード・プロセスを呼び出した場合、エージェントは fmp table (現存する fmp のリスト) から利用可能なシングル・スレッド用 db2fmp を探して使用します。
    fmp table に利用可能な db2fmp が登録されていない場合、新しいシングル・スレッド用 db2fmp プロセスの生成を依頼します。
    一度でもシングル・スレッド用 db2fmp を使うと、アプリケーション接続が切断されるまでエージェントと fenced モード・プロセスは関連付けられたままになります。
    アプリケーションが後続の NOT THREADSAFE ルーチンを実行すると、関連付けられた fenced モード・プロセスで実行されます。
    エージェントと fenced モード・プロセスを関連付けしたくない場合、以下のレジストリー変数で関連付け動作を解除できます。
    db2set DB2_AGENT_CACHING_FMP=NO
    db2stop
    db2start
  2. マルチ・スレッド C 用 fenced モード・プロセス (THREADSAFE C ルーチンが使用)
    プロセス名: db2fmp (C)
    インスタンスを起動して初回の THREADSAFE 外部 C ルーチンの実行で起動します。
    後続の THREADSAFE 外部 C ルーチンを実行すると、インスタンスに所属する db2fmp (C) が使用されます。
  3. マルチ・スレッド Java 用 fenced モード・プロセス (Java ルーチンで使用。Java ルーチンは必ず THREADSAFE)
    プロセス名: db2fmp (Java)
    インスタンスを起動して初回の Java ルーチンの実行で起動します。
    後続の Java ルーチンを実行すると、インスタンスに所属する db2fmp (Java) が使用されます。

運用上の考慮点
  • 現在起動している db2fmp の一覧および種類や状態は db2pd -fmp コマンドで確認できます。
    db2pd - DB2 データベースのモニターおよびトラブルシューティング・コマンド
    Flag を参照すると、fenced モード・プロセスの種類がわかります。
    0x00000001 JVM 初期化済み
    0x00000002 スレッド化されている
    0x00000004 フェデレーテッド・ラッパーの実行に使用済み
    0x00000008 ヘルス・モニター
    0x00000010 シャットダウン用にマークされており、新規のタスクを受け入れない
    0x00000020 db2sysc によるクリーンアップ用にマークされている
    0x00000040 エージェント・クリーンアップ用にマークされている
    0x00000080 クリーンアップ用にマークされている
    0x00000100 プロセスのすべての IPCS が除去されている
    0x00000200 .NET ランタイムが初期化済み
    0x00000400 JVM がデバッグ用に初期化されている
    0x00000800 終了フラグ
    0x00001000 ADMIN_CMD 用 fenced モード・プロセス
    0x00002000 利用可能でない新規 fenced モード・プロセス
    0x80000000 リソース制限のため新規スレッドを許可しない
  • ヘルス・モニターは fenced モード・プロセス上で動作する CLI アプリケーションとして実装されています。
    このため、fenced ルーチンを使用していなくても db2pd -fmp には Flag=0x00000008 のエントリーが存在します。

関連情報
[Db2] パスポート・アドバンテージによく寄せられる質問
Accumulation of db2fmp (Java) processes
IZ08425 ENHANCEMENTS FOR DB2FMP
以下の 2 つのレジストリー変数が追加されました。
  • DB2_AGENT_CACHING_FMP: アプリケーションと fenced モード・プロセスの関連付けを保持するかどうかを設定できます。
  • DB2_MAX_THREADS_PER_FMP: THREADSAFE fenced モード・プロセスの最大スレッド数を設定できます。

お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと 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":"a8m3p000000GnsdAAC","label":"Process Model"},{"code":"a8m500000008PmhAAE","label":"Routines - Stored Procedures and UDF-\u003Edb2fmp"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
31 August 2023

UID

swg21624197