DB2 Version 10.1 for Linux, UNIX, and Windows

RUNSTATS コマンド

システム・カタログ内にある、表やそれに関連した索引の特性または統計ビューの特性に関する統計情報を更新します。 これらの特性には、レコード数、ページ数、および平均レコード長が含まれます。 オプティマイザーは、データへのアクセス・パスを判別するとき、 これらの統計を使用します。

表の場合、表で数多くの更新が行われたとき、または表の再編成後に、RUNSTATS コマンドを呼び出します。 統計ビューの場合、基礎表に対する変更がそのビューによって返される行に対してかなりの影響を及ぼしている場合に、RUNSTATS コマンドを呼び出します。 そのビューは、それ以前に ALTER VIEW ステートメントを使用して、照会最適化で使用できる状態になっていなければなりません。

有効範囲

RUNSTATS コマンドは、db2nodes.cfg ファイル内のいずれのデータベース・パーティションからでも発行できます。 この API は、カタログ・データベース・パーティション上のカタログを更新するために使用できます。

表の場合、このコマンドは、呼び出し元のデータベース・パーティションの表の統計を収集します。 表がそのデータベース・パーティションに存在しない場合、 データベース・パーティション・グループの最初のデータベース・パーティションが選択されます。

ビューの場合、このコマンドは、関連するすべてのデータベース・パーティションに含まれる表のデータを使用して、統計情報を収集します。

許可

表の場合、以下の権限のいずれか 1 つです。
  • SYSADM
  • SYSCTRL
  • SYSMAINT
  • DBADM
  • SQLADM
  • 表に対する CONTROL 特権
  • LOAD authority

このコマンドを使用する際には、接続内に存在する宣言された一時表のいずれにおいても明示特権は必要ありません。

統計ビューの場合、以下の権限のいずれか 1 つです。
  • SYSADM
  • SYSCTRL
  • SYSMAINT
  • DBADM
  • SQLADM
  • 統計ビューに対する CONTROL 特権

必要な接続

データベース

コマンド構文

構文図を読む構文図をスキップする
>>-RUNSTATS ON--+-TABLE-+--object-name-------------------------->
                '-VIEW--'                

>--+------------------------+----------------------------------->
   +-USE PROFILE------------+   
   +-UNSET PROFILE----------+   
   '-| Statistics Options |-'   

>--+------------------------------------+----------------------><
   '-UTIL_IMPACT_PRIORITY--+----------+-'   
                           '-priority-'     

Statistics Options

                                 .-ALLOW WRITE ACCESS-.   
|--+--------------------------+--+--------------------+--------->
   '-| Table Object Options |-'  '-ALLOW READ ACCESS--'   

>--+----------------------------+------------------------------->
   '-| Table Sampling Options |-'   

>--+----------------------------+--+---------------------+------|
   '-| Index Sampling Options |-'  '-| Profile Options |-'   

Table Object Options

|--+-FOR--| Index Clause |--+-----------------------+----------------------------------+--|
   |                        '-EXCLUDING XML COLUMNS-'                                  |   
   '-+-------------------------+--+-----------------------+--+-----------------------+-'   
     '-| Column Stats Clause |-'  '-EXCLUDING XML COLUMNS-'  '-AND--| Index Clause |-'     

Table Sampling Options

|--TABLESAMPLE--+-BERNOULLI-+--(--numeric-literal--)------------>
                '-SYSTEM----'                          

>--+-----------------------------------+------------------------|
   '-REPEATABLE--(--integer-literal--)-'   

Index Sampling Options

|--INDEXSAMPLE--+-BERNOULLI-+--(--numeric-literal--)------------|
                '-SYSTEM----'                          

Profile Options

   .-SET PROFILE NONE--------------.   
|--+-------------------------------+----------------------------|
   '-+-SET----+--PROFILE--+------+-'   
     '-UPDATE-'           '-ONLY-'     

Index Clause

|--+-------------------------+--+-INDEXES-+--------------------->
   | .-SAMPLED---.           |  '-INDEX---'   
   '-+-----------+--DETAILED-'                
     '-UNSAMPLED-'                            

     .-,----------.     
     V            |     
>--+---index-name-+-+-------------------------------------------|
   '-ALL------------'   

Column Stats Clause

|--+-| On Cols Clause |------------------------------+----------|
   '-+--------------------+--| Distribution Clause |-'   
     '-| On Cols Clause |-'                              

On Cols Clause

   .-ON ALL COLUMNS-----------------------------------------------------.   
   |                                           .-,-----------------.    |   
   |                                           V                   |    |   
|--+-ON--+----------------------+--COLUMNS--(----| Column Option |-+--)-+--|
   |     '-+-ALL-+--COLUMNS AND-'                                       |   
   |       '-KEY-'                                                      |   
   '-ON KEY COLUMNS-----------------------------------------------------'   

