Db2 プロセス・モデル

Db2 プロセス・モデルの知識は、データベース・マネージャーとそれに関連するコンポーネントの対話を理解するのに役立ちます。 この知識を、問題が発生したときのトラブルシューティングに生かせることもあります。

すべての Db2 データベース・サーバーによって使用されるプロセス・モデルは、データベース・サーバーおよびクライアント間の通信を容易にします。 また、データベース・アプリケーションが、データベース制御ブロックおよび重要なデータベース・ファイルなどのリソースから分離されていることも確認します。

Db2 データベース・サーバーは多くの様々なタスクを実行する必要があります。例えば、データベース・アプリケーション要求を処理したり、ログ・レコードがディスクに書き出されたことを確認したりします。 それぞれのタスクは通常、個別のエンジン・ディスパッチ可能単位 (EDU) によって実行されます。

Db2 データベース・サーバーでマルチスレッド化アーキテクチャーを使用することには、多くの利点があります。 新規スレッドでは、必要なメモリーおよびオペレーティング・システム・リソースがプロセスと比べて少なくなります。なぜなら、一部のオペレーティング・システム・リソースを同じプロセス内のすべてのスレッドの間で共有できるからです。 また、一部のプラットフォームでは、スレッド用のコンテキスト切り替え時間がプロセスの場合と比べて短いので、パフォーマンスを改善できます。 すべてのプラットフォーム上でスレッド・モデルを使用すると、 割り振る EDU を必要に応じて増やすことが簡単になり、複数の EDU によって共有する必要のあるメモリーを動的に割り振ることができるので Db2 データベース・サーバーを構成しやすくなります。

アクセスされるデータベースごとに別々の EDU が開始され、プリフェッチ、通信、およびロギングなどのさまざまなデータベース・タスクを扱います。 データベース・エージェントは、データベースのアプリケーション要求を処理するために作成された EDU の特殊なクラスです。

一般には、Db2 データベース・サーバーに依存して、EDU のセットを管理することができます。 しかし、EDU を調べる Db2 ツールがあります。 例えば、 -edus オプションを指定した db2pd コマンドを使用して、アクティブなすべての EDU スレッドをリストできます。

それぞれのクライアント・アプリケーション接続は、データベースを操作する単一のコーディネーター・エージェントを持ちます。 コーディネーター・エージェント は、アプリケーションの代わりに作業を行い、専用メモリー、プロセス間通信 (IPC) または遠隔通信プロトコルを必要に応じて使用して、他のエージェントと通信を行います。

Db2 pureScale® インスタンスの場合、これらのプロセスを使用して、ホスト上で実行されている Db2 メンバーまたはクラスター・キャッシング・ファシリティー (CF) (あるいはその両方) の正常性をモニターし、インスタンス内のすべての Db2 メンバーおよび CF にクラスター状態を配布します。

Db2 アーキテクチャーは、アプリケーションが Db2 データベース・サーバーとは異なるアドレス・スペースで実行されるようにファイアウォールを提供します (図 1)。 ファイアウォールは、データベースおよびデータベース・マネージャーを、 アプリケーション、ストアード・プロシージャー、およびユーザー定義関数 (UDF) から保護します。 ファイアウォールは、アプリケーション・プログラミング・エラーが、内部バッファーまたはデータベース・マネージャー・ファイルを上書きしないようにするため、データベース内のデータの保全性を保守します。 ファイアウォールはまた、アプリケーション・エラーがデータベース・マネージャーを 破壊しないため、信頼性も向上させます。
図1: Db2 データベース・システムのプロセス・モデル
Db2database システムのプロセス・モデルのグラフィック表現

クライアント・プログラム

クライアント・プログラムはリモートまたはローカルとすることが可能で、データベース・サーバーと同じマシン上で実行します。 クライアント・プログラムは、通信リスナーを介してデータベースとまず連絡を取ります。

リスナー

通信リスナーは、Db2 データベース・サーバーが始動すると開始されます。 それぞれの構成された通信プロトコルにはリスナーがあり、ローカル・クライアント・プログラムには、プロセス間通信 (IPC) リスナー (db2ipccm) があります。 リスナーには以下が含まれます。
  • db2ipccm、クライアント接続用
  • db2tcpcm、TCP/IP 接続用
  • db2tcpdm、TCP/IP ディスカバリー・ツール要求用

エージェント

ローカルまたはリモートのクライアント・プログラム (アプリケーション) からのすべての接続要求には、対応するコーディネーター・エージェント (db2agent) が割り振られます。 コーディネーター・エージェントが作成されると、アプリケーションに代わってすべてのデータベース要求が実行されます。

