atsukanrockのブログ

Microsoft系技術を中心にぼちぼち更新します

Oracleの統計情報を手動で収集する

はじめに

Oracle 10g以降では、「自動統計収集」という機能がデフォルトで有効になっている。これは、Oracleが主に夜間、統計情報を自動的に収集するという機能だが、本エントリでは、自動統計収集と同じ処理を、手動で実行する方法について記述する。

手順

以下の手順により、指定したテーブルの統計情報を、Oracleが自動統計収集で行うのと同じ方法で、再収集できる。なお同時に、テーブルに従属するインデックスの統計情報も、同様に再収集される。

1. SQL*PlusをSYSで起動
2. 以下のコマンドを実行
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => '<スキーマ名>', TABNAME => '<テーブル名>', ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE)

補足

上記手順では、DBMS_STATSパッケージのGATHER_TABLE_STATSプロシージャを呼び出しているが、DBMS_STATSパッケージには、他にも統計情報を操作するプロシージャやファンクションが数多く含まれている。ここで、その一部を挙げる。

  • GATHER_SCHEMA_STATS‥スキーマ単位で統計情報収集
  • GATHER_INDEX_STATS‥インデックス単位で統計情報収集
  • DELETE_TABLE_STATS‥指定したテーブルの、既に収集されている統計情報を削除
  • LOCK_TABLE_STATS‥指定したテーブルを、自動オプティマイザ統計収集の対象から除外
  • UNLOCK_TABLE_STATS‥LOCK_TABLE_STATSの逆