Question & Answer
Question
特に設定の変更などは行っていませんが、動的 SQL のアクセス・プランが変化しました。 なぜ変化したのでしょうか。
Answer
動的 SQL は、統計情報や構成パラメーターなどの設定値をもとに、コンパイルの度にオプティマイザーによってアクセス・プランが作成されます。
アクセス・プランが変化する要因として、以下の項目があげられます。
アクセス・プランが変化する要因として、以下の項目があげられます。
- 統計情報の変化
オプティマイザーは、現在の表や索引の統計情報を用いて、最適なパフォーマンスを得られるよう考慮してアクセス・プランを作成します。
収集された統計情報が変化することで、オプティマイザーは同じ SQL に対して異なるアクセス・プランを作成する可能性があります。
統計情報は一般的には RUNSTATS コマンドにより収集されますが、以下の要因によって統計情報が収集される場合があります。- 自動統計収集
- 非同期統計収集やリアルタイム統計収集 (RTS) が有効になっている場合、自動表保守の一環として統計情報が自動的に収集されます。
- ※ リアルタイム統計収集は V9.5 以降で利用可能です。
- REORGCHK コマンド
- UPDATE STATISTICS オプションで実行した場合、現在の統計情報を収集した後に REORGCHK が実行されます。
- LOAD コマンド
- STATISTICS USE PROFILE オプションで実行した場合、表に定義されている統計プロファイルにしたがって、LOAD の実行中に統計情報が収集されます。
- CREATE INDEX コマンド
- COLLECT STATISTICS オプションで実行した場合、索引作成時に索引統計が収集されます。
- 構成パラメーターの自動チューニング
データベース構成パラメーターの SELF_TUNING_MEM が ON に設定されている場合、AUTOMATIC に設定されている一部の構成パラメーターは、ワークロードに応じてシステムにより自動でチューニングされます。
照会の最適化に影響を与える構成パラメーターが自動でチューニングされる場合、アクセス・プランに影響を与える可能性があります。
以下は自動チューニング可能なパラメーターの中で、最適化に影響を与える構成パラメーターです。- バッファー・プールのサイズ
- ソート・ヒープ・サイズ (sortheap)
- ロック・リスト用最大ストレージ (locklist) およびエスカレーション前のロック・リストの最大パーセント (maxlocks)
以下は自動チューニングは行われませんが、最適化に影響を与える構成パラメーターです。- デフォルトのパーティション内並行度 (dft_degree)
- デフォルトの照会最適化クラス (dft_queryopt)
- アクティブ・アプリケーションの平均数 (avg_appls)
- CPU 速度 (cpuspeed)
- ステートメント・ヒープ・サイズ (stmtheap)
- 通信スピード (comm_bandwidth)
- アプリケーション・ヒープ・サイズ (applheapsz)
- (連合DBのみ) 照会ごとの非同期 TQ の最大数 (federated_async)
- Statistics fabrication (統計の作成)
表に対して統計情報が一度も収集されていない場合や、表が空に近い状態で統計が収集された場合、表制御ブロックや索引制御ブロックに含まれるデータ・ページ数やカーディナリティなどを参考にシステムによる見積もりが行われ、擬似的に統計情報が作成されます。なお、この機能を制御するパラメーターはありません。
統計の作成により、データ量の変化などによってアクセス・プランが変化する可能性があります。
注: リアルタイム統計収集 (RTS) はコンパイル時に短時間の runstats を行います。表制御ブロックにもとづく統計の作成と RTS は異なる機能なので注意してください。 stats_fabricat* モニター・エレメントは、RTS のモニター情報を提供します。
- オプティマイザーが最適なアクセス・プランを作成するためには、可能な限り最新の統計情報を収集するようにしてください。
- 最適化プロファイルを指定することで、オプティマイザーが作成するプランに影響を与えることができます。
詳細は以下のページを参照してください。
[Db2] 最適化プロファイルの基本的な使い方 (IM-10-00P)
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PkyAAE","label":"Compiler-\u003EOptimization db2explain db2advis"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Historical Number
3E8CA05DA9C75773492577FF0015C376
Was this topic helpful?
Document Information
Modified date:
15 August 2023
UID
jpn1J1001041