パーティション・データベース環境、または照会内並列処理 が有効にされているシステムでは、コーディネーター・エージェントはデータベース要求をサブエージェント (db2agntp および db2agnts) に分散します。 アプリケーションと関連しているものの、現在アイドル状態であるサブエージェントは、db2agnta という名前です。

コーディネーター・エージェントは、以下の可能性があります。
  • 別名でデータベースに接続されています。例えば、db2agent (DATA1) はデータベース別名 DATA1 に接続されています。
  • インスタンスにアタッチされています。例えば、db2agent (user1) はインスタンス user1 にアタッチされています。

Db2 データベース・サーバーは他のタイプのエージェント (独立コーディネーター・エージェントまたはサブコーディネーター・エージェントなど) をインスタンス化して、特定の操作を実行します。 例えば、独立コーディネーター・エージェント db2agnti を使用してイベント・モニターを実行したり、サブコーディネーター・エージェント db2agnsc を使用して、データベースの異常シャットダウンの後に再始動操作を並列して行います。

ゲートウェイ・エージェント (db2agentg) は、リモート・データベースに関連したエージェントです。 このエージェントは、クライアントがホスト・データベースにアクセスできるようにする間接接続を提供します。

アイドルのエージェントはエージェント・プールにあります。 これらのエージェントは、クライアント・プログラムの代わりとして作動するコーディネーター・エージェント、または既存のコーディネーター・エージェントの代わりとして作動するサブエージェントからの要求に使用可能です。 アプリケーション・ワークロードがかなり大きい場合には、適切なサイズのアイドル・エージェント・プールがあるとパフォーマンスが向上します。 この場合、アイドル・エージェントは必要なときにすぐに使用でき、(スレッドの作成およびメモリーと他のリソースの割り振りと初期化を含む) アプリケーション接続ごとに新しいエージェントを割り振る必要がありません。 Db2 データベース・サーバーはアイドル・エージェント・プールのサイズを自動的に管理します。

プールされたエージェントは、リモート・データベースまたはローカル・データベースに関連付けることができます。 リモート・データベースでプールされたエージェントは、プールされたゲートウェイ・エージェント (db2agntgp) と呼ばれます。 ローカル・データベースでプールされたエージェントは、プールされたデータベース・エージェント (db2agntdp) と呼ばれます。

db2fmp

fenced モード・プロセスは、ファイアウォールの外で fenced ストアード・プロシージャー およびユーザー定義関数を実行する責任があります。 db2fmp プロセスは常に分離されたプロセスですが、実行するルーチンのタイプによっては、マルチスレッドの場合があります。

db2vend

db2vend プロセスは、EDU の代わりにベンダー・コードを実行するプロセスです。例えば、ログ・アーカイブ用のユーザー出口プログラムを実行するプロセスです (UNIX のみ)。

データベース EDU

