作成したプログラムのレスポンスが悪くなってきた。
データベースのレコードが増えているのが原因だ。
そもそも作りが良くないと云えばそれまでだが、稼働しているシステムだ。
手っ取り早く手が打てないだろうか。
使用しているデータベースは今時古いが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を見直したところで、どうにもなりそうも無いなら、データベース自体の設定を見直す。
無理なら、やはりプログラムを大幅に見直すか、諦めるしかなさそうだ。
0 件のコメント:
コメントを投稿