RUNSTATS コマンド (ADMIN_CMD プロシージャーを使用)
RUNSTATS コマンドは、表、関連する索引、または統計ビューの特性に関するシステム・カタログ内の統計を更新します。 これらの特性には、レコード数、ページ数、および平均レコード長が含まれます。 オプティマイザーは、これらの統計を使用してデータへのアクセス・パスを決定します。
表の場合は、表の更新が数多く行われたとき、または表が再編成された後に、RUNSTATS コマンドを呼び出してください。 統計ビューの場合、基礎表に対する変更がそのビューによって返される行に対してかなりの影響を及ぼしている場合に、RUNSTATS コマンドを呼び出します。そのビューは、事前に ALTER VIEW ステートメントを使用して、照会最適化に使用できるようにしておく必要があります。
有効範囲
RUNSTATS コマンドは、db2nodes.cfg ファイル中のどのデータベース・パーティションからでも発行できます。 このコマンドを使用して、カタログ・データベース・パーティションのカタログを更新できます。
表の場合、このコマンドは、呼び出し元のデータベース・パーティションの表の統計を収集します。 表がそのデータベース・パーティションに存在しない場合、 データベース・パーティション・グループの最初のデータベース・パーティションが選択されます。
ビューの場合、このコマンドは、関連するすべてのデータベース・パーティションに含まれる表のデータを使用して、統計情報を収集します。
許可
- SYSADM
- SYSCTRL
- SYSMAINT
- DBADM
- SQLADM
- 表に対する CONTROL 特権
- LOAD authority
このコマンドを使用する際には、接続内に存在する宣言された一時表のいずれにおいても明示特権は必要ありません。
- SYSADM
- SYSCTRL
- SYSMAINT
- DBADM
- SQLADM
- 統計ビューに対する CONTROL 特権
- LOAD authority
必要な接続
データベース
コマンド構文
コマンド・パラメーター
- object-name
- 統計が収集される表または統計ビューを識別します。 このパラメーターは、表階層であってはなりません。型付き表の場合は、object-name パラメーターの値は表階層のルート表の名前でなければなりません。 schema.object-name という形式の完全修飾名または別名を使用しなければなりません。schema には、表作成時のユーザー名が入ります。
- USE PROFILE
- このオプションを使用した RUNSTATS は、以前に保管した統計プロファイルを使用して表または統計ビューの統計を収集します。 統計プロファイルの作成には、SET PROFILE オプションを使用し、更新には UPDATE PROFILE オプションを使用します。
- UNSET PROFILE
- 統計プロファイルを削除します。
例えば、以下のコマンドを実行すると、tablemyschema.mytable 表のプロファイルが削除されます。
RUNSTATS ON tablemyschema.mytable UNSET PROFILE - FOR INDEXES
- 索引のみの統計を収集および更新します。 表について過去に収集された表統計がない場合は、基本表統計も収集されます。 表統計が存在していても、表のカーディナリティー (CARD)、FPAGES、NPAGES の統計を更新します。これらの基本統計には、分散統計は一切含まれません。 ビューの場合、このオプションは使用できません。 索引の先頭列の COLCARD も更新される場合があります。
- SAMPLED
- 組み合わせて使用できるのは DETAILED パラメーターのみです。 このオプションを指定しても、DETAILED によるデフォルトの機能は変更されません。SAMPLED パラメーターは、以前のバージョンの Db2® との互換性のために残されています。 ビューの場合、このパラメーターは使用できません。
- UNSAMPLED
- このオプションが DETAILED オプションと共に使用された場合、強制的に RUNSTATS が実行されることにより、索引内のすべての項目が調べられて拡張索引統計が計算されます。UNSAMPLED パラメーターは、ビューには使用できません。 また、スキャン索引サンプリング (INDEXSAMPLE キーワード) と一緒に使用することもできません。 このオプションを指定すると RUNSTATS のリソース使用量が大幅に増加させられます。一方、DETAILED オプションおよび SAMPLED DETAILED オプション (これらは等価です) では大幅な改善が得られることはほとんどありません。
- DETAILED
- 拡張された索引統計を計算します。
拡張された索引統計とは、比較的大規模な索引の場合に収集される、
CLUSTERFACTOR統計およびPAGE_FETCH_PAIRS統計のことです。 索引項目のすべてを調べるのではありません。パフォーマンスを改善するため、CPU サンプリング技法が採用されます。このパラメーターはビューには使用できません。 - index-name
- 表で定義されている既存の索引を識別します。schema.index-name 形式の完全修飾名を指定しない場合、 デフォルトのスキーマが想定されます。
- EXCLUDING XML COLUMNS
- XML タイプのすべての列を統計収集の対象から除外します。 XML データを含めた場合、必要となるシステム・リソースが増加することがあるため、この節を使用すれば、XML 以外の列に関する統計情報の収集が容易になります。 EXCLUDING XML COLUMNS 節は、統計情報収集の対象として XML 列を指定する他の節よりも優先されます。 例えば、EXCLUDING XML COLUMNS 節を使用する場合、ON COLUMNS 節で XML タイプの列を指定したり ON ALL COLUMNS 節を使用したりしても、統計情報収集において XML タイプの列はすべて無視されます。Db2 V9.7 フィックスパック 1 以降のリリースでは、このパラメーターを指定した場合、XML タイプの列についての分散統計は収集されません。
- AND INDEXES
- 表と索引両方の統計を収集および更新します。
- ON ALL COLUMNS
- 収集可能なすべての列についての統計を収集します。
このパラメーターは
On Cols節で使用するか、WITH DISTRIBUTION パラメーターの後のOn Dist Cols節で使用することができます。 列を特定するこれらの節をいずれも指定しなかった場合は、ON ALL COLUMNS パラメーターがデフォルトです。なお、
On Cols節でこれが指定された場合は、特定の列が WITH DISTRIBUTION 節の一部として選択されない限り、すべての列で基本列統計だけが収集されます。WITH DISTRIBUTION 節の一部として指定された列では、基本統計も分散統計も収集されます。WITH DISTRIBUTION ON ALL COLUMNS が指定されている場合は、収集が行えるすべての列で基本統計と分散統計の両方が収集されます。そのため、 何を節に指定しても冗長になるので、
On Colsは必要ありません。 - ON COLUMNS
- 特定の列、列グループ、またはその両方に関する統計を収集するには、ON COLUMNS を使用します。列グループとは、結合した統計を収集しようとする複数の列を括弧でくくったコンマ区切りリストです。
列および列グループは括弧でくくったコンマ区切りリストとして指定します。
索引統計の収集なしで表に対して RUNSTATS コマンドを実行する場合に、統計の収集対象として列のサブセットを指定すると、以下のような影響があります。- RUNSTATS コマンドに指定されていないが、索引の最初の列である列については、統計情報はリセットされません。
- RUNSTATS コマンドに指定されていないその他すべての列については、統計がリセットされます。
ON COLUMNS パラメーターは
On Cols節およびOn Dist Cols節で使用できます。 列のグループに関する分散統計の収集は、現在サポートされていません。列グループに XML タイプの列を指定しても、そのグループの非重複値を収集する際に XML タイプの列は無視されます。 しかし、その列グループ中の XML タイプ列について、XML 列の基本統計情報は収集されます。
- ON KEY COLUMNS
- 表で定義されたすべての索引を構成する列で統計を収集します。照会で使用される重要な列が、表に対する索引の作成でも使用されていることが前提になっています。
表に索引が存在しない場合、列統計は収集されません。
ON KEY COLUMNS パラメーターは
On Cols節またはOn Dist Cols節で使用できます。 両方の節にこのパラメーターを指定すると冗長になります。 (WITH DISTRIBUTION パラメーターの後の)On Dist Cols節を指定すると、基本統計と分散統計の両方が収集されるからです。定義上、XML タイプの列はキー列ではないため、ON KEY COLUMNS パラメーターによる統計収集の対象には含まれません。 このパラメーターはビューには使用できません。
- column-name
- 表または統計ビューの中の列の名前。 存在しない列が指定された場合や列名の入力を誤った場合など、 統計収集を行えない列の名前が指定された場合は、エラー (-205) が戻されます。 一方は配分なし、一方は配分ありで、2 つの列のリストを指定できます。 WITH DISTRIBUTION 節が関連付けられていないリストで列を指定する場合は、基本列統計だけが収集されます。列が両方のリストに含まれている場合は、分散統計が収集されます (NUM_FREQVALUES および NUM_QUANTILES がゼロに設定されていない限り)。
- LIKE STATISTICS
- コード・ページ属性が 1 バイト文字セット (SBCS)、FOR BIT DATA、または UTF-8 である BINARY、VARBINARY、CHAR、または VARCHAR タイプの列について、追加の列統計を収集します。runstats ユーティリティーが列値の分析後にこのような統計が適切であると判断した場合に、これらの統計が収集されます。
これらの統計は、SYSSTAT.COLUMNS ビューの SUB_COUNT 列と SUB_DELIM_LENGTH 列に表示されます。
照会オプティマイザーはこれらの統計を使用して、
"column LIKE '%xyz'"および"column LIKE '%xyz%'"というタイプの述部に関する選択度の見積もりを向上させます。 - WITH DISTRIBUTION
- 列について基本統計および分散統計の両方を収集します。
ON COLUMNS パラメーターを指定しなかった場合、表または統計ビューのすべての列 (CLOB や LONG VARCHAR タイプのような収集に適さない列は除く) について分散統計が収集されます。
ON COLUMNS パラメーターを指定した場合、指定した列リストについてのみ (統計収集に適さない列は除く) 分散統計が収集されます。
WITH DISTRIBUTION パラメーターの後に列グループを指定した ON COLUMNS パラメーターを指定した場合、その列グループの分散統計は収集されません。
- DEFAULT
- NUM_FREQVALUES および NUM_QUANTILES パラメーターを指定すると、それらのパラメーターの値が、列について収集する頻度統計および変位統計の最大数を決定するために使用されます。 NUM_FREQVALUES および NUM_QUANTILES パラメーターは、ON COLUMNS 節で個々の列に対して値を指定しなかった場合に使用されます。DEFAULT パラメーターを指定しない場合、 使用される値は、対応するデータベース構成パラメーターの値となります。
- NUM_FREQVALUES
- 頻度統計で参照する DEFAULT パラメーターを定義します。 このパラメーターは、ON COLUMNS パラメーターの後で個々の列に対して指定できます。 そうではなく DEFAULT パラメーターの後に NUM_FREQVALUES パラメーターを指定した場合、DEFAULT パラメーターの後の NUM_FREQVALUES パラメーターの値が使用されます。 指定された値が '-1' であるか、ON COLUMNS パラメーターの後にも DEFAULT パラメーターの後にも NUM_FREQVALUES パラメーターを指定しなかった場合には、頻度の値の最大数は num_freqvalues データベース構成パラメーターの値となります。
- NUM_QUANTILES
- 収集する分散変位値の最大値を定義します。
これは、ON COLUMNS 節の中で、個々の列ごとに指定できます。
個々の列に対して値を指定しない場合、または '-1' を指定した場合、変位値のしきい値は DEFAULT 節で指定した値から選出されます。
どちらも指定されていない場合は、num_quantiles データベース構成パラメーターで設定されている値が、収集する分位値の最大個数になります。
Db2 V9.7 フィックスパック 1 以降のリリースでは、 XML データに対する各索引の分散統計は、デフォルトで最大 250 の分位数を使用します。このデフォルトは、ON COLUMNS 節または DEFAULT 節の NUM_QUANTILES パラメーターを指定して変更することができます。 XML 分散統計を収集している間、num_quantiles データベース構成パラメーターは無視されます。
- ALLOW WRITE ACCESS
- 統計が計算される間に、他のユーザーが表から読み込んだりそこに書き込んだりできることを指定します。
統計ビューの場合は、ビュー定義の中で参照されている基本表です。
多数の挿入、更新、または削除が並行して行われる表では、 ALLOW WRITE ACCESS オプションはお勧めしません。 RUNSTATS コマンドは、まず表統計を収集してから、索引統計を実行します。 表および索引の統計情報を収集している間に表の状態が変化した場合、不整合が発生することがあります。 照会の最適化のために最新の統計を収集することは重要ですが、整合性のある統計を収集することも重要です。 したがって統計情報の収集は、挿入、更新、または削除の操作が最小になる時間に実行してください。
- ALLOW READ ACCESS
- 統計が計算される間に、他のユーザーが表に対して読み取り専用のアクセスを行えることを指定します。 統計ビューの場合は、ビュー定義の中で参照されている基本表です。
- TABLESAMPLE BERNOULLI
- 表または統計ビューの行のサンプルについて統計を収集します。 BERNOULLI (ベルヌーイ) サンプリング では各行が個別に処理され、その際に P/100 (P は数値リテラルパラメーターの値) の確率で行が含められ、1-P/100 の確率で行が除外されます。したがって、numeric-literal パラメーターの値が、値 10 (10 % のサンプルを表す) と評価された場合は、各行が 0.1 の確率で含められ、0.9 の確率で除外されます。 オプションの REPEATABLE パラメーターを指定した場合を除き、一般には RUNSTATS コマンドを実行する度に、異なる表のサンプルが得られます。すべてのデータ・ページが表スキャンによって取得されますが、numeric-literal パラメーターで指定したパーセントの行だけが統計収集に使用されます。
- TABLESAMPLE SYSTEM
- 表のデータ・ページのサンプルについて統計を収集します。
SYSTEM (システム) サンプリング では各ページが個別に処理され、その際に P/100 (P は数値リテラルパラメーターの値) の確率でページが含められ、1-P/100 の確率でページが除外されます。オプションの REPEATABLE パラメーターを指定した場合を除き、一般には RUNSTATS コマンドを実行する度に、異なる表のサンプルが得られます。サンプルのサイズは、括弧内に numeric-literal パラメーターを指定して制御します。このパラメーターは、戻す表のおおよそのパーセント P を表します。
numeric-literal パラメーターで指定したパーセントのデータ・ページだけが取得され、統計収集に使用されます。
統計ビューの場合、ビュー定義で参照されている単一の基本表に限り、システム・サンプリングを適用できます。 統計ビューに複数の表が含まれている場合は、そのビューに含まれている単一の表が、そのビューで使用されている他の表の主キーまたはユニーク索引列のすべてと結合されていることが特定できると、システム・サンプリングを行えます。 統計ビューがこれらの条件を満たしていない場合、BERNOULLI サンプリングが代わりに使用され、警告が戻されます。
- numeric-literal
- 取得するサンプルのサイズをパーセンテージ P として表します。 この値は 100 以下の正数でなければならず、0 から 1 までの数を指定できます。 例えば、値 0.01 は、1 % の 100 分の 1 を表します。 この場合は、平均して 10,000 行のうちの 1 行がサンプルとして取られます。 0 または 100 の値を指定した場合は、TABLESAMPLE BERNOULLI パラメーターまたは TABLESAMPLE SYSTEM パラメーターのどちらを指定したかにかかわらず、サンプリングを指定しなかった場合と同じように処理されます。 100 より大きい値、または 0 より小さい値は、エラー (SQL1197N) として扱われます。
- REPEATABLE (integer-literal)
- TABLESAMPLE パラメーターの後に指定すると、RUNSTATS コマンドを繰り返し実行したときに同じサンプルが返されるようになります。 integer-literal パラメーターには、サンプリングで使用するシードを表す負以外の整数を指定します。負のシードを渡すと、エラー (SQL1197N) になります。TABLESAMPLE REPEATABLE パラメーターを指定して最後に RUNSTATS コマンドを実行した後に、 表または統計ビューに対するアクティビティーによって表または統計ビューのデータが変更されている場合は、反復可能な RUNSTATS コマンド呼び出しを実行してもサンプル・セットが同じものにならないことがあります。 また、一貫した結果を得るためには、サンプル取得に使用した方法 (BERNOULLI または SYSTEM パラメーターを使用する) が同じでなければなりません。
- INDEXSAMPLE BERNOULLI
- 索引内の行のサンプルについて索引統計を収集します。 BERNOULLI (ベルヌーイ) サンプリング では各行が個別に処理され、その際に P/100 (P は数値リテラルパラメーターの値) の確率で行が含められ、1-P/100 の確率で行が除外されます。したがって、numeric-literal パラメーターの値が 10 (10 % を表す) である場合は、各行が 0.1 の確率で含められ、0.9 の確率で除外されます。 RUNSTATS コマンドは実行されるたびに、索引から異なるサンプルを得る結果になると考えられます。すべての索引ページが索引スキャンによって取得されますが、 numeric-literal パラメーターで指定したパーセントの行だけが統計収集に使用されます。 INDEXSAMPLE BERNOULLI パラメーターは、統計ビューではサポートされません。
- INDEXSAMPLE SYSTEM
- 索引ページのサンプルについて統計を収集します。 SYSTEM (システム) サンプリング では各ページが個別に処理され、その際に P/100 (P は数値リテラルパラメーターの値) の確率でページが含められ、1-P/100 の確率でページが除外されます。通常は、RUNSTATS コマンドが実行されるたびに索引から異なるサンプルを得る結果になります。サンプルのサイズは、括弧内に numeric-literal パラメーターを指定して制御します。このパラメーターは、戻すべき索引のおおよそのパーセント P を表します。 numeric-literal パラメーターで指定したパーセントの索引ページだけが取得され、統計収集対象として使用されます。 INDEXSAMPLE SYSTEM パラメーターは、統計ビューではサポートされません。
- SET PROFILE NONE
- この RUNSTATS 呼び出しには統計プロファイルを設定しないことを指定します。
- SET PROFILE
- 特定の統計プロファイルを生成してシステム・カタログ表に保管し、RUNSTATS コマンド・オプションを実行して統計を収集します。
- SET PROFILE ONLY
- 特定の統計プロファイルを生成してシステム・カタログ表に保管します。RUNSTATS コマンド・オプションは実行しません。
- UPDATE PROFILE
- システム・カタログ表内の統計プロファイルを変更し、更新後の統計プロファイルの RUNSTATS コマンド・オプションを実行して統計を収集します。 UPDATE PROFILE パラメーターを使用して、統計プロファイルにある節を削除することはできません。
- UPDATE PROFILE ONLY
- システム・カタログ表内の統計プロファイルを変更します。更新後の統計プロファイルの RUNSTATS コマンド・オプションは実行しません。 UPDATE PROFILE ONLY パラメーターを使用して、統計プロファイルにある節を削除することはできません。
- UTIL_IMPACT_PRIORITY priority
- priority に指定されているレベルで、RUNSTATS をスロットルすることを指定します。 priority は 1 から 100 の範囲の数であり、 100 が最高の優先順位、1 が最低の優先順位を表します。 優先順位によって、ユーティリティーのスロットルの量が決まります。 優先順位が同じユーティリティーはすべて同じ量のスロットルを受け、 優先順位の低いユーティリティーは、優先順位の高いユーティリティーよりも多くスロットルされます。 priority を指定しない場合、RUNSTATS はデフォルトの優先順位 50 を使用します。UTIL_IMPACT_PRIORITY キーワードを省略すると、スロットルのサポートなしで RUNSTATS ユーティリティーが呼び出されます。UTIL_IMPACT_PRIORITY キーワードを指定した場合でも、util_impact_lim 構成パラメーターが 100 に設定されていれば、スロットルなしでユーティリティーが実行されます。
パーティション・データベースで RUNSTATS コマンドを表に対して使用した場合、統計は 1 つのデータベース・パーティションでのみ収集されます。 RUNSTATS コマンドを実行したデータベース・パーティションに表のパーティションが存在する場合、コマンドは、そのデータベース・パーティションで実行されます。 それ以外の場合は、表がパーティションに分けられているデータベース・パーティション・グループの最初のデータベース・パーティションで実行されます。
例
CALL SYSPROC.ADMIN_CMD ('RUNSTATS ON TABLE employee
ON KEY COLUMNS and INDEXES ALL')使用上の注意
- コマンドの実行状況は、CALL ステートメントからの結果である SQLCA で戻されます。
- 以下のケースでは RUNSTATS コマンドを実行する必要があります。
- 大幅に変更された表: 例えば、多くの更新が行われた場合や、大量のデータが挿入または削除された場合、 あるいは、LOAD 時に統計オプションを指定せずに LOAD コマンドを実行した場合など。
- REORG コマンドまたは REDISTRIBUTE DATABASE PARTITION GROUP コマンドを使用して再編成された表。
- 行圧縮が実行された表。
- 新規索引を作成した後。
- パフォーマンスが重要な意味を持つアプリケーションのバインドの前。
- プリフェッチ・サイズが変更された場合。
- 基礎表に大幅な変更が加えられたために、ビューから戻される行が変更された統計ビュー。
- LOAD コマンドを STATISTICS オプションを指定して実行した後 (XML 列が存在する場合)。 STATISTICS オプションを使用した場合であっても、LOAD コマンドは XML 列についての統計を収集しないため、RUNSTATS ユーティリティーを使用して XML 列の統計を収集してください。RUNSTATS コマンドを使用して XML 列の統計のみを収集する際、LOAD コマンドの実行またはそれ以前の RUNSTATS ユーティリティーの実行によって収集されていた XML 以外の列に関する既存の統計は保持されます。 XML 列の統計を過去に収集していた場合、現行のコマンドで収集されない列の統計はドロップされ、それらの列の統計の内、現行のコマンドで収集される列の統計は置換されます。
- 選択するオプションは、特定の表やアプリケーションによって異なります。
一般的には、以下のガイドラインが適用されます。
- 重要な照会に使用される重要な表、比較的小規模な表、またはあまり変化がなく、 システムそのものでの活動があまりない表には、可能な限り詳細に統計を収集する努力を費やす価値があります。
- 統計を収集する時間が限られている場合、比較的大きい表の場合、または表が頻繁に更新される場合には、述部で使用される列セットに限って RUNSTATS コマンドを実行すると有効である場合があります。 この方法であれば、より頻繁に RUNSTATS コマンドを実行できます。
- 統計を収集する時間が限られており、RUNSTATS コマンドを表ごとに調整する手間が大きな問題となっている場合は、KEY 列の統計のみを収集することを考慮してください。索引に含まれている列セットは、表にとって重要で、述部に使用される確立が最も高いと考えられます。
- 統計を収集する時間が限られている状況で表統計を収集する場合は、TABLESAMPLE オプションを使用して、表データのサブセットに関する統計を収集することを検討してください。
- 統計を収集する時間が限られている状況で索引統計を収集する場合は、INDEXSAMPLE オプションを使用して、索引データのサブセットに関する統計を収集することを検討してください。
- 特定の列および
"column = constant"というタイプの述部に偏りが存在する場合は、 その列に指定する NUM_FREQVALUES 値を大きくすると有効な場合があります。 - 等式述部で使用する列で、値の分散に偏りがある可能性のある列はすべて、分散統計を収集してください。
- 範囲述部を使用する列 (例えば、
"column >= constant"や "column BETWEEN constant1 AND constant2"など) や、"column LIKE '%xyz'"というタイプの列については、NUM_QUANTILES 値に指定する値を大きくするとよい可能性があります。 - ストレージ・スペースが懸念されている場合で、統計の収集にあまり時間をかけられない場合は、述部で使用しない列に高い NUM_FREQVALUES または NUM_QUANTILES 値を指定しないでください。
- 索引統計が必要な場合、その索引を含む表についての統計がそれまで収集されていなければ、表と索引の両方に関する統計が計算されます。
- 表の XML 列に関する統計が不要な場合は、EXCLUDING XML COLUMNS パラメーターを使用して XML 列をすべて除外することができます。このパラメーターは、統計情報収集の対象として XML 列を指定する他のどのパラメーターよりも優先されます。
- コマンドを実行した後は、以下の点に注意してください。
- ロックを解放するには、COMMIT を実行する必要があります。
- 新しいアクセス・プランを生成できるようにするには、ターゲット表を参照しているパッケージを再バインドする必要があります。
- 表に対して部分的にコマンドを実行する場合、コマンドを最後に実行した後に表に対して行われたアクティビティーのために、不整合が生じる可能性があります。このような場合には、警告メッセージが戻されます。
表に対してのみ RUNSTATS コマンドを実行すると、 表レベルの統計と索引レベルの統計に不整合が生じることがあります。 例えば、ある表に関して索引レベルの統計を収集した後で、その表からかなりの数の行を削除してしまったとします。このような場合に、その表でだけ RUNSTATS コマンドを発行すると、表のカーディナリティーが FIRSTKEYCARD の値よりも小さくなってしまう可能性があります。これは不整合です。同様に、作成した新しい索引で統計を収集した場合にも、表レベルの統計に不整合が生じることがあります。
- RUNSTATS コマンドは、表統計が要求されたときに、以前に収集された分散統計をドロップします。例えば、RUNSTATS ON TABLE コマンドおよび RUNSTATS ON TABLE … AND INDEXES ALL コマンドを使用すると、以前に収集された分散統計はドロップされます。 コマンドを索引に対してのみ実行した場合、以前収集された分散統計は保持されます。 例えば、RUNSTATS ON TABLE … FOR INDEXES ALL コマンドを使用すると、以前に収集された分散統計は保持されます。 RUNSTATS コマンドを XML 列に対してのみ実行した場合、以前収集された基本列統計および分散統計は保持されます。 XML 列の統計を過去に収集していた場合、現行のコマンドで収集されない列の統計はドロップされ、それらの列の統計の内、現行のコマンドで収集される列の統計は置換されます。
- パーティション表にデタッチされたパーティションが存在する場合、デタッチされたデータ・パーティションでクリーンアップの必要なものにまだ属している索引キーは、統計においてキーの一部としてカウントされません。
それらのキーは、不可視であり表の一部ではなくなっているため、カウントされません。
そのような索引キーは、最終的に非同期の索引クリーンアップによって索引から除去されます。
その結果、非同期の索引クリーンアップを実行する前に収集された統計情報は誤解を招くものになります。
非同期の索引クリーンアップの完了前に RUNSTATS コマンドを発行した場合、不正確な統計情報を基に、
索引再編成または索引クリーンアップについての誤ったアラームが生成される可能性があります。
非同期の索引クリーンアップが実行されると、クリーンアップを必要とするデタッチされたデータ・パーティションにまだ属しているすべての索引キーが除去されるので、索引の再編成の必要がなくなることがあります。
パーティション表の場合、非同期索引クリーンアップ完了後に RUNSTATS コマンドを発行することをお勧めします。 それは、デタッチされているデータ・パーティションの存在に関して正確な索引統計情報を生成するためです。表の中にデタッチされているデータ・パーティションがあるかどうかを調べるには、 SYSCAT.DATAPARTITIONS カタログ・ビューの状況フィールドを確認して、値
L(論理的にデタッチ済み)、I(索引クリーンアップ)、またはD(デタッチ済みで従属 MQT 付き) を探してください。RUNSTATS コマンドは、パーティション索引のすべての索引パーティションの統計を収集します。 パーティション索引の SYSSTAT.INDEXES ビュー内の統計は、索引パーティションを表します。ただし FIRSTKEYCARD、FIRST2KEYCARD、FIRST3KEYCARD、FIRST4KEYCARD、および FULLKEYCARD 統計は除きます。 これらの統計はカーディナリティーの見積もりで使用されるので、それらは索引全体に対するものであり、1 つの索引パーティションに対するものではありません。 分散統計 (頻度および変位値) は、パーティション索引では収集されませんが、RUNSTATS が表上で実行される場合は収集されます。 パーティション索引の先行列の統計は、非パーティション索引の先行列の統計ほど正確でない場合があります。
-
RUNSTATS コマンドを式ベースの索引がある表に対して実行し、この RUNSTATS コマンドにその索引が
AND INDEXES節またはFOR INDEXES節に含まれている場合、その索引内の式ベースの各キー列の統計も収集され、その索引に関連付けられているシステム生成統計ビューに関連付けられます。式は、RUNSTATS コマンドの列としては指定できません (SQL0205N)。 式ベースの各索引キー列に関するカスタマイズされた統計を収集するために、統計ビュー内に表示される各列名と同じものを使用して、その索引に関連付けられている統計ビューに統計プロファイルを定義することができます。また、基本表に対して、その索引を含んだ統計プロファイルをその INDEXES 節に定義する必要もあります。注: 式ベースの索引の統計ビューに統計プロファイルを定義すると、統計プロファイルがまだ存在しない場合、自動的に生成された統計プロファイルが基本表に関連付けられます。統計プロファイルが定義されると、基本表に対する USE PROFILE 節を指定した RUNSTATS コマンドでは、索引内の式ベースの各キー列に関して収集された、カスタマイズされた統計が生成されます。 - XML 列に定義された XML データの索引については、分散統計が収集されます。WITH DISTRIBUTION パラメーターを指定して RUNSTATS コマンドを表に対して実行すると、タイプ XML の列に関する分散統計の収集は、以下のように行われます。
- RUNSTATS コマンドでは、XML 列で定義された XML データに対する索引に関して分散統計を収集するため、分散統計と表統計の両方を収集する必要があります。XML 分散統計は表統計と共に保管されるので、分散統計を収集するためには表統計を収集しなければなりません。
XML 分散統計を収集するために、索引節は必要ありません。索引節だけを指定しても、XML 分散統計は収集されません。
XML 分散統計はデフォルトで、XML データに対する各索引に関して最大 250 の分位数を使用します。 XML 列についての分散統計を収集する場合、ON COLUMNS 節または DEFAULT 節の NUM_QUANTILES パラメーターに値を指定することによって分位の最大数を変更できます。
- 分散統計は、タイプ VARCHAR、DOUBLE、TIMESTAMP、および DATE の XML データの索引に関して収集されます。タイプ VARCHAR HASHED の索引に関して、分散統計は収集されません。
- 分散統計は、パーティション表で定義された XML データに対するパーティション索引に関しては収集されません。
- RUNSTATS コマンドでは、XML 列で定義された XML データに対する索引に関して分散統計を収集するため、分散統計と表統計の両方を収集する必要があります。XML 分散統計は表統計と共に保管されるので、分散統計を収集するためには表統計を収集しなければなりません。
- カタログ表の特殊なシステム生成索引は、範囲クラスター表の範囲配列プロパティーを表しています。 このタイプの表の統計を収集する場合は、そのシステム生成索引についても統計が収集されます。 この統計には、基本データ表と同じページ数を持つ 2 レベルの索引として索引を表現し、 索引の順序に沿って完全に基本データをクラスター化することによって実現している範囲検索の高速アクセスが反映されます。
- コマンドの
On Dist Cols節では、Frequency Option パラメーターおよび Quantile Option のパラメーターは列グループに対してはサポートされません。 これらのパラメーターは、単一の列でのみサポートされています。 - DMS モードでは 3 つのタイプのプリフェッチ統計が計算不可です。
索引カタログ内の索引統計の以下の統計の値は
-1になります。- AVERAGE_SEQUENCE_FETCH_PAGES
- AVERAGE_SEQUENCE_FETCH_GAP
- AVERAGE_RANDOM_FETCH_PAGES
- 統計プロファイルは、SYSCAT.TABLES システム・カタログ表の STATISTICS_PROFILE 列に、可視ストリングのフォーマットで保管されます。 これが RUNSTATS コマンドに相当します。
- XML タイプの列に関する統計情報収集は、DB2_XML_RUNSTATS_PATHID_K および DB2_XML_RUNSTATS_PATHVALUE_K の 2 つの Db2 レジストリー変数によって制御されます。 これらの 2 つのレジストリー変数は、収集する度数の数を指定するという点において NUM_FREQVALUES パラメーターに似ています。このパラメーターを設定しなかった場合は、デフォルト 200 が使用されます。
- RUNSTATS コマンドの実行を開始すると、このコマンドは、SYSTABLES 表に対して IX 表ロックを取得し、統計を収集する表の行に対して U ロックを取得します。SYSTABLES 表の読み取り操作は (U ロックをかけられた表の行に対しても) 引き続き可能です。 また、U ロックをかけられた行に対する操作でなければ、書き込み操作も可能です。 RUNSTATS コマンドが IX ロックを取得しているため、別の読み取りプログラムまたは書き込みプログラムが SYSTABLES 表に対する S ロックを取得することはできません。
- 統計は、構造化タイプの列については収集されません。 それらが指定されている場合、そのデータ・タイプの列は無視されます。
- LOB または LONG データ・タイプの列では、AVGCOLLEN および NUMNULLS のみが収集されます。AVGCOLLEN は、列がデータベース・メモリーまたは一時表に保管される場合の、バイト単位の平均スペースを表します。 この値は、LOB または LONG データ・タイプのデータ記述子の長さを表します。ただし LOB データがデータ・ページ上でインライン化されている場合を除きます。 ディスク上で列を保管するために必要な平均スペース所要量は、この統計により表される値とは異なる場合があります。
- 索引統計の収集方法を変更するため、UNSAMPLED DETAILED オプションを使用できます。ただし、これを使用するのは、デフォルトと DETAILED では適正に機能しないことが明らかな場合に限るべきです。
- INDEXSAMPLE パラメーターを使用するときは、単一のコマンド内で各索引に対する索引サンプリング率を別々に指定することはできません。例えば、以下のようなコマンドは無効です。
以下の 2 つの RUNSTATS コマンドを使用すると、必要な結果を得ることができます。runstats on table orders and index o_ck indexsample system(5), index o_ok indexsample system(10)runstats on table orders and index o_ck indexsample system(5) runstats on table orders for index o_ok indexsample system(10) - 表または表の索引に関する統計を最後に収集した後に表を変更している場合、RUNSTATS ON TABLE … AND INDEXES ALL を実行する必要があります。RUNSTATS ON TABLE … FOR INDEXES ALL を使用した場合、統計に不整合が生じる可能性があります。
