DB2レジストリ変数
DB2レジストリ変数
DB2では構成パラメータ以外に、DB2レジストリ変数を利用してDB2の設定を行うことができます。設定項目のカテゴリとしては、汎用レジストリ 変数/システム環境変数/通信変数/コマンド行変数/MPP環境変数/SQLコンパイラ変数/パフォーマンス変数/データリンク変数などの変数がありま す。
現在設定されている内容を確認するには、「db2set -all」を使います。
確認例
[db2inst1@db2server tpcc]$ db2set -all
[i] DB2COMM=TCPIP
[i] DB2_PARALLEL_IO=*
[g] DB2SYSTEM=db2server
上記の「[i]」は、1つのインスタンス(この例ではdb2inst1)のみでの指定であることを示しています。「[g]」は、このLinuxサーバマシンにあるすべてのインスタンスに共通の指定という意味です。
設定を行うには、「db2set レジストリ変数=値」のように入力します。
設定例
db2set DB2COMM=TCPIP
db2set DB2_PARALLEL_IO=*
db2set -g DB2SYSTEM=db2server
Linux環境で使用可能な「パフォーマンス変数」のカテゴリに属するDB2レジストリ変数は、約30ほどあります。デフォルト設定で十分なものも多くありますので、それらを除き、チューニングの際に検討する機会が比較的多い10個の変数を以下に紹介します。
DB2_APM_PERFORMANCE=ON
1つ1つの実行時間が非常に短く、シンプルな動的SQLを複数ユーザにて大量に処理している場合、この指定により、パッケージ・キャッシュの内部的なロック処理を行わないようにすると、処理性能が向上する場合があります。
考慮点として、この設定のままでは、組み込みSQLで作成されたアプリケーションのバインド処理を行うことができないということがあります(設定を戻して行う必要があります)。
DB2_EVALUNCOMMITTED=YES_DEFERISCANFETCH数
SELECT処理で行を読み取る場合に、DB2はデフォルトでは必ず行ロックを行います。しかしこの指定をすると、行ロックを取る前に先に値を確認 し、もしもこの行がSELECTの条件に合致しない場合には、ロックを取らず読み飛ばしていく処理を行います。これにより、読み取ろうとして行が更新途中 で更新ロックを保持している場合でも、読み取りのロック待ちを減らすことができ、処理性能が向上する場合があります。
ただし、分離レベル(isolation level)がRR(反復可能読み取り)の場合には利用できません。RS(読み取り固定)またはCS(カーソル固定)の場合のみ可能です。また、インデッ クスはV8からサポートされたタイプ2インデックスが前提となります。
マニュアルには、設定値として「YES」のみ載っていますが、「=YES」を指定すると、この処理が可能となるSELECT処理のアクセス・プラン が単純な表スキャンあるいはインデックス・アクセスのみのスキャンに限り有効です。インデックス経由でデータ行にアクセスするパターンでも同様の動作とす るには、「YES_DEFERISCANFETCH」を指定します。これは、V8 Fixpak9より利用可能です。
DB2_LARGE_PAGE_MEM=*(など)
Large PageをサポートしているLinuxを使用している場合に、DB2のメモリをLarge Pageで利用するように指定します。大きなメモリサイズを利用する場合に、DB2の内部的な管理オーバーヘッドが少なくなり、性能が向上する場合があり ます。
設定値を「=*」とすると、すべてのDB2のメモリがLarge Pageとなります。「=DB」とすると、データベースグローバル・メモリがLarge Pageとなります。「=PRIVATE」とすると、エージェント専用メモリがLarge Pageとなります。また、「=DB,PRIVATE」という指定も可能です。