oracleで1度問い合わせたSQLが2回目からは結果を返して来ません
oracleデータベースで,1度目に問い合わせた場合は数秒で結果が返ってくるのですが、直後に全く同じSQLで問い合わせを行うと、途端に結果を返してくれなくなってしまいます。
SQLや実行計画を記載出来ないのが申し訳ないのですが、以下のような状況です。
- 10個程度テーブルを外部結合
- 多いテーブルでは70万レコード、他は数万レコード
- 各テーブルはanalyzeを施した直後
- 実行計画のコストは10000ほど
調べたところ[alter system flush shared_pool]
で実行計画のキャッシュを消せるとあったため試したところ、その直後はまた結果がすぐ返ってきました。
現在は開発段階なので都度flushしているのですが、それ以外の方法で改善する方法はありませんでしょうか。やはりSQLチューニングが必要でしょうか。
環境については以下のような状況です。
- 仮想マシン上のWindowsサーバ
- Oracle 11.2
- 仮装マシンメモリ8GB
- その他詳しい設定などは不明(調べ方/注意点がわかりません)
拙い質問ですがよろしくお願い致します.
追記
書き忘れておりましたが、仮想マシンのタスクマネージャを見ていると1回目の結果が返ってくる際にはCPU使用率が上がったりするのですが、2回目以降はCPU使用率が動いているように見えませんでした。
(これは推測が多分に含まれますが。)
なお、EnterpriseManagerを監視する権限はありません。(状況を都度聞きに行くことは可能です。)
追記2
1回目の問い合わせと2回目の問い合わせのSQLトレースを取得したところ、
以下のような状態でした。
これは2回目にFetchでつまづいてしまっているということでしょうか。
call count cpu elapsed disk query current rows
Parse 1 0.57 0.58 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 1.18 1.20 0 249222 0 61
total 3 1.76 1.78 0 249222 0 61
2回目の問い合わせ後のトレース
call count cpu elapsed disk query current rows
Parse 2 1.20 1.20 0 0 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 2 2723.88 3392.82 45574362 237788264 0 0
total 6 2725.08 3394.02 45574362 237788264 0 0