Distribution Clause

|--WITH DISTRIBUTION--+-------------------------+--------------->
                      '-| On Dist Cols Clause |-'   

>--+--------------------------+---------------------------------|
   '-| Default Dist Options |-'   

On Dist Cols Clause

   .-ON ALL COLUMNS-----------------------------------------------------------------------------------.   
   |                                           .-,-----------------------------------------------.    |   
   |                                           |                    .--------------------------. |    |   
   |                                           V                    V                          | |    |   
|--+-ON--+----------------------+--COLUMNS--(----| Column Option |----+----------------------+-+-+--)-+--|
   |     '-+-ALL-+--COLUMNS AND-'                                     +-| Frequency Option |-+        |   
   |       '-KEY-'                                                    '-| Quantile Option |--'        |   
   '-ON KEY COLUMNS-----------------------------------------------------------------------------------'   

Default Dist Option

            .--------------------------.   
            V                          |   
|--DEFAULT----+-| Frequency Option |-+-+------------------------|
              '-| Quantile Option |--'     

Frequency Option

|--NUM_FREQVALUES--integer--------------------------------------|

Quantile Option

|--NUM_QUANTILES--integer---------------------------------------|

Column Option

|--+-column-name--+-----------------+-+-------------------------|
   |              '-LIKE STATISTICS-' |   
   |    .-,-----------.               |   
   |    V             |               |   
   '-(----column-name-+--)------------'   

コマンド・パラメーター

