2010年6月3日木曜日

Oracle Optimizer の統計情報

作成したプログラムのレスポンスが悪くなってきた。
データベースのレコードが増えているのが原因だ。
そもそも作りが良くないと云えばそれまでだが、稼働しているシステムだ。
手っ取り早く手が打てないだろうか。


使用しているデータベースは今時古いがOracle 8iだ。設定はほとんどデフォルトから変えていないはず。
だが知らない間に変わっていると云うこともある。
Optimizerの統計情報が定期的に取得されているか確認する。


テーブル毎に統計情報の取得時刻を得るのはSQLで出来る。

SELECT column_name, TO_CHAR(last_analyzed, 'YYYY-MM-DD HH24:MI:SS')
FROM all_tab_columns
WHERE owner = 'ユーザー名'
AND table_name = 'テーブル名'

もし統計情報が採れていないようなら(そんなことは無いはずだが)、ANALYZE文を実行してみる。

-- 完全な統計情報取得
ANALYZE TABLE テーブル名 COMPUTE STATISTICS
-- 完全な統計情報取得(全インデックス対象)
ANALYZE TABLE テーブル名 COMPUTE STATISTICS FOR ALL INDEXES;
-- 概算の統計情報取得(全データのn%分)
ANALYZE TABLE テーブル名 ESTIMATE STATISTICS SAMPLE n PERCENT;

多分、統計情報は定期的に採れていると思うので、あとはツールを使いながらプログラムを見直す。
個別のSQLを見直したところで、どうにもなりそうも無いなら、データベース自体の設定を見直す。
無理なら、やはりプログラムを大幅に見直すか、諦めるしかなさそうだ。



基礎から学ぶOracle SQLチューニング (DB Magazine SELECTION)
久しぶりにこういった勉強するのも必要そうだ。まるで覚えていない、思い出せない。

0 件のコメント:

コメントを投稿