DBMS_STATS の使い方
オプティマイザ統計を集める(Oracle)
書き方
EXEC DBMS_STATS.GATHER_TABLE_STATS('持ち主', '表');
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('持ち主');
EXEC DBMS_STATS.GATHER_INDEX_STATS('持ち主', '索引');
SELECT table_name, num_rows, last_analyzed, stale_stats FROM dba_tab_statistics WHERE owner = '持ち主';オプティマイザは統計(行数・列の値の種類・索引の形)から Rows と Cost を見積もります。データが大きく変わったのに統計が古いままだと、見積もりが外れて遅い道を選びます。DBA_TAB_STATISTICS の STALE_STATS が YES なら古い印(10% を超えて変わった)。集め直すと NUM_ROWS と LAST_ANALYZED が新しくなります。統計の一度も無い表は、実行のたびに動的サンプリング(dynamic sampling)で見積もります。
例
EXEC DBMS_STATS.GATHER_TABLE_STATS('APP', 'ORDERS');
EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => 'APP', tabname => 'ORDERS', cascade => TRUE);実際に打って練習する
Oracle DBA コースの Lv46「古い地図を描き直す 統計」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
すべてのレベルが、プラチナ以上のプランで遊べます。