GATHER_TABLE_STATSプロシージャは、テーブルと列の統計情報を収集するために使用されます。
構文
DBMS_STATS.GATHER_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
estimate_percent NUMBER DEFAULT AUTO_SAMPLE_SIZE,
block_sample BOOLEAN DEFAULT FALSE,
method_opt VARCHAR2 DEFAULT DEFAULT_METHOD_OPT,
degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')),
granularity VARCHAR2 DEFAULT DEFAULT_GRANULARITY,
cascade BOOLEAN DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
stattype VARCHAR2 DEFAULT 'DATA',
force BOOLEAN DEFAULT FALSE,
hist_est_percent NUMBER DEFAULT AUTO_SAMPLE_SIZE,
hist_block_sample BOOLEAN DEFAULT NULL
);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| ownname | 分析対象のテーブルが属するスキーマ。 |
| tabname | テーブル名。 |
| partname | パーティション名。 |
| estimate_percent | 推定される行の割合。有効範囲は [0.000001,100]。 |
| block_sample | データベースがランダムブロックサンプリング (TRUE) を使用するか、ランダム行サンプリング (FALSE) を使用するかを決定します。デフォルト値は FALSE です。ランダムブロックサンプリングの方が効率は高いですが、データがディスク上にランダムに配置されていない場合、サンプル値に相関性が生じる可能性があります。 |
| method_opt | グローバル、スキーマ、データベース、または辞書レベルで設定する場合、FOR ALL 構文のみを使用できます。それ以外の場合、method_opt は以下のオプションのいずれか、またはその組み合わせに限定されます:
|
| degree | パラレル度。デフォルト値は NULL です。NULL は CREATE TABLE または ALTER TABLE ステートメント内の DEGREE 句で指定されたテーブルのデフォルト値を使用することを意味します。DEGREE=>NULL、DEGREE=>n を使用する場合、オブジェクトのサイズがパラレル実行を保証しない場合、DBMS_STATS はシリアル実行を使用する可能性があります。 |
| granularity | 収集する統計情報の粒度(テーブルがパーティション化されている場合にのみ適用されます)。
|
| cascade | テーブルおよび列の統計情報に加えて、インデックスに関する統計情報も収集します。これは、スキーマ内の各インデックスに対してGATHER_INDEX_STATSプロシージャを実行することと同等です。 |
| no_invalidate | 統計情報を収集する際にPlan Cacheをフラッシュするかどうか。TRUEに設定すると、統計情報を収集する際にPlan Cacheをフラッシュしません。 |
| stattype | 現在の統計情報が格納される場所。 |
| force | ロック状態を無視して強制的に統計情報を収集するかどうか。デフォルトはFALSEです。TRUEに設定すると、統計情報がロックされていても収集されます。 |
| hist_est_percent | ヒストグラムのサンプリング率を指定します。 |
| hist_block_sample | ヒストグラムのサンプリング方法を指定します。 |
異常時の処理
| エラーコード | 説明 |
|---|---|
| HY000 |
|
使用方法
このプロシージャを呼び出すには、テーブルの所有者である必要があります。SYS が所有するオブジェクトを使用する場合は、テーブルの所有者であるか、SYSDBA 権限を持っている必要があります。
例
ユーザー testUser01 の tbl1 テーブルの統計情報を収集します。
obclient> CALL DBMS_STATS.GATHER_TABLE_STATS ('testUser01', 'tbl1', method_opt=>'FOR ALL COLUMNS SIZE
5', granularity=>'ALL', degree=>4, no_invalidate=>FALSE);
Query OK, 0 rows affected