以下のリストには、各データベースによって使用される、いくつかの重要な EDU が含まれています。
  • db2castructevent は、pureScale クラスターで CF の出発と到着の処理を扱います。
  • db2CFConnPoolMgr は、 pureScale クラスターでメンバー CF リンク間における CF 接続のバランスを取ります。
  • db2cfmt は、pureScale クラスターで動的 CF メモリー・チューニングを行います。
  • db2clstrRscMon は、 pureScale クラスターのネットワーク・アダプターの状態変更をモニターします。
  • db2cmpd、比較デーモンによる圧縮に関連するタスクの実行用。 パーティション・データベース環境では、db2cmpd EDU は各パーティションで個別に実行されます。
  • db2dbctrld、定期的なデータベース関連タスク用。
  • db2dlock、デッドロック検出用。 パーティション・データベース環境では、各パーティションの db2dlock EDU によって集められた情報を調整するのに、追加スレッド (db2glock) が使用されます。(db2glock) はカタログ・パーティションでのみ実行されます。 Db2 pureScale 環境では、 db2glock EDU を使用して、 db2dlockメンバー上の EDUによって収集される情報を調整します。 メンバーごとに db2glock EDU が 1 つずつ開始されますが、アクティブなのは 1 つだけです。
  • db2fw、イベント・モニターの高速ライター。ボリュームが多いときに使用し、イベント・モニター・データを表、ファイル、パイプに並行して書き込めます。
    • db2fwx、イベント・モニターの高速ライター・スレッド。「x」はスレッド番号を示します。 データベースの活動化中に、 Db2エンジンは、 db2fwx スレッドの数をイベント・モニターのパフォーマンスに最適な値に設定し、さまざまなタイプのワークロードが実行されるときに潜在的なパフォーマンス上の問題を回避します。 db2fwx スレッドの数は、システム上の論理 CPU の数 (マルチコア CPU の場合、それぞれのコアを 1 つの論理 CPU としてカウントします) と等しくなります。 DPF インスタンスの場合、spawn された db2fwx スレッドの数は、メンバー、つまりホスト上のローカル・パーティションの数で除算したデータベース当たりの論理 CPU の数と等しくなります。
  • db2hadrp、高可用性災害時リカバリー (HADR) 基本サーバー・スレッド
  • db2hadrs、HADR スタンバイ・サーバー・スレッド
  • db2lfr、個別のログ・ファイルを処理するログ・ファイル・リーダー用
  • db2loggp、リカバリー・ウィンドウ (時間枠) の決定などの定期的なログ処理用
  • db2loggr、トランザクション処理およびリカバリーをハンドルするログ・ファイルの取扱用
  • db2loggrq、pureScale 環境で HADR によって使用されるリモート・キャッチアップ・アシスト・ロジック用
  • db2loggw、ログ・ファイルへのログ・レコードの書き込み用
  • db2loggx、Advanced Log Space Management に関するログ抽出用。
  • db2logmgr、ログ・マネージャー用。 リカバリー可能なデータベースのログ・ファイルを管理します。
  • db2logts、どのログ・ファイルでどの表スペースがログ・レコードを持つかのトラッキング用。 この情報は、データベース・ディレクトリーの DB2TSCHG.HIS ファイルに記録されます。
  • db2lused、オブジェクト使用の更新用
  • db2mcd、表メタデータに使用されるメモリーの管理用
  • db2periodic は、定期的に実行する必要がある内部データベース・タスクを実行します。
  • db2pclnr、バッファー・プール・ページ・クリーナー用
  • db2pcsd、パッケージ・キャッシュのオートノミック・クリーンアップ用
  • db2pfchr、バッファー・プール・プリフェッチャー用
  • db2pkgrb、無効パッケージのオートノミック再バインド用。 データベース・カタログ・ノードの始動時に、 db2pkgrb は、無効な各パッケージの再バインドを 1 回試行します。 自動再有効化が使用不可になっていない (つまり、auto_reval データベース構成パラメーターが DISABLED に設定されていない) 場合、 db2pkgrb はそれぞれの作動不能パッケージの再バインドも試行します。 その後、次の開始時までシャットダウン状態となります。 これが終了する直前の、リストの処理の終了時に、INF レベルのサマリー・メッセージが diag.log に書き込まれます。 これがアップグレード後の最初の再バインドの試行である場合、失敗した再バインドについての INF レベルの詳細メッセージが diag.log に書き込まれます。 その他のすべての開始については、サマリー・メッセージのみ生成されます。
  • db2redom、再実行マスター用。 データベース・リカバリーのログ再生中に、REDO ログ・レコードを処理し、処理のために REDO ワーカーにログ・レコードを割り当てます。
  • db2redow、再実行作業用。 データベース・リカバリーのログ再生中に、REDO マスターの要求に応じて REDO ログ・レコードを処理します。
  • db2shred、ログ・ページ内での個別のログ・レコード処理用。
  • db2sideways、DPF 未確定トランザクションの自動解決用。
  • db2stmm、セルフチューニング・メモリー管理フィーチャー用。
  • db2taskd、バックグラウンド・データベース・タスクの分散用。 こうしたタスクは db2taskp と呼ばれるスレッドによって実行されます。
  • db2wlmd、ワークロード管理統計の自動収集用
  • イベント・モニター・スレッドは、以下のように識別されます。
    • db2evm%1%2 (%3)
      %1 は以下のようになります。
      • g - グローバル・ファイル・イベント・モニター
      • gp - グローバル・パイプ・イベント・モニター
      • l - ローカル・ファイル・イベント・モニター
      • lp - ローカル・パイプ・イベント・モニター
      • t - 表イベント・モニター
      %2 は以下のいずれかです。
      • i - コーディネーター
      • p - コーディネーターでない
      また、%3 はイベント・モニター名です。
  • バックアップおよびリストア・スレッドは、以下のように識別されます。
    • db2bm.%1.%2 (バックアップおよびリストアのバッファー・マニピュレーター) および db2med.%1.%2 (バックアップおよびリストアのメディア・コントローラー)。ここで % の部分は以下のようになります。
      • %1 は、バックアップまたはリストアのセッションを制御するエージェントの EDU ID です。
      • %2 は、特定のバックアップまたはリストアのセッションに属するスレッド (多数の場合もある) の間の違いを識別するために使用される順次値です。
      例えば、db2bm.13579.2 は EDU ID 13579 の db2agent スレッドによって制御される 2 番目の db2bm スレッドです。
  • db2XInot。 pureScale クラスターで Xi 無効化を処理します
  • Db2 pureScale 環境では、ロックに以下のデータベース EDU が使用されます。
    • db2LLMn は、pureScale クラスターで CF プロセスの GLM/GCL 構造からのロック通知を処理します。
    • db2LLMn1グローバル・ロック・マネージャーによって送信された情報を処理します。各 メンバーには、1 次 CF用と 2 次 CF 用の 2 つの EDU があります。
    • db2LLMn2グローバル・ロック・マネージャー によって送信された、データベースの活動化および非活動化処理中に使用される特殊なタイプのロックに関する情報を処理します。各メンバーには、1 次 CF用と 2 次 CF 用の 2 つの EDU があります。
    • db2LLMng は、他のメンバーがこれらのロックを待って待機しているときに、このメンバーが保持しているロックが適切なタイミングで解放されるようにします。
    • db2LLMrlグローバル・ロック・マネージャー に対するロックの解放を処理します。
    • db2LLMrc。データベース・リカバリー操作中および CF リカバリー中に行われる処理の場合。
    • db2LLMrf は、pureScale クラスターで接続がドロップされて再接続される場合に、CF プロセスとのロック通知の再同期ロジックを処理します。

