DB2勉強する

2015年07月

DB2の構成パラメータの確認・設定方法

データベースの設定は3種類。

  • DB CFG・・・個々のデータベース単位で設定
  • DBM CFG・・・DB2インスタンス単位で設定
  • レジストリ変数・・・マシン上全てのDB2インスタンスに設定

データベース構成パラメータ

データベース単位で指定して、調整するパラメータ

確認方法

CLPから確認する場合

db2 GET DB CFG FOR ${DB名}

SQLから確認する場合

SELECT * FROM SYSIBMADM.DBCFG

更新方法

db2 UPDATE DB CFG FOR ${DB名} USING ${パラメータ名} ${値}

データベースマネージャ構成パラメータ

DB2インスタンス全体に影響を与える。

確認方法

db2 GET DBM CFG

SQLから確認する場合

SELECT * FROM SYSIBMADM.DBCFG

更新方法

db2 UPDATE DBM CFG USING ${パラメータ名} ${値}

レジストリー変数

特殊な設定を行うためのパラメータ

確認方法

db2set -all

SQLから確認する場合

SELECT * FROM SYSIBMADM.REG_VARIABLES

更新方法

db2set ${パラメータ名}=${値}"

グローバルレベルで設定する場合

db2set -g ${パラメータ名}=${値}"

カレントスキーマを確認する。

db2 VALUES CURRENT SCHEMA

セッション中だけデフォルトスキーマを変更したい場合は、以下のコマンド

db2 SET CURRENT SCHEMA ${スキーマ名}

ちなみに"CURRENT ~"というのは、「特殊レジスター」と呼ばれるもので、 接続DB名や、ユーザ名などを出力できる。

db2 VALUES CURRENT SERVER
db2 VALUES CURRENT USER

本番作業での確認コマンドとして便利なので、一通り見てみてもいいかもしれません。

返した結果行数のうち、物理的に読み取った行数の比率

SQLで選択された行数のうち、表から読み取った行数の比率。
表スキャンで検索するデータ量が多いほど、この値が大きくなってしまう。

バッファープール・ヒット率見ていれば、不要かも?という気もしますが、勉強のためのメモ。時間あるときに使ってみて見解を書こうと思います。

SELECT
    ROWS_READ_PER_ROWS_RETURNED
FROM
    SYSIBMADM.MON_DB_SUMMARY

対応方法

インデックスで表スキャンを防ぐ。
パーディション表やMDCを使用して表スキャンするデータ量を少なくする。

わからないエラーが出たらdb2diag.logを確認する。

db2diag.logとは?

DB2もアプリケーションなのでログを出力しますが、それがdb2diag.logになります。 稼働中の自動設定の変更情報や、問題発生時の情報が出力されるため、異変があったときに必ず見ておいたほうがいいです。

またSQLCODEやSQLSTATEでエラーメッセージを参照しても理解できないことが、たまにあるかと思いますが、個人的にはdb2diag.logを見て原因がわかったケースが多いです。解決の糸口を探るためにも欠かせないログなので、是非見慣れてほしいログです。

db2diag.logが配置されるディレクトリ

windowsの場合
${db2_home}/SQLLIB/DB2/db2diag.log

UNIX系の場合
${db2_home}/DB2/db2diag.log

※db2_homeは、db2levelコマンドで確認できる。

DBMのDIAGPATHを設定すれば、 任意の場所に出力できる。

db2 UPDATE DBM CFG USING DIAGPATH ${ディレクトリパス}

DATABASE MANAGER CONFIGURATION を参照してDIAGPATHを確認しよう。

db2 GET DBM CFG

db2diag.logに出力されるログのレベル

英語で出力されるが、翻訳すれば大体わかる。エラーレベルは以下のとおり

Critical > Severe > Error > Warning > Info > Event

db2diagコマンドで抽出しよう。

db2diag.logはサイズが大きすぎるため。db2diagコマンドで抽出したほうがいい。

時間指定で抽出する場合(サンプル)

db2diag -t 2015-11-01:2015-11-02-23.59.59

エラーレベルを指定して抽出する場合(サンプル)

db2diag -level Error,Event

フィルターを使えば、項目値を指定して出力できる。複数のDBを設定している場合に便利。

db2diag -filter EDUID=3528
-filterは、他にもいろいろな検索パターンがあるから、DB2のドキュメント「db2diag - db2diag ログ分析ツール・コマンド」を参照しておいたほうがいい。

db2diag.logに出力される情報を増やす。

DB CFGに「DIAGLEVEL」というパラメータが用意されており、数値を大きくすることで、詳細な情報を出力できる。(最大値は4)

※ただしパフォーマンスへの影響が大きいため、限定した時間だけにしたほうがいい。

db2 UPDATE DB CFG FOR ${DB名} USING DIAGLEVEL ${パラメータ値}

設定後、内容を確認

db2 GET DBM CFG
記事検索