1 つ以上の SQL ステートメントに作成する索引についてユーザーにアドバイスします。 関連 SQL ステートメントのグループは、ワークロード と呼ばれます。 ユーザーは、ワークロード中の各ステートメントの重要性をランク付けし、 ワークロード中の各ステートメントが実行される頻度を指定することができます。 各表ごとに推奨される索引、それらに応じて派生する統計、およびそれぞれを作成する DDL は、 ユーザー作成の表 ADVISE_INDEX に書き込まれます。
注: | 構造型列は、このコマンドの実行時には考慮されません。 |
許可
データベースへの読み取りアクセス。 Explain 表への読み取りおよび書き込みアクセス。
必須接続
なし。 このコマンドは、データベース接続を確立します。
コマンド構文
>>-db2advis----d--database-name----+--------------------+-------> +--w--workload-name--+ +--s--"statement"----+ '--i--filename-------' >-----+---------------------------+---+-----------------+-------> '--a--userid--+----------+--' '--l--disk-limit--' '-/passwd--' >-----+----------------------+---+-----+----------------------->< '--t--max-advise-time--' '--h--'
コマンド・パラメーター
ワークロード中の各ステートメントが実行される頻度は、 次の行を入力ファイルに挿入することによって変更できます。
--#SET FREQUENCY <x>
頻度は、ファイル中何回でも更新できます。
例
次の例では、ユーティリティーは PROTOTYPE データベースに接続し、 解決策において制限なしで ADDRESSES 表に索引を推奨します。
db2advis -d prototype -s "select * from addresses a where a.zip in ('93213', '98567', '93412') and (company like 'IBM%' or company like '%otus')"
次の例では、ユーティリティーは PROTOTYPE データベースに接続し、 ワークロード名が "production" に等しい ADVISE_WORKLOAD 表の照会で、 53 MB を超えない索引を推奨します。 解決策を見つけるための最大許可時間は 20 分です。
db2advis -d prototype -w production -l 53 -t 20
最後の例では、db2advis.in という名前の入力ファイルに SQL ステートメント、 および各ステートメントが実行される頻度の指定が含まれています。
--#SET FREQUENCY 100 SELECT COUNT(*) FROM EMPLOYEE; SELECT * FROM EMPLOYEE WHERE LASTNAME='HAAS'; --#SET FREQUENCY 1 SELECT AVG(BONUS), AVG(SALARY) FROM EMPLOYEE GROUP BY WORKDEPT ORDER BY WORKDEPT;
ユーティリティーは SAMPLE データベースに接続し、 入力ファイル内の照会によって参照される各表ごとに索引を推奨します。 解決策を見つけるための最大許可時間は 5 分です。
db2advis -d sample -f db2advis.in -t 5
使用上の注意
動的 SQL ステートメントの場合、ステートメントが実行される頻度は、 次のようにモニターから獲得されます。
db2 reset monitor for database <database-alias>
適切な時間間隔で待機します。
db2 get snapshot for dynamic sql on <database-alias> write to file
db2 "insert into advise_workload (select 'myworkload', 0, stmt_text, cast(generate_unique() as char(254)), num_executions, 1, num_executions, 0, 0 from table(SYSFUN.SQLCACHE_SNAPSHOT()) as correlations_name"
ワークロードの各 SQL ステートメントの省略時頻度は 1 で、省略時の重要度も 1 です。 generate_unique() 関数は、その SQL ステートメントのより分かりやすい説明になるように、 ユーザーによって更新できるステートメントに、固有の識別子を割り当てます。