■実行計画確認
●コストベースかルールベースかの判断方法
set linesize 1000
set pagesize 100
column table_name format a20
SELECT table_name, num_rows, blocks, avg_row_len,
to_char(last_analyzed, 'MM/DD/YYYY HH24:MI:SS')
FROM dba_tables;
→情報が空のテーブルはルールベースである。
→last_analyzedにて前回実行時の時間が確認可能。
【カラム】
NUM_ROWS:
行数
BLOCKS:
最高水位標(HWM)までのブロックの数
EMPTY_BLOCKS:
表に割当てられているが未使用の(HWMよりも上にある)ブロックの数
AVG_SPACE:
各データ・ブロックにおける使用可能な空き領域サイズの平均(バイト単位)
CHAIN_CNT:
行連鎖または行移行が発生している行数
AVG_ROW_LEN:
行の平均サイズ(バイト単位)
AVG_SPACE_FREELIST_BLOCKS:
空きリスト(フリーリスト)につながっているブロックの空き領域サイズの平均(バイト単位)
NUM_FREELIST_BLOCKS:
空きリスト(フリーリスト)につながっているブロックの数
SAMPLE_SIZE:
統計の収集をESTIMATE指定で行った時のサンプル・サイズ
LAST_ANALYZED:
最新の統計収集日時
●ルールベースに戻す
ANALYZE TABLE 表名 DELETE STATISTICS;
●初期設定値確認
show parameter optimizer_mode;
・RULE:
オプティマイザはルールベースを採用する
・CHOOSE(デフォルト値):
統計情報が使用可能か(ANALYZEが実行されているか)どうかを判断し、
統計情報が使用できればコストベース、そうでない場合はルールベースを採用する
・ALL_ROWS:
サーバ内リソースの最小使用とスループットの最小化を行う
・FIRST_ROWS:
応答時間が最短となるよう検索を行う。検索結果の1行目に対する応答時間を最適化する
■Analyzeの実行
ANALYZE TABLE <対象テーブル名> <オプション>;
◎オプション
・COMPUTE STATISTICS
表全体を対象にアナライズを実行する。
1回のresadコールで読み込まれるデータ量は
「db_block_size×db_file_multiblock_read_count」
・ESTIMATE STATISTICS
対象となる表の中からアナライズに使用する行をサンプリング。
行抽出動作はシングルブロック単位。
サンプリング率の指定が必要。
→50%以上だとCOMPUTE STATISTICSと同じ動作。
■インポート、エクスポート時の統計情報の扱い
→STATISTICSオプションにて統計情報の移行方法が変更可能。
<デフォルト>
EXP:ESTIMATE
IMP:ALWAYS
→コピーしたくない場合は「NONE」に設定。
0 件のコメント:
コメントを投稿