« TIPS : Oracleのimpdp/expdpで、特定テーブルのみ取込/除外したい場合の対処方法 | トップページ | 金箔は飲んで/食べても害はないか? »

2011年12月25日 (日)

TIPS : Oracleの統計情報ハンドリング関係。

先回の記事で、後回しにした統計情報のハンドリンク関連についての備忘メモ。

impdpを使用する際に、「CONTENT=METADATA_ONLY」を使用すると統計情報がロックされます。(仕様)

このままだと、データ更新によりデータ分布が変わった場合、最適な検索パスが使用されない可能性が出てきます。

昔は、オプティマイザが怪しいというか信頼できなかったので、あえて統計情報に頼らず、統計ロック+

ヒント句なんかを使用している場合が多かったのですが、最近のバージョンはかなり頭がいいです。

なので、統計情報のロックは、解除するのがデフォルトかな。

begin
  DBMS_STATS.UNLOCK_SCHEMA_STATS (
     ownname => user);
end;
/

上記SQLを「unlock_stats.sql」とでも名前をつけて保存し、ロックを解除したいスキーマユーザでログオンし、

実行すると、すべてのテーブルの統計情報のロックが外れます。

「とはいえやっぱり統計をロックしたいテーブルがある」場合は、上記を行った後に、改めて個別にロックしましょう。

以下のスクリプトが、参考になるかと。

declare 
   cursor TAB_CURSOR is 
         select Table_Name 
           from USER_TAB_STATISTICS 
          where stattype_locked is not null
          order by 1;

   Lv_Table_Name   USER_TAB_STATISTICS.Table_Name%TYPE; 

begin 

   open TAB_CURSOR; 
   loop 
      fetch TAB_CURSOR into Lv_Table_Name;
      exit when TAB_CURSOR%NOTFOUND; 

         DBMS_STATS.UNLOCK_TABLE_STATS(
            ownname => user,
            tabname => Lv_Table_Name);

         DBMS_STATS.GATHER_TABLE_STATS(
            ownname => user,
            tabname => Lv_Table_Name,
            method_opt => 'FOR ALL INDEXED',
            cascade => TRUE);

         DBMS_STATS.LOCK_TABLE_STATS(
            ownname => user,
            tabname => Lv_Table_Name);

   end loop; 
   close TAB_CURSOR; 

end; 
/

上記スクリプトは、ロックされているテーブルを対象に、

1.ロック解除「DBMS_STATS.UNLOCK_TABLE_STATS」

2.統計取得「DBMS_STATS.GATHER_TABLE_STATS」

3.再ロック「DBMS_STATS.LOCK_TABLE_STATS」

するスクリプトです。単純ですね。

なのでロックしたかったら、「DBMS_STATS.LOCK_TABLE_STATS」の部分を参考に。

あと、統計取得のオプションは一例なので、詳しくはマニュアルを必ず参照のこと。

なお、これを使ってDBが遅くなった、と言われても困るので、その点は自己責任で、よろしく。

|

« TIPS : Oracleのimpdp/expdpで、特定テーブルのみ取込/除外したい場合の対処方法 | トップページ | 金箔は飲んで/食べても害はないか? »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/538346/53568170

この記事へのトラックバック一覧です: TIPS : Oracleの統計情報ハンドリング関係。:

« TIPS : Oracleのimpdp/expdpで、特定テーブルのみ取込/除外したい場合の対処方法 | トップページ | 金箔は飲んで/食べても害はないか? »