![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[z/OS]](../images/ngzos.gif)
DB2 のチューニング・パラメーター
データベースのパフォーマンスを向上させるために構成できるパラメーターについては、このトピックをお読みください。
DB2® のチューニングに関する詳細な情報については、「DB2 UDB 管理ガイド: パフォーマンス」文書を参照してください。
DB2 で AIX® を使用する場合の詳細については、トピック『AIX システムの調整』を参照してください
DB2 ロギング
DB2 には、データベースごとに対応するログ・ファイルがあり、これにより、データベース・アクセスや接続数の表示などの管理者へのサービスが提供されます。 複数のハード・ディスク・ドライブを持つシステムの場合、データベース・ファイルとは別のハード・ディスク・ドライブに各データベースのログ・ファイルを置くことにより、パフォーマンスを大幅に改善できます。
- 表示または設定の方法: DB2 コマンド・プロンプト で、コマンド db2 update db cfg for [database_name] using newlogpath [fully_qualified_path] を発行します。
- デフォルト値: データベースと同じディスク上に存在するログ
- 推奨値: 独立した高速ドライブ、可能な場合には Redundant Array of Independent Disk (RAID) 構成によってパフォーマンスを強化されたドライブを使用します。
DB2 構成アドバイザー
DB2 コントロール・センター内にあるこのアドバイザーは、DB2 のバッファー・プール・サイズ、データベース、およびデータベース・マネージャーの構成パラメーターの推奨値を計算し、表示します。 また、これらの値を適用するオプションもあります。 このアドバイザーについての詳細は、コントロール・センター内のオンライン・ヘルプ機能を参照してください。
DB2 への接続数 - MaxAppls および MaxAgents
データベースのデータ・ソース設定値を構成する場合は、DB2 の MaxAppls の設定値がそのデータ・ソースの最大接続数よりも大きいことを確認します。 クローンを設定しようと計画している場合は、MaxAppls の値を、最大接続数とクローン数とを掛け合わせたものに設定します。 同じ関係が、接続のセッション・マネージャー数にも適用されます。 MaxAppls の設定値は、接続数と同じか、それ以上にする必要があります。 セッションとデータ・ソースに同じデータベースを使用している場合は、MaxAppls の値を、 セッション・マネージャーとデータ・ソースに対する接続数の設定値の合計にしてください。
例えば、MaxAppls = (データ・ソースに対して設定されている接続数 + セッション・マネージャーの接続数) x クローン数。
WebSphere® Application Server データベースおよび各アプリケーション・データベース用の MaxAppls の設定値を計算した後で、DB2 用 MaxAgents の設定値が、すべての MaxAppls 値の合計と同じ、またはそれ以上であることを確認してください。 例えば、MaxAgents = すべてのデータベースの MaxAppl の合計。
DB2 buffpage
データベース・システムのパフォーマンスを向上させます。 buffpage はデータベース構成パラメーターです。バッファー・プールは、表 行または索引項目を含むデータベース・ページの一時的な読み取りおよび変更が行われる 、メモリー・ストレージ域です。ディスクからよりもメモリーからの方が、はるかに高速でデータにアクセスできます。
- 表示または設定の方法: データベース x の buffpage の現行値を表示するには、DB2 コマンド get db cfg for x を実行して、BUFFPAGE の値を探します。
BUFFPAGE を値 n に設定するには、BUFFPAGE n を使用して DB2 コマンド update db cfg for x を実行し、以下のように、NPAGES を -1 に設定します。
db2 <-- DB2 コマンド・モードにします。そうしないと、以下の「select」がそのまま機能しません。 connect to x <-- (x は、特定の DB2 データベース名を指します) select * from syscat.bufferpools (デフォルト名に注意、おそらく IBMDEFAULTBP) (NPAGES が既に -1 の場合は、次のコマンドを発行する必要はありません) alter bufferpool IBMDEFAULTBP size -1 (上記の 「select」を再発行すると、NPAGES は今度は -1 に等しくなります)
以下のようにして、アプリケーションの実行中にデータベースのスナ ップショットを収集し、バッファー・プールのヒット率を計算します。- 以下のようにして、スナップショットを収集します。
- update monitor switches using bufferpool on コマンドを実行します。
- get monitor switches コマンドを実行することによって、 バッファー・プールのモニター状態がオンになっていることを確認します。
- reset monitor all コマンドでモニター・カウンターを初期化します。
- アプリケーションを実行します。
- すべてのアプリケーションがデータベースから切断される前に、 get snapshot for all databases コマンドを実行します。そうしないと、統計が失われます。
- update monitor switches using bufferpool off コマンドを実行します。
- 以下のデータベース・スナップショット統計を調べて、ヒット率を計算します。
- バッファー・プール・データ論理読み取り
- バッファー・プール・データ物理読み取り
- バッファー・プール索引論理読み取り
- バッファー・プール索引物理読み取り
- 以下のようにして、スナップショットを収集します。
- デフォルト値: 250
- 推奨値: スナップショットに示されるヒット率が十分な 値になるまで値を増加します。
- P = バッファー・プール・データ物理読み取り + バッファー・プール索引物理読み取り
- L = バッファー・プール・データ論理読み取り + バッファー・プール索引論理読み取り
- ヒット率 = (1-(P/L)) * 100%
DB2 照会最適化レベル
DB2 でアクセス・プランを最適化するために必要な作業およびリソースの量を設定します。 DB2 内でデータベース照会が実行されるとき、さまざまな方式を使用して最も効率的なアクセス・プランが計算されます。 この範囲は、0 から 9 です。 最適化レベルを 9 に設定すると、DB2 は多くの時間と使用可能なすべての統計を投入して、アクセス・プランを最適化します。
- 表示または設定の方法: 最適化レベルは、個々のデータベースごとに設定され、コマンド行または DB2 コントロール・センターのいずれかによって設定することができます。
静的 SQL ステートメントは、prep および bind コマンドで指定された
最適化レベルを使用します。最適化レベルが指定されない場合、DB2 は dft_queryopt 設定によって指定されたデフォルトの最適化を使用します。
動的 SQL ステートメントは、SQL Set ステートメントを使用して設定される、
現行の照会最適化特殊レジスターが指定した最適化クラスを使用します。
例えば、次のステートメントは最適化クラスを 1 に設定します。
Set current query optimization = 1
現行の照会最適化レジスターが設定されていない場合は、 デフォルトの照会最適化クラスを使用して動的ステートメントがバインドされます。 - デフォルト値: 5
- 推奨値: アプリケーションのニーズに合った最適化レベルを設定します。 非常に複雑な照会が行われる場合だけ、高いレベルを使用してください。
DB2 reorgchk
データと再バインドの現在の統計を取得します。 多数の更新、削除、または挿入が行われた後では、 SQL ステートメントのパフォーマンスが低下することがあるため、このパラ メーターを使用してください。
- 表示または設定の方法: DB2 の reorgchk update statistics on table all コマンドを使用して、現在接続しているデータベースのすべてのユーザーおよびシステム・テーブルで runstats を実行します。 bind コマンドを使用してパッケージを再バインドします。 統計が使用可能な場合は、DB2 CLP で、"select tbname, nleaf, nlevels, stats_time from sysibm.sysindexes" コマンドを実行します。統計の更新が存在しない場合は、nleaf および nlevels は -1 であり、 stats_time は空のエントリー (例えば 「-」) を持ちます。 runstats コマンドが以前に実行された場合は、 runstats 操作完了時のリアルタイム・スタンプも stats_time の下に表示されます。 前の runstats 操作で表示された時刻が古すぎると考えられる場合は、もう一度 runstats コマンドを実行してください。
- デフォルト値: なし
- 推奨値: なし
DB2 locktimeout
アプリケーションでロックを獲得するために待機する秒数を指定します。 このプロパティーの設定は、アプリケーションのグローバル・デッドロックを避けるのに役に立ちます。
- 表示または設定の方法: データベース xxxxxx のロック・タイムアウト・プロパティーの現行値を表示するには、DB2 のコマンド get db cfg for xxxxxx を発行して LOCKTIMEOUT の値を探します。LOCKTIMEOUT の値を n に設定するには、 DB2 update db cfg for xxxxxx コマンドを、LOCKTIMEOUT n を使用して発行します。 ここで、xxxxxx はアプリケーション・データベースの名前、 n は 0 以上 30,000 以下の値です。
- デフォルト値: -1。これは、ロック・タイムアウトの検出をオフにしていることを意味します。
この状態で、アプリケーションは、要求の時刻に 1 つのロックが使用可能でない場合は、以下のイベントのどちらかが発生するまで、ロックを待機します。
- ロックに認可が与えられる
- デッドロックが発生する
- 推奨値: ご使用のデータベース・アクセス・パターンが大多数の書き込みに向かう場合は、この値を、タイムアウトが発生したときに早めの警告を与えるように設定します。 これを行うには、30 秒に設定することが適しています。 ご使用のパターンが大多数の読み取りに向かう場合は、デフォルトのロック・タイムアウト値を受け入れるか、または 30 秒より大きな値にプロパティーを設定します。
DB2 maxlocks
ロック・リストのパーセンテージを指定します。このパーセンテージに達すると、データベース・マネージャーは、アプリケーションによって保持されているロックを、行ロックからテーブル・ロックにエスカレーションします。 エスカレーションのプロセスは多くの時間を費やさないにもかかわらず、テーブル全体を個々の行に対してロックするということは、並行性を減少させ、以降の影響を受けたテーブルへアクセスする試みに対するデータベース全体の性能を減少させる可能性があります。
- 表示または設定の方法: データベース xxxxxx の maxlocks プロパティーの現行値を表示するには、DB2 のコマンド get db cfg for xxxxxx を実行し、MAXLOCKS の値を探します。MAXLOCKS の値を n に設定するには、 DB2 update db cfg for xxxxxx コマンドを、MAXLOCKS n を使用して発行します。 ここで、xxxxxx はアプリケーション・データベースの名前、 n は 1 以上 100 以下の値です。
- デフォルト値: オペレーティング・システムごとのプロパティー・デフォルト値に対する現行のデータベース情報を参照します。
- 推奨値: ロック・エスカレーションがパフォーマンスに関する問題を引き起こしている場合、このパラメーターまたは locklist パラメーターの値を増加させる必要があります。これについては以下のパラグラフで説明します。 データベース・システム・モニターを使用して、ロック・エスカレーションが発生しているかどうかを判別することができます。
DB2 locklist
ロック・リストに割り振られるストレージの量を指定します。
- 表示または設定の方法: データベース xxxxxx の locklist プロパティーの現行値を表示するには、DB2 のコマンド get db cfg for xxxxxx を実行し、LOCKLIST の値を探します。LOCKLIST の値を n に設定するには、 DB2 update db cfg for xxxxxx コマンドを、LOCKLIST n を使用して発行します。 ここで、xxxxxx はアプリケーション・データベースの名前、 n は 4 以上 60,000 以下の値です。
- デフォルト値: オペレーティング・システムごとのプロパティー・デフォルト値に対する現行のデータベース情報を参照します。
- 推奨値: ロック・エスカレーションがパフォーマンスに関する問題を引き起こしている場合、このパラメーターまたは maxlocks パラメーターの値を増加させる必要があります。これについては前のパラグラフで説明されています。 データベース・システム・モニターを使用して、ロック・エスカレーションが発生しているかどうかを判別することができます。 詳しくは、『DB2 管理ガイド: パフォーマンス』 文書を参照してください。