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