時間のかかりすぎる SQL を未然に実行させない (Predictive Query Governor)

DB2/400 には予測照会管理プログラム (Predictive Query Governor) と呼ばれる、データベースエンジンのオプティマイザーという機能による見積もり実行時間を実行前にチェックして、時間のかかりすぎる SQL に対して事前に処置することができるようになっています。

オプティマイザーが事前に SQL の実行計画 (アクセス・プラン) を決定することはこちらの記事で見ました。
このアクセス・プランには、実行するとどのくらい時間がかかるだろうかという見積もりが含まれます。PRTSQLINF コマンドで見たアクセス・プラン情報の中に「見積 QUERY 実行時間は xx 秒である」という記述が実際にあるのがわかります。

この「見積 QUERY 実行時間」と、事前に決めておいた処理時間の閾値をチェックして、超えていた場合に処置(事前に停止させる/メッセージを処理することによって実行させる)を行うことができるようになっているわけです。


設定

設定自体は至って簡単です。

システム値 QQRYTIMLMT、QAQQINI の QUERY_TIME_LIMIT、CHGQRYA コマンドの QRYTIMLMT パラメータのいずれかで、どこまでが「かかりすぎる」時間かを設定できます。
たとえば JDBC アクセスなどの場合、プロパティなどでどのライブラリーの QAQQINI を使うかの指定ができますので QAQQINI での設定がリーズナブルでしょうし、ユーザーで制御したい場合は初期プログラムに CHGQRYA コマンドを入れておくことも可能でしょう。
それぞれの関係ですが、より個別の設定が有効になります。つまり、システム値 → QAQQINI → CHGQRYA の順に、右に行くほど優先されるということです。

システム全体での設定

システム全体に適用するには、以下のようにシステム値 QQRYTIMLMT を変更します。
以下のように 1 と設定すると、 1秒以上かかる照会はすべて「時間のかかりすぎる」ものとなるわけです。

実行結果

たとえば、こんな風に事前に実行がストップされるわけです。
(ちなみに、以下のメッセージで表示されている見積もり実行時間が上の例と異なっているのは、実行しているマシンが実は違うからなのであまり気にしないでください)

ジョブでの変更例

閾値となる時間は、ジョブ毎に変更することもできます。
以下のように CHGQRYA コマンドを実行すると、そのセッションだけで有効になります。

メッセージ

こうしたプログラムでの実行の場合、静的 SQL の場合でも動的 SQL の場合でも、以下のようなメッセージが出てきます。
(もちろんシステム応答リストを使えば自動応答も可能です)

メッセージへの応答による処置

今回は STRSQL 画面による動的 SQL の例にとりました。
同じ SQL を二回実行していますが、最初の実行では C で答えているため実行されず、二回目の実行では I で答えているため実行されていることが確認できますね。

その他

0 にセットすると実行されないことになります。
その場合でも、アクセス・プランの作成を含む最適化は行われます。これを利用して SQL が新規で作成された場合に実際に実行しないで最適化を事前に行っておくことができますね。

[Top Pageに戻る]

[PR] | ハウスクリーニング葬儀 東京韓国食材SEOアクセス解析ハウスメーカーレンタルオフィスSEO対策消費者金融不動産担保ローン時計車 買取ハワイハワイ挙式アスクル転職生命保険テンプレート沖縄旅行動画FX免許合宿二輪引越し消費者金融税理士ゴルフ会員権留学レーシックマッサージ貸し店舗FX投資信託くりっく365アフィリエイト育毛剤FXホームページ制作デイトレードFXホノルルマラソンベスト ハワイ ホテル レーツバリ島ハワイウエディングHawaii hotelsHawaii Activitiesbhhr
【運営会社「パラダイムシフト」サービス】 ハワイ現地オプショナルツアーリラックマ.ビジネスクラス ハワイ) - ビジネスクラス航空券 - 格安航空券(1) - 格安航空券(2) - 海外ホテル - 韓国旅行
無料ホームページ作成 - レンタルサーバー - 携帯ホームページ - ブログ - ホテル 予約 - 格安航空券 - 長期滞在 - タイムシェア - ヴィラ - ハワイ コンドミニアム - バリ島 ホテル
[PR] カードローンの事を調べるならこちらから!まずは比較をして賢く選択