14.8 ハッシュフィルタ領域サイズの見直しによるSQL文の実行時間の短縮に関するチューニング
ここでは,次に示すオペランドに指定したハッシュフィルタ領域サイズの見直しによる,SQL文の実行時間を短縮する方法について説明します。
-
サーバ定義のadb_sql_exe_hashflt_area_sizeオペランド
-
クライアント定義のadb_sql_exe_hashflt_area_sizeオペランド
なお,adbexportコマンドにSQL文を指定して実行した場合でも,同様にSQL文の実行時間を短縮できます。その場合は,adb_sql_exe_hashflt_area_sizeオペランドをエクスポートオプションadb_export_hashflt_area_sizeに読み替えてください。
ハッシュフィルタを適用する次の処理が実行される場合に,ハッシュフィルタ領域サイズを大きくすると,SQL文の実行時間を短縮できることがあります。
-
表の結合方式のハッシュジョイン
-
副問合せの処理方式のハッシュ実行
以降で説明する■ハッシュフィルタが適用されているかどうかを確認すると■ハッシュフィルタが有効に働いているかどうかを確認するの両方を確認してください。
■ハッシュフィルタが適用されているかどうかを確認する
手順
-
ハッシュフィルタが適用されていない処理があるかどうかを確認する
SQLトレース情報の出力結果で,次に示す条件を満たす処理があるかどうかを確認してください。
-
「クライアント定義情報」のadb_sql_exe_hashflt_area_sizeの値が1以上である
-
「SQL文の統計情報」のHashflt_disabled(ハッシュフィルタが無効化されたかどうか)の値がYである
上記のすべての条件を満たす処理は,ハッシュフィルタが適用されていません。手順2.に進んでください。上記のすべての条件を満たす処理がない場合は,■ハッシュフィルタが有効に働いているかどうかを確認するの内容を確認してください。
-
-
無効化されたハッシュフィルタの合計数を確認する
手順1.の条件に該当する処理がある場合,SQLトレース情報の出力結果で次の値を確認してください。
-
「アクセスパスの統計情報」に出力された「ハッシュテーブル領域に関する情報」のHashtbl_filter_disabled_num(無効化されたハッシュフィルタの合計数)
-
-
adb_sql_exe_hashflt_area_sizeオペランドの指定値を見直す
手順2.で確認したHashtbl_filter_disabled_numの値が0の場合は,ハッシュフィルタ領域が小さ過ぎるためにハッシュフィルタが適用されていない可能性があります。そのため,SQL文の実行時間が長くなっているおそれがあります。
この場合,サーバ定義およびクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの指定値を大きくしてください。そうすると,ハッシュフィルタが適用されてSQL文の実行時間を短縮できることがあります。adb_sql_exe_hashflt_area_sizeオペランドの指定値の目安については,マニュアルHADB AP開発ガイドの次の個所を参照してください。
-
ハッシュジョインとはのハッシュフィルタが適用される条件
-
外への参照列を含まない副問合せの処理方式とはのハッシュ実行
-
外への参照列を含む副問合せの処理方式とはのハッシュ実行
- 重要
-
-
クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドと,サーバ定義のadb_sql_exe_hashflt_area_sizeオペランドの両方の指定値を確認してください。クライアント定義の指定値だけを大きくした結果,クライアント定義の指定値がサーバ定義の指定値を超えた場合,サーバ定義の指定値が適用されます(変更後のクライアント定義の指定値が適用されません)。該当する場合は,サーバ定義とクライアント定義の両方のadb_sql_exe_hashflt_area_sizeオペランドの指定値を大きくしてください。
-
adb_sql_exe_hashflt_area_sizeオペランドの指定値を変更した場合,必ずHADBサーバのメモリ所要量を再見積もりしてください。HADBサーバのメモリ所要量の再見積もりについては,「6.3.4 通常運用時のメモリ所要量の求め方」の「(2) リアルスレッド固有メモリの所要量の求め方(通常運用時)」の「(c) 変数RTHD_EXESQLSZの求め方」の変数HASHFLT_PROC_SIZEを参照してください。
-
また,手順2.で確認したHashtbl_filter_disabled_numの値が1以上の場合でも,サーバ定義またはクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの指定値を大きくすると,SQL文の実行時間を短縮できることがあります。
-
-
サーバ定義およびクライアント定義を変更する
サーバ定義およびクライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの指定値を大きくしてください。
-
サーバ定義を変更する場合
adbstopコマンドでHADBサーバをいったん終了してください。そのあとに,サーバ定義を変更し,adbstartコマンドでHADBサーバを開始してください。
-
クライアント定義を変更する場合
マニュアルHADB AP開発ガイドのクライアント定義変更時の注意事項で説明している手順に従ってクライアント定義を変更してください。
-
-
SQL文を再実行する
SQL文を再実行して,SQL文の実行時間が短縮されるかどうかを確認してください。ハッシュフィルタの適用によって,SQL文の実行時間が短縮されることがあります。
■ハッシュフィルタが有効に働いているかどうかを確認する
手順
-
ハッシュフィルタが有効に働いているかどうかを確認する
SQLトレース情報の「アクセスパスの統計情報」に出力された「ハッシュテーブル領域に関する情報」のうち,次の2つの値を確認してください。
-
Hashtbl_sum_filter_check_cnt(ハッシュフィルタでハッシュ値をチェックした回数の合計値)
-
Hashtbl_sum_filtering_cnt(ハッシュ値がハッシュフィルタで除外された回数の合計値)
Hashtbl_sum_filtering_cntの値が,Hashtbl_sum_filter_check_cntに比べて非常に小さい場合,ハッシュフィルタの適用効果がほとんどありません。そのため,ハッシュフィルタの適用が原因で,SQL文の実行時間が長くなっているおそれがあります。
-
-
adb_sql_exe_hashflt_area_sizeオペランドの指定値を見直す
手順1.の条件に該当する場合は,クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドの指定値に0を指定して,該当するSQL文の処理でハッシュフィルタを適用しないことを検討してください。
クライアント定義を変更する場合は,マニュアルHADB AP開発ガイドのクライアント定義変更時の注意事項で説明している手順に従ってクライアント定義を変更してください。
- メモ
-
-
クライアント定義情報については,「10.11.2 SQLトレース情報に出力される情報」の「(3) クライアント定義情報」を参照してください。
-
SQL文の統計情報については,「10.11.2 SQLトレース情報に出力される情報」の「(10) SQL文の統計情報」を参照してください。
-
アクセスパスの統計情報に出力された「ハッシュテーブル領域に関する情報」については,「10.11.3 アクセスパスの統計情報の出力例と出力項目」の「(2) アクセスパスの統計情報に出力される項目」の「(e) ハッシュテーブル領域に関する情報」を参照してください。
-
サーバ定義のadb_sql_exe_hashflt_area_sizeオペランドについては,「7.2.2 性能に関するオペランド(set形式)」のadb_sql_exe_hashflt_area_sizeオペランドを参照してください。
-
クライアント定義のadb_sql_exe_hashflt_area_sizeオペランドについては,マニュアルHADB AP開発ガイドの性能に関するオペランドを参照してください。
-