データベース・サーバー・スレッドとプロセス

データベース・サーバーが機能するには、システム・コントローラー (UNIX の場合はdb2sysc 、Windows オペレーティング・システムの場合は db2syscs.exe ) が存在している必要があります。 以下のスレッドとプロセスは、様々なタスクを実行します。
  • db2acd、ヘルス・モニター、自動保守ユーティリティー、および管理用タスク・スケジューラーをホストするオートノミック・コンピューティング・デーモン。 このプロセスは以前は db2hmon として知られていました。
  • db2aiothr。データベース・パーティションの非同期入出力要求を管理します (UNIX のみ)。
  • db2alarm、要求されたタイマーが満了したときに EDU に通知する (UNIX のみ)
  • db2alm。 Db2 pureScale 環境における Db2 メンバーおよび CF の RDMA アダプターの状況をモニターする Db2 アダプターの稼働状況モニター
  • db2disp、クライアント接続コンセントレーターのディスパッチャー
  • db2fcms、高速コミュニケーション・マネージャーの送信側デーモン
  • db2fcmr、高速コミュニケーション・マネージャーの受信側デーモン
  • db2fmd、障害モニター・デーモン
  • db2iperiodic、タスク・スケジューラー・スレッド。 これらのタスクは、db2iperiodicWatch<task_number> および db2iperiodicExec<task_number> というスレッドによって実行されます。
  • db2licc、インストール済みの Db2 ライセンスを管理する
  • db2panic、エージェント限度に達した後の緊急要求をハンドルするパニック・エージェント
  • db2pdbc。リモート・データベース・パーティションからの並列要求を処理する並列システム・コントローラー (パーティション・データベース環境と Db2 pureScale 環境の両方で使用)
  • db2resync、グローバル再同期リストをスキャンする再同期エージェント
  • db2rocm および db2rocmeでは、 Db2 pureScale インスタンスにおいて、これらのプロセスは、各ホストで実行されている Db2 メンバーおよびクラスター・キャッシング・ファシリティー (CF) の動作状態をモニターし、インスタンス内のすべての Db2 メンバーおよび CF にクラスター状態情報を配布します。
  • db2sysc、メイン・システム・コントローラー EDU。重要な Db2 サーバー・イベントを処理します。
  • db2sysc (アイドル)。 Db2 アイドル・プロセス。これにより、リソースの常駐 メンバー と競合することなく、ホスト上のゲスト・ メンバー の restart light が素早く可能になります。
  • db2syscqueDb2 pureScale 環境で要求キューイングを行い、サービスをシステム・コントローラーに配布するためのメッセージ・キュー・リスナー。
  • db2thcln。EDU の終了時にリソースをリサイクルします (UNIX のみ)。
  • db2wdog。UNIX および Linux® オペレーティング・システム上のウォッチドッグ。異常終了を処理します。
  • db2wlmt、WLM ディスパッチャー・スケジューリング・スレッド
  • db2wlmtm、WLM ディスパッチャー・タイマー・スレッド