システム・カタログ内にある、表やそれに関連した索引の特性または統計ビューの特性に関する統計情報を更新します。 これらの特性には、レコード数、ページ数、および平均レコード長が含まれます。 オプティマイザーは、データへのアクセス・パスを判別するとき、 これらの統計を使用します。
表の場合、表で数多くの更新が行われたとき、または表の再編成後に、RUNSTATS コマンドを呼び出します。 統計ビューの場合、基礎表に対する変更がそのビューによって返される行に対してかなりの影響を及ぼしている場合に、RUNSTATS コマンドを呼び出します。 そのビューは、それ以前に ALTER VIEW ステートメントを使用して、照会最適化で使用できる状態になっていなければなりません。
RUNSTATS コマンドは、db2nodes.cfg ファイル内のいずれのデータベース・パーティションからでも発行できます。 この API は、カタログ・データベース・パーティション上のカタログを更新するために使用できます。
表の場合、このコマンドは、呼び出し元のデータベース・パーティションの表の統計を収集します。 表がそのデータベース・パーティションに存在しない場合、 データベース・パーティション・グループの最初のデータベース・パーティションが選択されます。
ビューの場合、このコマンドは、関連するすべてのデータベース・パーティションに含まれる表のデータを使用して、統計情報を収集します。
このコマンドを使用する際には、接続内に存在する宣言された一時表のいずれにおいても明示特権は必要ありません。
データベース
>>-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-+--)------------'
RUNSTATS ON tablemyschema.mytable UNSET PROFILE
なお、On Cols 節でこれが指定された場合は、特定の列が WITH DISTRIBUTION 節の一部として選択されない限り、すべての列で基本列統計だけが収集されます。 WITH DISTRIBUTION 節の一部として指定された列では、基本統計も分散統計も収集されます。
WITH DISTRIBUTION ON ALL COLUMNS が指定されている場合は、収集が行えるすべての列で基本統計と分散統計の両方が収集されます。 On Cols 節での指定はすべて重複になるため、必要ありません。
列および列グループは括弧でくくったコンマ区切りリストとして指定します。
この節は、On Cols 節と On Dist Cols 節の中で使用できます。 列のグループに関する分散統計の収集は、現在サポートされていません。
列グループの中に XML タイプの列が指定されている場合は、そのグループについて重複のない異なる値を収集するため、XML タイプのそれらの列は無視されます。 しかし、その列グループ中の XML タイプ列について、XML 列の基本統計情報は収集されます。
列のグループに関する分散統計の収集は、現在サポートされていません。 WITH DISTRIBUTION ON COLUMNS 節で列のグループが指定された場合は、分散統計は収集されません。
DB2 V9.7 フィックスパック 1 以降のリリースでは、 XML データに対する各索引の分散統計は、デフォルトで最大 250 の分位数を使用します。このデフォルトは、ON COLUMNS 節または DEFAULT 節の NUM_QUANTILES パラメーターを指定して変更することができます。 XML 分散統計を収集している間、num_quantiles データベース構成パラメーターは無視されます。
多くの挿入、更新、または削除が同時に実行される表の場合、ALLOW WRITE ACCESS オプションは勧められていません。 RUNSTATS コマンドは、まず表統計を実行した後、索引統計を実行します。 表および索引の統計情報を収集している間に表の状態が変化した場合、不整合が発生することがあります。 照会の最適化のために最新の統計を収集することは重要ですが、整合性のある統計を収集することも重要です。 したがって統計情報の収集は、挿入、更新、または削除の操作が最小になる時間に実行してください。
統計ビューでは、SYSTEM サンプリングは、ビュー定義で参照される単一の基本表にのみ適用できます。ビューに複数の表が含まれている場合、統計ビュー内のすべての表から、ある単一の表をそのビュー内で使用されている他の表の主キーまたはユニーク索引列すべてによって結合されているものとして特定できるのであれば、SYSTEM サンプリングが可能です。統計ビューがこれらの条件を満たしていない場合、BERNOULLI サンプリングが代わりに使用され、警告が戻されます。
パーティション・データベースでは、RUNSTATS コマンドが表に対して使用された場合、1 つのデータベース・パーティションでしか統計を収集できません。 RUNSTATS コマンドが実行されたデータベース・パーティションに表のパーティションがある場合、コマンドは、そのデータベース・パーティションで実行されます。 それ以外の場合は、表がパーティションに分けられているデータベース・パーティション・グループの最初のデータベース・パーティションで実行されます。
RUNSTATS ON TABLE employee
RUNSTATS ON TABLE employee
WITH DISTRIBUTION ON COLUMNS (empid, empname)
RUNSTATS ON TABLE employee WITH DISTRIBUTION DEFAULT
NUM_FREQVALUES 50
RUNSTATS ON TABLE employee ON ALL COLUMNS AND COLUMNS ((JOB, WORKDEPT, SEX))
WITH DISTRIBUTION
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
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
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
RUNSTATS ON TABLE T1 ON COLUMNS (c1, (c2, c3),
(c2, c4), c5)
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
RUNSTATS ON TABLE employee WITH DISTRIBUTION
DEFAULT NUM_FREQVALUES 30 UPDATE PROFILE
RUNSTATS ON TABLE employee WITH DISTRIBUTION
DEFAULT NUM_FREQVALUES 30 UPDATE PROFILE ONLY
RUNSTATS ON TABLE employee
ON COLUMNS (empl_address, (empl_title, empl_salary))
UPDATE PROFILE
RUNSTATS ON TABLE employee
ON COLUMNS (empl_address, (empl_title, empl_salary))
UPDATE PROFILE ONLY
RUNSTATS ON TABLE employee USE PROFILE
SELECT STATISTICS_PROFILE FROM SYSCAT.TABLES WHERE TABNAME =
'EMPLOYEE'
RUNSTATS ON TABLE employee WITH DISTRIBUTION
TABLESAMPLE BERNOULLI(30)
RUNSTATS ON TABLE employee WITH DISTRIBUTION
TABLESAMPLE BERNOULLI(30) REPEATABLE(4196)
上記のステートメントを実行すると、その間にデータが変更されていない限り、同じセットの統計が作成されます。RUNSTATS ON TABLE employee AND INDEXES ALL TABLESAMPLE SYSTEM(1.5)
RUNSTATS ON TABLE employee AND INDEXES ALL TAMBLESAMPLE SYSTEM(1.5)
INDEXSAMPLE SYSTEM(2.5)
RUNSTATS ON VIEW product_sales_view
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
RUNSTATS ON VIEW product_sales_view
WITH DISTRIBUTION TABLESAMPLE BERNOULLI (10)
RUNSTATS ON VIEW product_sales_view
WITH DISTRIBUTION TABLESAMPLE SYSTEM (2.5)
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 コマンドを発行することをお勧めします。 それは、デタッチされているデータ・パーティションの存在に関して正確な索引統計情報を生成するためです。 表の中にデタッチされているデータ・パーティションがあるかどうかを調べるには、 SYSCAT.DATAPARTITIONS カタログ・ビューの状況フィールドを確認して、値 L (論理的にデタッチ済み)、I (索引クリーンアップ)、または D (デタッチ済みで従属 MQT 付き) を探してください。
RUNSTATS コマンドは、パーティション索引のすべての索引パーティションの統計を収集します。 パーティション索引の SYSSTAT.INDEXES ビュー内の統計は、索引パーティションを表します。ただし FIRSTKEYCARD、FIRST2KEYCARD、FIRST3KEYCARD、FIRST4KEYCARD、および FULLKEYCARD 統計は除きます。 これらの統計はカーディナリティーの見積もりで使用されるので、それらは索引全体に対するものであり、1 つの索引パーティションに対するものではありません。 分散統計 (頻度および変位値) は、パーティション索引では収集されませんが、RUNSTATS が表上で実行される場合は収集されます。 パーティション索引の先行列の統計は、非パーティション索引の先行列の統計ほど正確でない場合があります。
XML 分散統計を収集するために、索引節は必要ありません。索引節だけを指定しても、XML 分散統計は収集されません。
XML 分散統計はデフォルトで、XML データに対する各索引に関して最大 250 の分位数を使用します。 XML 列に対する分散統計を収集する場合、ON COLUMNS 節または DEFAULT 節の NUM_QUANTILES パラメーターに値を指定することによって分位の最大数を変更することができます。
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)