- - PR -
Oracle10g 統計情報を取得した後に極端にレスポンス低下
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-03-22 11:29
Oracle10gでバッチプログラム(sqlplusで一連のsql実行)を実行している
のですが、夜間に実行すると極端にレスポンスが低下することが判明しました。 具体的にいうと正常時に10分程度で終了するSQLが1日以上終了していなかったり、 4件のinsertに10分程度もかかったりします。 調べてみると10gからデフォルトで夜間に自動統計収集が起動されていることが 原因のようでした。 自動統計収集をやめた状態でテストしたら通常通りのレスポンスで戻ってくること、 またテスト前に手動で統計収集をしたらやはりレスポンスが返ってこないことが 判明しました。 SQL文にヒント句を与えて実行すれば問題を回避できるようですが、そもそも 統計情報取得によってSQL文まで変更しなければならないものなのでしょうか? この件はOracleのサポートに問い合わせても納得いく回答がいただけません。 どなたかこのような経験をしている方がいらっしゃったらアドバイス願います。 |
|
投稿日時: 2006-03-22 13:15
Oracle10gの話ではないのですが、
8iから9iへのupgradeで似たようなことがありました。 8iでは問題ないパフォーマンスだったのが 9iになると時間がかかるSQLがありました。 8iから9iへ変更されたことによって、 コストベースオプティマイザのコスト見積もり方法が変わったため パフォーマンスが悪くなったことがあります。 その際には実行計画を取得し、 SQL文にヒント文を埋め込んで対応しました。 Oracleに限らずの話かもしれませんが、オプティマイザは、 パフォーマンスが一番良いものが選択されるとは限りません。 いろいろな組み合わせの中から実行計画を作成するので、 一番ではなく、パフォーマンスが良さそうなものが作成されます。 結果として一番良いものが作成される場合や、 index scanをして欲しいのにfull scanが選択される場合があります。 パフォーマンスが良いものの実行計画と 統計情報取得後の実行計画を比べてみたらどうでしょうか。 |
|
投稿日時: 2006-03-22 15:32
takashiさん、回答ありがとうございます。
統計取得を行うと実行計画もかなり変わっています。 それによって応答速度が違ってしまうのはわかるのですが、10分で完了するsqlが まる1日かかっても終了しないようになるのは製品としてあまりにもお粗末なような 気がして仕方ありません。 どこのデータベースもこんな感じなのでしょうか。。 |
1