とっても ORACLE

ANALYZEコマンドとは


Oracleのオプティマイザにはコストベースとルールベースがあり、コストベースの場合、ANALYZEコマンドにより採取した統計情報を基に実行計画を立てる。コストベースオプティマイザを使用するためには、INIT.ORAの初期化パラメータのOPTIMIZER_MODEをCHOOSE(デフォルト)にセットし、対象となる表に対してANALYZEを実行する。ANALYZEには、すべてのデータを読み取る方法と一部のデータをサンプリングする方法があり、データサイズが大きく全データを調べていたのでは時間がかかりすぎる場合には、5%程度でサンプリングしたりする。

■表を調べる。
○ 表の全データを読み取り統計情報を収集する
ANALYZE TABLE 表名 COMPUTE STATISTICS;
○ 5%のデータをサンプリングし統計情報を収集する
ANALYZE TABLE 表名 ESTIMATE STATISTICS SAMPLE 5 PERCENT;
○ 表の統計情報を削除する
ANALYZE TABLE 表名 DELETE STATISTICS;

またANALYZEコマンドにより連鎖行が発生していないかを調べることもできる。
○連鎖行を調べる
(例)
SQL> CONNECT scott/tiger
接続されました。
SQL> @C:\Oracle\Ora81\RDBMS\ADMIN\UTLCHAIN

表が作成されました。

SQL> ANALYZE TABLE emp LIST CHAINED ROWS;

表が分析されました。

SQL> SELECT * FROM CHAINED_ROWS
  2  WHERE table_name = 'EMP';



またDBA_TABLESビューのCHAIN_CNT列にて連鎖、移行行の情報が確認できる。

■インデックスを調べる
ANALYZE INDEX インデックス名 VALIDATE STRUCTURE;
索引が分析されました。

SELECT (del_lf_rows_len/lf_rows_len)*100 AS index_usage FROM index_stats;
index_usage
------------
     24

削除行の割合が現在の索引エントリ数の20%を超える場合は、索引の再構築を検討する。

SELECT HEIGHT,         -- ブランチ・ノードの階層の高さ
BLOCKS, -- 全ブロック数
LF_ROWS, -- リーフ行数
LF_BLKS, -- リーフ・ブロック数
BR_ROWS, -- ブランチ行数
BR_BLKS -- ブランチ・ブロック数
FROM INDEX_STATS ;


ブランチ・ノードの階層が高くなっている場合(4以上)も、索引の再構築を検討する。
削除されたリーフ行(DEL_LF_ROWS)が多い場合も注意。

いつ統計情報が取得されたかを確認するには、USER_TABLESのLAST_ANALYZEDカラムを見る。
※索引の再構築は、ALTER INDEX インデックス名 REBUILD


オラクル Oracle 購入オラクル製品のお見積りご購入はこちら
ユーザー登録すると、オンライン特別割引価格で見積できます。


Copyright(c) 1999-2018 ITNAVI.com サイト運営者情報