RUNSTATS コマンド
RUNSTATS コマンドは、表、関連する索引、または統計ビューの特性に関するシステム・カタログ内の統計を更新します。 これらの特性には、レコード数、ページ数、および平均レコード長が含まれます。 オプティマイザーは、これらの統計を使用してデータへのアクセス・パスを決定します。
表の場合は、表の更新が数多く行われたとき、または表が再編成された後に、RUNSTATS コマンドを呼び出してください。 統計ビューの場合、基礎表に対する変更がそのビューによって返される行に対してかなりの影響を及ぼしている場合に、RUNSTATS コマンドを呼び出します。 そのビューは、事前に ALTER VIEW ステートメントを使用して、照会最適化に使用できるようにしておく必要があります。
スコープ
RUNSTATS コマンドは、db2nodes.cfg ファイル中のどのデータベース・パーティションからでも発行できます。 このコマンドを使用して、カタログ・データベース・パーティションのカタログを更新できます。
テーブルの場合、このコマンドは、テーブルが開始されたデータベース・パーティション上の表の統計を収集します。 表がそのデータベース・パーティションに存在しない場合、 データベース・パーティション・グループの最初のデータベース・パーティションが選択されます。
ビューの場合、このコマンドは、関連するすべてのデータベース・パーティションに含まれる表のデータを使用して、統計情報を収集します。
許可
- SYSADM
- SYSCTRL
- SYSMAINT
- DBADM
- LOAD
- SQLADM
- 表のスキーマに対する SCHEMAADM
- 表に対する CONTROL 特権
このコマンドを使用する際には、接続内に存在する宣言された一時表のいずれにおいても明示特権は必要ありません。
- SYSADM
- SYSCTRL
- SYSMAINT
- DBADM
- LOAD
- SQLADM
- ビューのスキーマに対する SCHEMAADM
- 統計ビューに対する CONTROL 特権
必要な接続
データベース
コマンド構文
コマンド・パラメーター
- object-name
- 統計が収集される表または統計ビューを識別します。 このパラメーターは、表階層であってはなりません。 型付き表の場合は、object-name パラメーターの値は表階層のルート表の名前でなければなりません。 schema.object-name という形式の完全修飾名または別名を使用しなければなりません。 スキーマは、テーブルの作成に使用されたユーザー名です。
- 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
節で使用できます。On Dist Cols
節を ( WITH DISTRIBUTION パラメーターの後に) 指定すると、基本統計と分散統計の両方が収集されるため、両方の節にこのパラメーターを指定すると冗長になります。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 パラメーターを指定すると、それらのパラメーターの値が、列について収集する頻度統計および変位統計の最大数を決定するために使用されます。 ON COLUMNS 節に個々の列の値を指定しない場合は、 NUM_FREQVALUES パラメーターと NUM_QUANTILES パラメーターが使用されます。 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 コマンド呼び出しの間で異なる可能性があります。 また、一貫性のある結果を得るためには、( BERNOULLI パラメーターまたは SYSTEM パラメーターを使用して) サンプルを取得した方法が同じでなければなりません。
- INDEXSAMPLE BERNOULLI
- 索引内の行のサンプルについて索引統計を収集します。 ベルヌーイ・サンプリング では、各行が個別に考慮されます。 確率が P/100 の行を含み ( P は numeric-literal パラメーターの値)、確率が 1-P/100 の行を除外します。 したがって、numeric-literal パラメーターの値が 10 (10 % を表す) である場合は、各行が 0.1 の確率で含められ、0.9 の確率で除外されます。 RUNSTATS コマンドは実行されるたびに、索引から異なるサンプルを得る結果になると考えられます。 すべての索引ページが索引スキャンによって取得されますが、 numeric-literal パラメーターで指定したパーセントの行だけが統計収集に使用されます。 INDEXSAMPLE BERNOULLI パラメーターは、統計ビューではサポートされません。
- INDEXSAMPLE SYSTEM
- 索引ページのサンプルについて統計を収集します。 システム・サンプリング では、各ページが個別に考慮されます。 確率が P/100 ( P は numeric-literal パラメーターの値) のページを含み、確率が 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
- RUNSTATS が priorityで指定されたレベルでスロットルされることを指定します。 priority は 1 から 100 の範囲の数であり、 100 が最高の優先順位、1 が最低の優先順位を表します。 優先順位によって、ユーティリティーのスロットルの量が決まります。 優先順位が同じユーティリティーはすべて同じ量のスロットルを受け、 優先順位の低いユーティリティーは、優先順位の高いユーティリティーよりも多くスロットルされます。 priority を指定しない場合、RUNSTATS はデフォルトの優先順位 50 を使用します。 UTIL_IMPACT_PRIORITY キーワードを省略すると、スロットルのサポートなしで RUNSTATS ユーティリティーが呼び出されます。 UTIL_IMPACT_PRIORITY キーワードを指定した場合でも、util_impact_lim 構成パラメーターが 100 に設定されていれば、スロットルなしでユーティリティーが実行されます。
パーティション・データベースで RUNSTATS コマンドを表に対して使用した場合、統計は 1 つのデータベース・パーティションでのみ収集されます。 RUNSTATS コマンドを実行したデータベース・パーティションに表のパーティションが存在する場合、コマンドは、そのデータベース・パーティションで実行されます。 それ以外の場合は、表がパーティションに分けられているデータベース・パーティション・グループの最初のデータベース・パーティションで実行されます。
例
- 以下のコマンドは、表についてのみ、すべての列を対象とする基本統計 (分散統計なし) を収集します。
RUNSTATS ON TABLE employee
- 以下のコマンドは、表についてのみ、列 empid および empname の分散統計付きで統計を収集します。
RUNSTATS ON TABLE employee WITH DISTRIBUTION ON COLUMNS (empid, empname)
- 以下のコマンドは、表についてのみ、すべての列を対象とする基本統計と分散統計を収集します。 このコマンドでは、頻度の値の最大数を指定し、構成設定にある分散変位値の最大数を使用しています。
RUNSTATS ON TABLE employee WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 50
- 以下のコマンドは、表についてのみ、すべての列および列グループ (JOB、WORKDEPT、および SEX) を対象とする基本統計と分散統計を収集します。
RUNSTATS ON TABLE employee ON ALL COLUMNS AND COLUMNS ((JOB, WORKDEPT, SEX)) WITH DISTRIBUTION
- 以下のコマンドは、1 セットの索引についての統計を収集します。
RUNSTATS ON TABLE employee for indexes empl1, empl2
- 以下のコマンドは、すべての索引についての統計のみを収集します。
RUNSTATS ON TABLE employee FOR INDEXES ALL
- 以下のコマンドは、表とすべての索引についての基本統計を収集し、詳細な索引統計収集に関してはサンプリングを使用します。
このコマンドは、 以下のコマンドと同じです。RUNSTATS ON TABLE employee AND SAMPLED DETAILED INDEXES ALL
RUNSTATS ON TABLE employee AND DETAILED INDEXES ALL
- 以下のコマンドは、列 empid、empname、および empdept と、2 つの索引 Xempid および Xempname に関する分散統計付きで、表の基本統計を収集します。 empdept に関しては個別に分散統計の制限を設定し、その他の 2 つの列では共通のデフォルトを使用しています。
RUNSTATS ON TABLE employee WITH DISTRIBUTION ON COLUMNS (empid, empname, empdept NUM_FREQVALUES 50 NUM_QUANTILES 100) DEFAULT NUM_FREQVALUES 5 NUM_QUANTILES 10 AND INDEXES Xempid, Xempname
- 以下のコマンドは、索引で使用されているすべての列についての統計と、すべての索引についての統計を収集します。
RUNSTATS ON TABLE employee ON KEY COLUMNS AND INDEXES ALL
- 以下のコマンドは、すべての索引とすべての列の統計 (分散統計付き) を収集します。列の 1 つに対して個別に分散統計を設定しています。 この例では、T1 には列 c1、c2,.... , c8
RUNSTATS ON TABLE T1 WITH DISTRIBUTION ON COLUMNS (c1, c2, c3 NUM_FREQVALUES 20 NUM_QUANTILES 40, c4, c5, c6, c7, c8) DEFAULT NUM_FREQVALUES 0, NUM_QUANTILES 0 AND INDEXES ALL RUNSTATS ON TABLE T1 WITH DISTRIBUTION ON COLUMNS (c3 NUM_FREQVALUES 20 NUM_QUANTILES 40) AND INDEXES ALL
- 以下のコマンドは、表 T1 の個別の列 c1 および c5 ならびに列グループ (c2、c3) および (c2、c4) に関する統計を収集します。 複数列のカーディナリティーは、
照会オプティマイザーが、データの相関がある列の述部のフィルター係数を見積もるのに便利です。
RUNSTATS ON TABLE T1 ON COLUMNS (c1, (c2, c3), (c2, c4), c5)
- 以下のコマンドは、表 T1 の個別の列 c1 および c2 に関する統計を収集します。 列 c1 については、このコマンドは LIKE 述部統計も収集します。
RUNSTATS ON TABLE T1 ON COLUMNS (c1 LIKE STATISTICS, c2)
- 以下のコマンドは、表についてのみ、すべての列を対象とする基本統計と分散統計を収集する統計プロファイルを登録します。 このコマンドでは、頻度の値の最大数を指定し、構成設定にある分散変位値の最大数を使用しています。
RUNSTATS ON TABLE employee WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 50 SET PROFILE
- 以下のコマンドは、表についてのみ、すべての列を対象とする基本統計と分散統計を収集する統計プロファイルを登録します。 このコマンドでは、頻度の値の最大数を指定し、構成設定にある分散変位値の最大数を使用しています。 統計は収集されません。
RUNSTATS ON TABLE employee WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 50 SET PROFILE ONLY
- 以下のコマンドは、前述の登録済みの統計プロファイルを、頻度の値の最大数を 50 から 30 にするように変更します。 このコマンドはさらに、指定のとおりに統計を更新します。
RUNSTATS ON TABLE employee WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 30 UPDATE PROFILE
- 以下のコマンドは、前述の登録済みの統計プロファイルを、頻度の値の最大数を 50 から 30 にするように変更します。 統計は収集されません。
RUNSTATS ON TABLE employee WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 30 UPDATE PROFILE ONLY
- 以下のコマンドは、前述の登録済みの統計プロファイルを、列 empl_address と列グループ (empl_title、empl_salary) のオプションを追加するように変更します。 このコマンドはさらに、指定のとおりに統計を更新します。
RUNSTATS ON TABLE employee ON COLUMNS (empl_address, (empl_title, empl_salary)) UPDATE PROFILE
- 以下のコマンドは、前述の登録済みの統計プロファイルを、列 empl_address と列グループ (empl_title、empl_salary) のオプションを追加するように変更します。 統計は収集されません。
RUNSTATS ON TABLE employee ON COLUMNS (empl_address, (empl_title, empl_salary)) UPDATE PROFILE ONLY
- 以下のコマンドは、この表の統計プロファイルに記録されているオプションを使用して、表の統計を収集します。
RUNSTATS ON TABLE employee USE PROFILE
- 以下のコマンドは、表のカタログに保管されている前述の登録済みの統計プロファイルに対応する RUNSTATS コマンド・オプションを照会します。
SELECT STATISTICS_PROFILE FROM SYSCAT.TABLES WHERE TABNAME = 'EMPLOYEE'
- 以下のコマンドは、30 % の行についての分散統計を含む統計を収集します。
RUNSTATS ON TABLE employee WITH DISTRIBUTION TABLESAMPLE BERNOULLI(30)
- 統計を収集するためのサンプル・セットを制御し、同じサンプル・セットを繰り返し使用するには、以下のようにします。
このコマンドは、同じセットの統計を生成します (その間にデータが変更されていない場合)。RUNSTATS ON TABLE employee WITH DISTRIBUTION TABLESAMPLE BERNOULLI(30) REPEATABLE(4196)
- 以下のコマンドは、1.5% のデータ・ページについて索引統計と表統計を収集します。 表データ・ページだけがサンプリングされ、索引ページはサンプリングされません。 この例では、表統計の収集には 1.5 % の表データ・ページが使用され、
索引統計にはすべての索引ページが使用されます。
RUNSTATS ON TABLE employee AND INDEXES ALL TABLESAMPLE SYSTEM(1.5)
- 以下のコマンドは、1.5% のデータ・ページについての表統計と、2.5% の索引ページについての索引統計を収集します。 表データ・ページと索引ページの両方がサンプルになります。
RUNSTATS ON TABLE employee AND INDEXES ALL TAMBLESAMPLE SYSTEM(1.5) INDEXSAMPLE SYSTEM(2.5)
- 以下のコマンドは、統計ビューの統計情報を、すべての列について、分散統計なしで収集します。
RUNSTATS ON VIEW product_sales_view
- 以下のコマンドは、統計ビューの基本統計を、列 category、type、および product_key についての分散統計付きで収集します。 category 列に関しては分散統計のしきい値を設定し、その他の列には共通のデフォルトを使用します。
RUNSTATS ON VIEW product_sales_view WITH DISTRIBUTION ON COLUMNS (category NUM_FREQVALUES 100 NUM_QUANTILES 100, type, product_key) DEFAULT NUM_FREQVALUES 50 NUM_QUANTILES 50
- 以下のコマンドは、統計ビューの基本統計と分散統計を、行レベルのサンプリングを使用して 10% の行について収集します。
RUNSTATS ON VIEW product_sales_view WITH DISTRIBUTION TABLESAMPLE BERNOULLI (10)
- 以下のコマンドは、統計ビューの基本統計と分散統計を、データ・ページ・レベルのサンプリングを使用して 2.5 %の行について収集します。 さらに、このコマンドは、同じサンプル・セットを繰り返し使用するように指定しています。 このコマンドが正常に実行されるためには、Db2 データベース・システムがデータ・ページ・サンプリングを 1 つ以上の表にプッシュする操作を正常に実行できるような照会でなければなりません。 それ以外の場合、エラー (SQL 20288N) が発行されます。
RUNSTATS ON VIEW product_sales_view WITH DISTRIBUTION TABLESAMPLE SYSTEM (2.5) REPEATABLE(4196)
- 以下のコマンドは、ビューの統計情報を収集し、指定のとおりにすべての列で分散統計を収集するための、統計プロファイルを登録します。
RUNSTATS ON VIEW product_sales_view WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 50 NUM_QUANTILES 50 SET PROFILE
- 以下のコマンドは、以前に登録した統計プロファイルを変更します。 このコマンドはさらに、指定のとおりに統計を更新します。
RUNSTATS ON VIEW salesdb.product_sales_view WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 25 NUM_QUANTILES 25 UPDATE PROFILE
使用上の注意
- 以下のケースでは RUNSTATS コマンドを実行する必要があります。
- 大幅に変更された表: 例えば、多くの更新が行われた場合や、大量のデータが挿入または削除された場合、 あるいは、LOAD 時に統計オプションを指定せずに LOAD コマンドを実行した場合など。
- REORG または REDISTRIBUTE DATABASE PARTITION GROUP コマンドを使用して再編成された表の場合。
- 行圧縮が実行された表。
- 新規索引を作成した後。
- パフォーマンスが重要な意味を持つアプリケーションのバインドの前。
- プリフェッチ・サイズが変更された場合。
- 基礎表に大幅な変更が加えられたために、ビューから戻される行が変更された統計ビュー。
- LOAD コマンドを STATISTICS オプションを指定して実行した後 (XML 列が存在する場合)。 LOAD コマンドは、 STATISTICS オプションを使用しても 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 コマンドは、パーティション索引のすべての索引パーティションの統計を収集します。 パーティション索引の先行列の統計は、非パーティション索引の先行列の統計ほど正確でない場合があります。
- 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 タイプの列の統計収集は、2 つの Db2 レジストリー変数 ( DB2_XML_RUNSTATS_PATHID_K および DB2_XML_RUNSTATS_PATHVALUE_K) によって管理されます。 これらの 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を使用すると、結果の統計に不整合が生じる可能性があります。