連載
» 2004年12月08日 00時00分 公開

SQLを分析する高度なテクニックDB2チューニング・ベストプラクティス(6)(1/4 ページ)

本連載はDB2 UDB V8のシステム管理者、およびアプリケーション開発者のために、パフォーマンス・チューニングに必要な技法を紹介する。記事の原文はIBM developerWorksで2004年4月に公開された「Best practices for tuning DB2 UDB v8.1 and its databases」で、DB2の設計、配置、構成、SQL、運用管理、モニタリングといった内容を、実践的な操作を中心に解説している。想定する読者はDB2データベース管理の中級レベルのスキルを持っているユーザーである。スクリーン・ショットなど一部のコンテンツは、日本語版のものに差し替えている。(編集局)

[Fraser McArthur,DB2 Enablement Consultant/IBM Canada Ltd.]

詳細なSQL分析

設計アドバイザー

developerworks

本記事は、IBM developerWorksからアットマーク・アイティが許諾を得て翻訳、転載したものです。


 1つまたは複数のクエリに特定の問題がある場合は、そのワークロードをDB2の「設計アドバイザー」(db2advis)に入力して、効率的な索引を推奨させることができます。SQLが不明な場合は、以下の作業で対応します。

  • スナップショットを使用して動的SQLを収集する
  • ステートメント・イベント・モニタを使用して、一定期間内に発行されたすべてのSQLを収集する
  • SYSCAT.STATEMENTSカタログ・ビューから静的SQLを抽出する

 ステートメント・イベント・モニタの使用方法については、このセクションの中で後ほど説明します。

 「設計アドバイザー」は、「DB2コントロール・センター」またはコマンド行プロセッサ(CLP)から使用できます。この両方のインターフェイスについて、次に説明します。

DB2コントロール・センターを使用する場合

 「DB2コントロール・センター」の中でオブジェクト・ツリーを展開して、希望するデータベースを探します。データベースが見つかったら、そのデータベース名を右クリックして、ポップアップ・メニューから「設計アドバイザー...」を選択します。これで、ワークロードの作成が可能になります。ワークロードを作成するには、最近実行したSQLを参照するか、パッケージ内を参照するか、または手動でSQLステートメントを追加します。

CLPを使用する場合

 CLPを使用する場合は、画面に表示される出力結果をスクリプトとして収集し、それを実行できます。よく使われる例を次に示します。

 「sample」データベースで、特定のSQLステートメントに対して索引を推奨させるには、次のようにします。ここでは、索引の識別に1分間の制限を設けています。

db2advis -d sample -s
"select count(*) from sales where region = 'Quebec'" -t 1
(注:記号は表示の都合で折り返していることを表します)

 複数のステートメントに対して索引を推奨させるには、次のようなテキスト・ファイルを作成します。

db2advis -d sample -s "--#SET FREQUENCY 10
SELECT * FROM SALES;
--#SET FREQUENCY 2
SELECT FIRSTNME FROM EMPLOYEE WHERE EMPNO = ?;
  …
  …

 ここで「FREQUENCY」(頻度)は、それぞれのSQLステートメントが、入力ファイル内のほかのSQLステートメントと比べて実行される回数の重み付けを表します。結果を生成させるには、次のようにします。

db2advis -d dbname -i sqlstmts_file > recindexes.out
(注:赤字は各自の環境に置き換えてください)

 出力結果は画面に表示されるので、リダイレクトを使用して、索引定義をファイルに取り込みます。これは、後でDB2スクリプトとして実行できます。

 もう1つの方法として、スナップショットから「設計アドバイザー」に動的SQLをパイピングすることもできます。

get snapshot for dynamic SQL on dbname write to file
(注:赤字は各自の環境に置き換えてください)

 これにより、スナップショットが内部フォーマットのファイルとして保存されます。次に、その結果を「設計アドバイザー」の表に挿入します。以下のSQLを使用します。

insert into advise_workload(select 'myworkload', 0,
stmt_text, cast(generate_unique() as char(254)),
num_executions, 1, 1, 0, 0, cast(null as char) from table
(snapshot_dyn_sql('dbname', -1)) as snapshot_dyn_sql)
(注:記号は表示の都合で折り返していることを表します。赤字は各自の環境に置き換えてください)

 ワークロード内の各SQLステートメントのデフォルトのFREQUENCYは「1」で、デフォルトのIMPORTANCE(重要度)も同じく「1」です。generate_unique()関数は、各ステートメントに固有IDを割り当てます。ユーザーは、これらの列をより意味のある値に更新することができます。索引を生成するには次のようにします。

db2advis -d dbname -w myworkload
(注:赤字は各自の環境に置き換えてください)

 「設計アドバイザー」の実行が終わると、advise_index表にデータが追加されます。この表に対して以下の照会を実行することにより、「設計アドバイザー」の推奨事項をすべてリストすることができます。

SELECT CAST(CREATION_TEXT as CHAR(200)) FROM ADVISE_INDEX

次ページに続く)

       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。