2008年1月15日火曜日

DBMS_STATS.GATHER_SCHEMA_STATS

DBMS_STATS.GATHER_SCHEMA_STATS

  • 統計情報収集パッケージ。
  • スキーマ単位での統計情報取得とリスト取得の2つの取得が可能。
  • テーブル、インデックスが非常に多い場合など、「Analyze」コマンドでの統計情報取得が困難な場合に、スキーマ単位で統計情報を取得できる。
  • パラメータ指定時は「パラメータ => '設定値'」の形式で表記。すべてのパラメータについて設定を入力する場合は「設定値」のみで表記。

【スキーマ単位統計情報取得】
exec DBMS_STATS.GATHER_SCHEMA_STATS(
OWNNAME => '分析するスキーマ('NULL'は現行スキーマ)',
ESTIMATE_PERCENT => 'サンプルレート('NULL'は計算)',
BLOCK_SAMPLE => 'ランダンムブロックサンプリングを使用するかどうか',
METHOD_OPT =>
DEGREE => '並列度',
GRANULARITY => '収集する統計情報の細分化',
CASCADE => 'インデックス統計 有無',
STATTAB => '現在の統計情報の保存場所を示すユーザ統計情報の識別子',
STATID => 'STATTAB内の統計情報を関連付ける識別子',
OPTIONS => 'オプション',
OBJLIST => '失効または空と判断されたオブジェクトのリストを戻す',
STAOWN => 'STATTABを含んだスキーマ',
NO_INVALIDATE => '依存カーソルの無効の有無'
FORCE => 'ロックされている場合でも統計情報を収集'
 );

◎optionの種類
'GATHER'
 すべてのオブジェクト統計情報取得。
'GATHER STALE'
 DBA_TAB_MODIFICATIONSのリストから判断。
 表にMONITORING属性が指定されていて、なおかつ最後の統計情報取得後に10%以上の更新されたもの。
 (MONITORING属性がついていないものと、更新が10%以下のものは対象外)
'GATHER AUTO'
 oracleが必要と判断したオブジェクト統計情報を取得。
 新しい統計情報を必要とするオブジェクトを暗黙的に判別し、統計情報を収集する。
 ’GATHER STALE’に加え、MONITORING属性に関係なく統計情報が取得されていない表が対象。
 ”AUTO”がしてされた場合に有効になる追加パラメータは
"ownname","stattab","statid","objilist","statown"のみ。

'GATHER_EMPTY'
 統計情報が存在しないオブジェクトの統計情報を取得。

◎MONITORING属性の確認
 select table_name , monitoring from user_tables;
 →「monitoring」が”YES”になっているもの。

◎統計情報格納テーブル
select * from aux_stats$;

◎oracle10gからのデフォルト設定について
  • 10gからはデフォルト設定にて統計情報を取得する。
  • 取得タイミングは月~金(22時~8時)、土日(土曜0時~日曜24時)。
  • 上記時間帯でスケジューラ・ジョブのウィンドウがオープンしている。
  • 統計のロックを行うと統計情報は更新されない。
  • 時計情報が取得されていないもの、前回取得から10%以上行が更新されたものが対象。
  • 実行されるプログラムは「dbms.stats.gather_database_stats_job_proc」(「dbms_stats.gather_databse_stats」に’gather auto’オプションをしていした動きと同等)

◎統計情報のロック
 スキーマとテーブル単位で設定が可能。
 <ロック>
 DBMS_STAT.LOCK_SHEMA_STATS ( ownname <スキーマ名>);
 DBMS_STAT.LOCK_TABLE_STATS ( ownname <スキーマ名>, tabname );
 <ロック解除>
 DBMS_STAT.UNLOCK_SHEMA_STATS ( ownname <スキーマ名>);
 DBMS_STAT.UNLOCK_TABLE_STATS ( ownname <スキーマ名>, tabname );

例)
DBMS_STATS.GATHER_SCHEMA_STATS (
NULL, →現行のスキーマの統計情報を取得。
NULL, →oracleにてサンプリング率を計算。
FALSE, ランダム行サンプリングの実施。
'AUTO', →列のデータ配分とワークロードに基づいて、ヒストグラムを収集する列を判断。
DBMS_STATS.DEFAULT_DEGREE, →初期化パラメータに基づく並列度を使用。
'DEFAULT', →グローバル、パーティションレベルで統計所法を収集。
TRUE, →索引についても統計情報を取得。
NULL, →統計情報の保存場所。
NULL, →統計情報を関連付ける識別子。
'GATHER AUTO', →必要な統計情報をすべて自動的に集計する。(GATHER AUTOが指定された場合、有効な追加パラメータはownname、stattab、statid、objlistおよびstatownのみ)
NULL,
TRUE,
FALSE
);

0 件のコメント: