スキーマ統計情報の収集

スキーマ統計情報を収集と対象リストを抽出する方法
GATHER_SCHEMA_STATS パッケージには、スキーマ単位 の統計の収集とリスト取得の 2つの機能*1がある。

統計情報の収集 (DBMS_STATS) に戻る。

スキーマ統計情報の収集

スキーマ全体にわたり、OPTIONS に指定した方法で統計情報を収集する。

基本的なパラメータ

DBMS_STATS.GATHER_SCHEMA_STATS (
	 OWNNAME          => 'スキーマ'
	,OPTIONS          => 'オプション'
	,ESTIMATE_PERCENT => 'サンプルレート'
	,BLOCK_SAMPLE     => 'サンプルレート(block)'
	,DEGREE           => '並列度'
	,GRANULARITY      => 'パーティション表オプション'
	,CASCADE          => 'インデックス統計 有無'
	, 以下 略
) ;
BEGIN
	DBMS_STATS.GATHER_SCHEMA_STATS (
		 OWNNAME => 'RIVUS'
		,OPTIONS => 'GATHER'
	) ;
END;
/

options には 以下の指定が可能

'GATHER'
すべてのオブジェクトの統計情報を取得する。
'GATHER AUTO'
Oracle が 必要と判断したオブジェクトの統計情報を取得する。
'GATHER STALE'
DBA_TAB_MODIFICATIONS のリストの内容から判別して取得する(10%の変動があると対象になるらしい:未検証)。
'GATHER_EMPTY'
統計情報が存在しないオブジェクトの統計情報を取得する。

統計情報に関するリストの取得

統計情報に関する以下のリストを取得する (^^; マニュアルに記載がないので正しいかは不明

  • 統計情報が存在しないリスト
  • GATHER AUTO' の対象となるリスト
  • DBA_TAB_MODIFICATIONS による失効と判断されたリスト
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
	vMsg	VARCHAR(250);
	vList	DBMS_STATS.OBJECTTAB;
BEGIN
	DBMS_STATS.GATHER_SCHEMA_STATS(
		OWNNAME => 'TEST'
		,OPTIONS => 'LIST EMPTY'
		,OBJLIST => vList
	);
        FOR i IN 1..vList.COUNT LOOP
		vMsg := vList(i).OWNNAME;
		vMsg := vMsg || ',' || vList(i).OBJTYPE;
		vMsg := vMsg || ',' || vList(i).OBJNAME;
		vMsg := vMsg || ',' || vList(i).PARTNAME;
		vMsg := vMsg || ',' || vList(i).SUBPARTNAME;
		-- vMsg := vMsg || ',' || vList(i).CONFIDENCE;
		-- (パッケージ定義に未使用項目とある)
		DBMS_OUTPUT.PUT_LINE(vMsg);
	END LOOP;
END;
/

options には 以下の指定が可能

'LIST EMPTY'
統計情報が存在しないリストを OBJLIST に取得する。
'LIST AUTO'
'GATHER AUTO' の対象となるリストを OBJLIST に取得する。
'LIST STALE'
DBA_TAB_MODIFICATIONS による失効と判断されたリストを OBJLIST に取得する。


スキーマ統計 関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター

*1 LISTの機能についてはマニュアルにOBJLISTの記述が不明確であるためパッケージ定義ソースを参照した。