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「古い地図を描き直す 統計」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、プラチナ以上のプランで遊べます。

Oracle Database の管理コマンド一覧(DBA)へ戻る