object-name
統計が収集される表または統計ビューを識別します。 このパラメーターは、階層表であってはなりません。 型付き表の場合は、object-name は表階層のルート表の名前でなければなりません。 schema.object-name という形式の完全修飾名または別名を使用しなければなりません。schema には、表作成時のユーザー名が入ります。
USE PROFILE
このオプションを使用した RUNSTATS は、以前に保管した統計プロファイルを使用して表または統計ビューの統計を収集します。 統計プロファイルの作成には、SET PROFILE オプションを使用し、更新には UPDATE PROFILE オプションを使用します。
UNSET PROFILE
既存の統計プロファイルを除去する場合は、このオプションを指定します。以下に例を示します。
RUNSTATS ON tablemyschema.mytable UNSET PROFILE
FOR INDEXES
索引のみの統計を収集および更新します。 表に、以前に収集された表統計がない場合は、基本表統計も収集されます。 これらの基本統計には、分散統計は一切含まれません。 ビューの場合、このオプションは使用できません。
SAMPLED
組み合わせて使用できるのは DETAILED パラメーターのみです。 このオプションを指定しても、DETAILED によるデフォルトの機能は変更されません。このオプションは、以前のバージョンの DB2® との互換性のために残されています。 ビューの場合、このオプションは使用できません。
UNSAMPLED
このオプションが DETAILED オプションと共に使用された場合、強制的に RUNSTATS が実行されることにより、索引内のすべての項目が調べられて拡張索引統計が計算されます。このオプションはビューに対しては使用できず、スキャン索引サンプリング (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 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 Cols 節と On Dist Cols 節の中で使用できます。 列のグループに関する分散統計の収集は、現在サポートされていません。

列グループの中に XML タイプの列が指定されている場合は、そのグループについて重複のない異なる値を収集するため、XML タイプのそれらの列は無視されます。 しかし、その列グループ中の XML タイプ列について、XML 列の基本統計情報は収集されます。

ON KEY COLUMNS
特定の列をリストする代わりに、表で定義されたすべての索引を構成する列の統計を収集することもできます。 ここでは、照会に含まれる重要な列が、表での索引の作成にも使用されることが前提となっています。 表に索引がない場合は、列がリストされず、列統計が収集されない場合と同様になります。 これは、On Cols 節または On Dist Cols 節の中で使用できます。 ただし、その両方の節で指定すると、WITH DISTRIBUTION 節で基本統計と分散統計の両方の収集が指定されているため、On Cols 節で重複が生じます。 定義により XML タイプの列はキー列ではなく、ON KEY COLUMNS 節による統計情報収集には含められません。 ビューの場合、このオプションは使用できません。
column-name
表または統計ビューの中の列の名前。 存在しない列が指定された場合や列名の入力を誤った場合など、 統計収集を行えない列の名前が指定された場合は、エラー (-205) が戻されます。 一方は配分なし、一方は配分ありで、2 つの列のリストを指定できます。 WITH DISTRIBUTION 節が関連付けられていないリストで列を指定する場合は、基本列統計だけが収集されます。 列が両方のリストに含まれている場合は、分散統計が収集されます (NUM_FREQVALUES および NUM_QUANTILES がゼロに設定されていない限り)。
LIKE STATISTICS
このオプションが指定されると、コード・ページ属性が 1 バイト文字セット (SBCS)、FOR BIT DATA、または UTF-8 である CHAR および VARCHAR タイプの列について、追加の列統計が収集されることがあります。 runstats ユーティリティーが列値の分析後にこのような統計が適切であると判断した場合に、これらの統計が収集されます。 収集されるのは、SYSSTAT.COLUMNSSUB_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 節で個々の列に対して指定していなければ、これらの値によって、すべての列に関して収集する度数と分位の統計の最大個数が決まります。 DEFAULT 節が指定されない場合は、対応するデータベース構成パラメーターにある値が使用されます。
NUM_FREQVALUES
収集の頻度を示す値の最大値を定義します。 これは、ON COLUMNS 節の中で、個々の列ごとに指定できます。 個々の列に対して値が指定されないか、または '-1' として指定される場合は、DEFAULT 節で指定されている頻度のしきい値が選出されます。 どちらも指定されていない場合は、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
このオプションを使用した RUNSTATS は、表または統計ビューから取られた行のサンプルに関する統計を収集します。 BERNOULLI (ベルヌーイ) サンプリング では各行が個別に処理され、その際に P/100 (P は数値リテラル値) の確率で行が含められ、1-P/100 の確率で行が除外されます。 例えば、数値リテラルが値 10 (つまり、10 % のサンプル) と評価された場合は、0.1 の確率で各行が含められ、0.9 の確率で行が除外されます。 オプションの REPEATABLE 節を指定しない限り、RUNSTATS を実行するたびに、通常は異なった表のサンプルが作成されます。 すべてのデータ・ページが表スキャンによって検索されますが、 数値リテラル・パラメーターによって指定したパーセンテージの行だけが、統計収集に使用されます。
TABLESAMPLE SYSTEM
このオプションを使用した RUNSTATS は、表から取られたデータ・ページのサンプルに関する統計を収集します。 SYSTEM (システム) サンプリング では各ページが個別に処理され、その際に P/100 (P は数値リテラル値) の確率でページが含められ、1-P/100 の確率でページが除外されます。 オプションの REPEATABLE 節を指定しない限り、RUNSTATS を実行するたびに、通常は異なった表のサンプルが作成されます。 サンプルのサイズは、括弧内の数値リテラル・パラメーターによって制御し、表の約 P % を戻すように指定します。 数値リテラル・パラメーターによって指定したパーセンテージのデータ・ページだけが、検索されて統計収集に使用されます。

統計ビューでは、SYSTEM サンプリングは、ビュー定義で参照される単一の基本表にのみ適用できます。ビューに複数の表が含まれている場合、統計ビュー内のすべての表から、ある単一の表をそのビュー内で使用されている他の表の主キーまたはユニーク索引列すべてによって結合されているものとして特定できるのであれば、SYSTEM サンプリングが可能です。統計ビューがこれらの条件を満たしていない場合、BERNOULLI サンプリングが代わりに使用され、警告が戻されます。

numeric-literal
numeric-literal パラメーターは、取得するサンプルのサイズをパーセンテージ P として表します。この値は 100 以下の正数でなければならず、10 の間の数を指定することもできます。 例えば、値 0.01 は、1 % の 100 分の 1 を表します。 この場合は、平均して 10,000 行のうちの 1 行がサンプルとして取られます。 0 または 100 の値を指定した場合、DB2 データベース・システムでは、TABLESAMPLE BERNOULLITABLESAMPLE SYSTEM のどちらが指定されているかにかかわらず、サンプリングが指定されていない場合と同じように処理されます。 100 より大きい値または 0 より小さい値は、DB2 データベース・システムではエラー (SQL1197N) として処理されます。
REPEATABLE (integer-literal)
REPEATABLE 節を TABLESAMPLE 節に追加すれば、RUNSTATS の反復実行時に必ず同じサンプルが戻されるようになります。 integer-literal パラメーターは、サンプリングで使用するシードを表す負以外の整数です。 負のシードを渡した場合、エラー (SQL1197N) が発生します。 TABLESAMPLE REPEATABLE の最後の実行以降に行われた表または統計ビューに対する活動によって表または統計ビューのデータが変更された場合には、反復可能な RUNSTATS 呼び出しでサンプル・セットが変化する可能性があります。 また、必ず整合した結果を得るためには、BERNOULLI (ベルヌーイ) または SYSTEM (システム) キーワードによって指定するサンプルの入手方法が同じでなければなりません。
INDEXSAMPLE BERNOULLI
このオプションを使用すると、索引内の行のサンプルに対する索引統計が収集されます。BERNOULLI (ベルヌーイ) サンプリング では各行が個別に処理され、その際に P/100 (P は数値リテラル値) の確率で行が含められ、1-P/100 の確率で行が除外されます。例えば、数値リテラルが値 10 (つまり、10 % のサンプル) と評価された場合は、0.1 の確率で各行が含められ、0.9 の確率で行が除外されます。 RUNSTATS は実行されるたびに、索引から異なるサンプルを得る結果になると考えられます。すべての索引ページが索引スキャンによって検索されますが、 数値リテラル・パラメーターによって指定したパーセンテージの行だけが、統計収集に使用されます。 このオプションは統計ビューではサポートされていません。
INDEXSAMPLE SYSTEM
このオプションを使用すると、索引ページのサンプルに対する統計が収集されます。SYSTEM (システム) サンプリング では各ページが個別に処理され、その際に P/100 (P は数値リテラル値) の確率でページが含められ、1-P/100 の確率でページが除外されます。通常は、RUNSTATS コマンドが実行されるたびに索引から異なるサンプルを得る結果になります。サンプルのサイズは、括弧内の数値リテラル・パラメーターによって制御し、索引の約 P % を戻すように指定します。 数値リテラル・パラメーターによって指定したパーセントの索引ページだけが、検索されて統計収集に使用されます。 このオプションは統計ビューではサポートされていません。
SET PROFILE NONE
この RUNSTATS 呼び出しには統計プロファイルを設定しないことを指定します。
SET PROFILE
RUNSTATS は、特定の統計プロファイルを生成してシステム・カタログ表に保管し、RUNSTATS コマンド・オプションを実行して統計を収集します。
SET PROFILE ONLY
RUNSTATS が、RUNSTATS のコマンド・オプションを実行せずに、特定の統計プロファイルを生成してシステム・カタログ表に保管できるようにします。
UPDATE PROFILE
RUNSTATS は、システム・カタログ表内の既存の統計プロファイルを変更し、その更新済みの統計プロファイルの RUNSTATS コマンド・オプションを実行して統計を収集します。UPDATE PROFILE オプションを使用して、統計プロファイルにある節を削除することはできません。
UPDATE PROFILE ONLY
RUNSTATS は、システム・カタログ表内の既存の統計プロファイルを変更しますが、その更新済みの統計プロファイルのRUNSTATS コマンド・オプションを実行しません。 UPDATE PROFILE ONLY オプションを使用して、統計プロファイルにある節を削除することはできません。
UTIL_IMPACT_PRIORITY priority
priority に指定されているレベルで、RUNSTATS をスロットルすることを指定します。 priority1 から 100 の範囲の数であり、 100 が最高の優先順位、1 が最低の優先順位を表します。 優先順位によって、ユーティリティーのスロットルの量が決まります。 優先順位が同じユーティリティーはすべて同じ量のスロットルになり、 優先順位の低いユーティリティーは、 優先順位の高いユーティリティーよりも量が絞られます。 priority を指定しない場合、RUNSTATS はデフォルトの優先順位 50 を使用します。 UTIL_IMPACT_PRIORITY キーワードを省略すると、スロットルのサポートなしで RUNSTATS ユーティリティーが呼び出されます。 UTIL_IMPACT_PRIORITY キーワードを指定した場合でも、util_impact_lim 構成パラメーターが 100 に設定されていれば、スロットルなしでユーティリティーが実行されます。

パーティション・データベースでは、RUNSTATS コマンドが表に対して使用された場合、1 つのデータベース・パーティションでしか統計を収集できません。 RUNSTATS コマンドが実行されたデータベース・パーティションに表のパーティションがある場合、コマンドは、そのデータベース・パーティションで実行されます。 それ以外の場合は、表がパーティションに分けられているデータベース・パーティション・グループの最初のデータベース・パーティションで実行されます。

  1. 表でのみ統計を収集し、どの列でも分散統計は収集しません。
    RUNSTATS ON TABLE employee
  2. 表でのみ統計を収集し、列 empid と empname で分散統計を収集します。
    RUNSTATS ON TABLE employee 
        WITH DISTRIBUTION ON COLUMNS (empid, empname) 
  3. 構成の設定から num_quantiles を取り出しながら、表に指定された度数のしきい値を使用して、表でのみ、すべての列で分散統計を収集します。
    RUNSTATS ON TABLE employee WITH DISTRIBUTION DEFAULT 
        NUM_FREQVALUES 50 
  4. 表でのみ統計を収集し、すべての列、および列グループ JOB、WORKDEPT、および SEX で分散統計を収集します。
    RUNSTATS ON TABLE employee ON ALL COLUMNS AND COLUMNS ((JOB, WORKDEPT, SEX)) 
        WITH DISTRIBUTION
  5. 一連の索引で統計を収集します。
    RUNSTATS ON TABLE employee for indexes empl1, empl2
  6. すべての索引のみの統計を収集します。
    RUNSTATS ON TABLE employee FOR INDEXES ALL
  7. 詳細な索引統計収集のサンプリングを使用して、表とすべての索引に関する基本統計を収集します。
    RUNSTATS ON TABLE employee AND SAMPLED DETAILED INDEXES ALL
    これは、以下と同じ意味になります。
    RUNSTATS ON TABLE employee AND DETAILED INDEXES ALL
  8. 表の統計を収集し、 列 empid、empname、empdept、および索引 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
  9. 索引で使用されるすべての列と、すべての索引の統計を収集します。
    RUNSTATS ON TABLE employee ON KEY COLUMNS AND INDEXES ALL
  10. すべての索引とすべての列で統計を収集します。分散統計は、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
  11. 表 T1 で、個別の列 c1 および c5 と、列グループ (c2, c3) および (c2, c4) に関する統計を収集します。 複数列のカーディナリティーは、 照会オプティマイザーが、データの相関がある列の述部のフィルター係数を見積もるのに大変便利です。
    RUNSTATS ON TABLE T1 ON COLUMNS (c1, (c2, c3),
        (c2, c4), c5)
  12. 表 T1 で、個別の列 c1 および c2 に関する統計を収集します。 列 c1 に関しては、LIKE 述部の統計も収集します。
    RUNSTATS ON TABLE T1 ON COLUMNS (c1 LIKE STATISTICS, c2)
  13. 構成の設定から num_quantiles を取り出しながら、表に指定された度数のしきい値を使用して、表でのみ、すべての列で分散統計を収集する統計プロファイルを登録します。 このコマンドはさらに、指定のとおりに統計を更新します。
    RUNSTATS ON TABLE employee WITH DISTRIBUTION DEFAULT 
       NUM_FREQVALUES 50 SET PROFILE
  14. 構成の設定から num_quantiles を取り出しながら、表に指定された度数のしきい値を使用して、表でのみ、すべての列で分散統計を収集する統計プロファイルを登録します。 統計は収集されません。
    RUNSTATS ON TABLE employee WITH DISTRIBUTION 
        DEFAULT NUM_FREQVALUES 50 SET PROFILE ONLY
  15. NUM_FREQVALUES 値を 50 から 30 に変更することにより、以前に登録した統計プロファイルを変更します。 このコマンドはさらに、指定のとおりに統計を更新します。
    RUNSTATS ON TABLE employee WITH DISTRIBUTION 
        DEFAULT NUM_FREQVALUES 30 UPDATE PROFILE
  16. NUM_FREQVALUES 値を 50 から 30 に変更することにより、以前に登録した統計プロファイルを変更します。 統計は収集されません。
    RUNSTATS ON TABLE employee WITH DISTRIBUTION 
        DEFAULT NUM_FREQVALUES 30 UPDATE PROFILE ONLY
  17. empl_address と列グループ (empl_titleempl_salary) のオプションを追加することにより、以前に登録した統計プロファイルを変更します。 このコマンドはさらに、指定のとおりに統計を更新します。
    RUNSTATS ON TABLE employee 
     ON COLUMNS (empl_address, (empl_title, empl_salary))
     UPDATE PROFILE
  18. empl_address と列グループ (empl_titleempl_salary) のオプションを追加することにより、以前に登録した統計プロファイルを変更します。 統計は収集されません。
    RUNSTATS ON TABLE employee 
     ON COLUMNS (empl_address, (empl_title, empl_salary))
     UPDATE PROFILE ONLY
  19. 表の統計プロファイルに記録されたオプションを使用して、その表の統計を収集します。
    RUNSTATS ON TABLE employee USE PROFILE
  20. 表のカタログに保管されている以前に登録した統計プロファイルに対応する RUNSTATS コマンド・オプションを照会します。
    SELECT STATISTICS_PROFILE FROM SYSCAT.TABLES WHERE TABNAME = 
        'EMPLOYEE'
  21. 30 % の行に関する分散統計などの統計を収集します。
    RUNSTATS ON TABLE employee WITH DISTRIBUTION 
        TABLESAMPLE BERNOULLI(30)
  22. 統計を収集するためのサンプル・セットを制御し、同じサンプル・セットを繰り返し使用するには、以下のようにします。
    RUNSTATS ON TABLE employee WITH DISTRIBUTION 
        TABLESAMPLE BERNOULLI(30) REPEATABLE(4196)
    上記のステートメントを実行すると、その間にデータが変更されていない限り、同じセットの統計が作成されます。
  23. 1.5 % のデータ・ページに関する索引統計と表統計を収集します。 表データ・ページだけがサンプルになり、索引ページはサンプルになりません。 この例では、表統計の収集に 1.5 % の表データ・ページが使用され、 索引統計にすべての索引ページが使用されます。
    RUNSTATS ON TABLE employee AND INDEXES ALL TABLESAMPLE SYSTEM(1.5)
  24. 1.5% のデータ・ページに関する表統計と、2.5% の索引ページに関する索引統計を収集します。 表データ・ページと索引ページの両方がサンプルになります。
    RUNSTATS ON TABLE employee AND INDEXES ALL TAMBLESAMPLE SYSTEM(1.5)
        INDEXSAMPLE SYSTEM(2.5)
  25. 統計ビューの統計情報を、すべての列について、分散統計なしで収集します。
    RUNSTATS ON VIEW product_sales_view
  26. 統計ビューの統計情報を、列 categorytype、および 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
  27. 行レベルのサンプリングを使用して、10 % の行に関する分散統計など、統計ビュー用の統計情報を収集します。
    RUNSTATS ON VIEW product_sales_view
     WITH DISTRIBUTION TABLESAMPLE BERNOULLI (10)
  28. データ・ページ・レベルのサンプリングを使用して、2.5% の行に関する分散統計など、統計ビュー用の統計情報を収集します。 さらに、同じサンプル・セットを反復使用することを指定します。 このコマンドが正常に実行されるためには、DB2 データベース・システムがデータ・ページ・サンプリングを 1 つ以上の表にプッシュする操作を正常に実行できるような照会でなければなりません。 それ以外の場合、エラー (SQL 20288N) が発行されます。
    RUNSTATS ON VIEW product_sales_view
     WITH DISTRIBUTION TABLESAMPLE SYSTEM (2.5)
  29. ビューの統計情報を収集し、指定のとおりにすべての列で分散統計を収集するための、統計プロファイルを登録します。
    RUNSTATS ON VIEW product_sales_view
     WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 50 NUM_QUANTILES 50
     SET PROFILE
  30. 以前に登録した統計プロファイルを変更します。 このコマンドはさらに、指定のとおりに統計を更新します。
    RUNSTATS ON VIEW salesdb.product_sales_view
     WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 25 NUM_QUANTILES 25
     UPDATE PROFILE

使用上の注意

  1. パーティション表にデタッチされたパーティションが存在する場合、デタッチされたデータ・パーティションでクリーンアップの必要なものにまだ属している索引キーは、統計においてキーの一部としてカウントされません。 それらのキーは、不可視であり表の一部ではなくなっているため、カウントされません。 そのような索引キーは、最終的に非同期の索引クリーンアップによって索引から除去されます。 その結果、非同期の索引クリーンアップを実行する前に収集された統計は誤ったものとなります。 非同期索引クリーンアップの完了前に RUNSTATS コマンドが発行された場合、不正確な統計情報を基に、索引再編成または索引クリーンアップに対する誤ったアラームが生成されることがしばしばあります。 非同期の索引クリーンアップの実行を開始すると、クリーンアップを必要とするデタッチされたデータ・パーティションにまだ属しているすべての索引キーが除去されるので、索引の再編成の必要がなくなることもあります。

    パーティション表の場合、非同期索引クリーンアップ完了後に RUNSTATS コマンドを発行することをお勧めします。 それは、デタッチされているデータ・パーティションの存在に関して正確な索引統計情報を生成するためです。 表の中にデタッチされているデータ・パーティションがあるかどうかを調べるには、 SYSCAT.DATAPARTITIONS カタログ・ビューの状況フィールドを確認して、値 L (論理的にデタッチ済み)、I (索引クリーンアップ)、または D (デタッチ済みで従属 MQT 付き) を探してください。

    RUNSTATS コマンドは、パーティション索引のすべての索引パーティションの統計を収集します。 パーティション索引の SYSSTAT.INDEXES ビュー内の統計は、索引パーティションを表します。ただし FIRSTKEYCARD、FIRST2KEYCARD、FIRST3KEYCARD、FIRST4KEYCARD、および FULLKEYCARD 統計は除きます。 これらの統計はカーディナリティーの見積もりで使用されるので、それらは索引全体に対するものであり、1 つの索引パーティションに対するものではありません。 分散統計 (頻度および変位値) は、パーティション索引では収集されませんが、RUNSTATS が表上で実行される場合は収集されます。 パーティション索引の先行列の統計は、非パーティション索引の先行列の統計ほど正確でない場合があります。

  2. RUNSTATS コマンドは、次のような場合に実行することが勧められています。
    • 表が大幅に変更されている場合 (例えば、多くの変更が行われている場合や、大量のデータが挿入または削除されている場合、あるいは、LOAD 時に統計オプションを指定しないで LOADが行われた場合など)。
    • 表が再編成されている場合 (REORGREDISTRIBUTE DATABASE PARTITION GROUP を使用)。
    • 行圧縮が実行された表の場合。
    • 新しい索引が作成されている場合
    • パフォーマンスが重要な意味を持つアプリケーションのバインドの前。
    • プリフェッチ・サイズが変更された場合。
    • 基礎表に実質的な変更が加えられたことにより、ビューによって戻される行が変更された統計ビューの場合。
    • STATISTICS オプションを指定した LOAD が実行された後には、RUNSTATS ユーティリティーを使用して、XML 列に関する統計情報を収集してください。 LOAD 実行時には、LOADSTATISTICS オプションを指定して実行された場合であっても、XML 列に関する統計情報が収集されることは決してありません。 RUNSTATS を使用することにより、XML 列についてのみの統計情報を収集する場合、XML 以外の列に関して LOAD またはそれ以前に実行された RUNSTATS ユーティリティーによって収集された既存の統計情報は、そのまま保持されます。 以前に一部の XML 列に関する統計情報が収集されていた場合、ある XML 列に関する統計情報が現在のコマンドでは収集されないのであれば、その XML 列に関して以前に収集された統計情報はドロップされます。 あるいは、その XML 列に関する統計が現在のコマンドで収集されるのであれば、置き換えられます。
  3. オプションの選択は、特定の表やアプリケーションに合わせて行う必要があります。 一般的なヒントとして、以下の点を考慮してください。
    • 重要な照会に使用される非常に重要な表、比較的小規模な表、またはあまり変化がなく、 システムそのものでの活動があまりない表には、可能な限り詳細に統計を収集する努力を費やす価値があります。
    • 統計を収集する時間が限られている場合、表が比較的大規模な場合、または表が頻繁に更新される場合には、述部で使用される列セットに限って 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 列を指定する他のどの節よりも優先されます。
  4. コマンドを実行した後は、以下の点に注意してください。
    • ロックを解除するには、COMMIT を発行する必要があります。
    • 新しいアクセス・プランを生成できるようにするには、ターゲット表を参照するパッケージを再バインドする必要があります。
    • 表で部分的にコマンドを実行すると、 コマンドが最後に実行されてからの表での活動の結果として、不整合が生じる可能性があります。 このような場合には、警告メッセージが戻されます。 表でだけ RUNSTATS が実行されると、表レベルの統計と索引レベルの統計に不整合が生じます。 例えば、ある表に関して索引レベルの統計を収集した後で、その表からかなりの数の行を削除してしまったとします。 このような場合に、その表でだけ RUNSTATS を発行すると、表のカーディナリティーが FIRSTKEYCARD よりも小さくなってしまう可能性があります。 これは不整合です。 これと同様に、作成した新しい索引で統計を収集した場合にも、表レベルの統計に不整合が生じることがあります。
  5. 表統計が要求された場合、RUNSTATS コマンドは、以前に収集された分散統計をドロップします。例えば、RUNSTATS ON TABLE または RUNSTATS ON TABLE … AND INDEXES ALL は、以前に収集された分散統計がドロップされる原因になります。 コマンドが索引でのみ実行される場合、以前に収集された分散統計は保持されます。 例えば、RUNSTATS ON TABLE … FOR INDEXES ALL を実行した場合、それ以前に収集された分散統計は保持されます。 RUNSTATS コマンドを XML 列のみに対して実行した場合、それ以前に収集された基本列統計および分散統計はそのまま保持されます。 以前に一部の XML 列に関する統計情報が収集されていた場合、ある XML 列に関する統計情報が現在のコマンドでは収集されないのであれば、その XML 列に関して以前に収集された統計情報はドロップされます。あるいは、その XML 列に関する統計が現在のコマンドで収集されるのであれば、置き換えられます。
  6. DB2 バージョン 9.7 フィックスパック 1 以降のリリースでは、XML 列に定義された XML データに対する索引で、分散統計が収集されます。表に対して、RUNSTATS コマンドを WITH DISTRIBUTION 節付きで実行する場合、タイプ XML の列に関する分散統計の収集は以下のようになります。
    • 分散統計は、XML 列で指定されている XML データに対する各索引に関して収集されます。
    • RUNSTATS コマンドでは、XML 列で定義された XML データに対する索引に関して分散統計を収集するため、分散統計と表統計の両方を収集する必要があります。XML 分散統計は表統計と共に保管されるので、分散統計を収集するためには表統計を収集しなければなりません。

      XML 分散統計を収集するために、索引節は必要ありません。索引節だけを指定しても、XML 分散統計は収集されません。

      XML 分散統計はデフォルトで、XML データに対する各索引に関して最大 250 の分位数を使用します。 XML 列に対する分散統計を収集する場合、ON COLUMNS 節または DEFAULT 節の NUM_QUANTILES パラメーターに値を指定することによって分位の最大数を変更することができます。

    • 分散統計は、タイプ VARCHAR、DOUBLE、TIMESTAMP、および DATE の XML データの索引に関して収集されます。タイプ VARCHAR HASHED の索引に関して、分散統計は収集されません。
    • 分散統計は、パーティション表で定義された XML データに対するパーティション索引に関しては収集されません。
  7. 範囲がクラスター化された表の場合、 範囲がクラスター化された表の範囲配列プロパティーを表す特殊なシステム生成索引がカタログ表内に存在します。 この種の表の統計を収集するときに、 統計収集の一部として表を組み込む場合は、 システム生成索引用の統計も収集されます。 この統計は、 基本データ表と同じページ数を持つ 2 レベルの索引として索引を表現し、 索引の順序に沿って完全に基本データをクラスター化することによって、 範囲検索の高速アクセスを反映することになっています。
  8. コマンド構文の On Dist Cols 節では、列 GROUPS に対する Frequency Option および Quantile Option のパラメーターの使用は、現在サポートされていません。 これらのオプションは、単一の列でのみサポートされています。
  9. DMS モードでの作業中に、計算できない 3 つのプリフェッチ統計があります。 索引カタログ内の索引統計で、以下の統計の値は -1 になります。
    • AVERAGE_SEQUENCE_FETCH_PAGES
    • AVERAGE_SEQUENCE_FETCH_GAP
    • AVERAGE_RANDOM_FETCH_PAGES
  10. プロファイルの設定またはプロファイルの更新のオプションを使用することによって、RUNSTATS コマンドで指定する表または統計ビューの統計プロファイルを設定または更新できます。 統計プロファイルは、STATISTICS_PROFILE システム・カタログ表の SYSCAT.TABLES 列に、可視ストリングのフォーマットで保管されます。 これが RUNSTATS コマンドに相当します。
  11. XML タイプの列に関する統計情報収集は、DB2_XML_RUNSTATS_PATHID_K および DB2_XML_RUNSTATS_PATHVALUE_K の 2 つの DB2 データベース・システム・レジストリー値によって制御されます。 これらの 2 つのパラメーターは、収集する度数の数を指定するという点において NUM_FREQVALUES パラメーターに似ています。 設定されていない場合、どちらのパラメーターについてもデフォルトとして 200 が使用されます。
  12. RUNSTATS は、開始時に、SYSTABLES に対して IX 表ロックを取得し、統計収集の対象となる表の行に対して U ロックを取得します。 U ロックのかかった行を含め、SYSTABLES からの読み取り操作は可能です。 また、U ロックのかかった行でない限り、書き込み操作も可能です。 しかし、RUNSTATS が IX ロックを取得しているため、別の読み取りプログラムまたは書き込みプログラムが SYSTABLES に対する S ロックを取得することはできません。
  13. 統計は、構造化タイプの列については収集されません。 それらが指定されている場合、そのデータ・タイプの列は無視されます。
  14. LOB または LONG データ・タイプの列では、AVGCOLLEN および NUMNULLS のみが収集されます。
  15. AVGCOLLEN は、列がデータベース・メモリーまたは一時表に保管される場合の、バイト単位の平均スペースを表します。 この値は、LOB または LONG データ・タイプのデータ記述子の長さを表します。ただし LOB データがデータ・ページ上でインライン化されている場合を除きます。
    注: ディスク上で列を保管するための平均スペース所要量は、この統計により表される値とは異なる場合があります。
  16. 索引統計の収集方法を変更するため、UNSAMPLED DETAILED オプションを使用できます。ただし、これを使用するのは、デフォルトと DETAILED では適正に機能しないことが明らかな場合に限るべきです。
  17. INDEXSAMPLE キーワードを使用するときは、単一のコマンド内で索引に対する索引サンプリング率を別々に指定することはできません。以下に例を示します。
    runstats on table orders and index o_ck indexsample system(5), 
       index o_ok indexsample system(10)
    この指定は無効です。必要な結果を得るには、以下の 2 つの RUNSTATS コマンドを使用できます。
    runstats on table orders and index o_ck indexsample system(5)
    runstats on table orders for index o_ok indexsample system(10)
  18. 表または表の索引に関する統計を最後に収集した後に表を変更している場合、RUNSTATS ON TABLE … AND INDEXES ALL を実行する必要があります。RUNSTATS ON TABLE … FOR INDEXES ALL を使用した場合、統計に不整合が生じる可能性があります。