0

コンテキスト: Grails 2.1、Groovy SQL を使用して SQL ステートメントを実行します。データベースは、RedHat VM で実行されている Oracle 11G です。Grails は対話モードで実行されていますが、WAR として実行しても動作に違いはありません。

Groovy SQL 経由で、次の構造の SQL ステートメントを発行しています。

insert into...
select ... from...

これにより、@119K 行がフェッチおよび挿入されます。正常に実行されると、通常は 1 分以内に完了します。

このステートメントは、通常、実行に合計約 10 分かかり、他の多くのクエリで構成されるデータ インポート アプリケーション全体のコンテキストで実行されます。

動作は次のとおりです。

  1. Grails アプリを起動します
  2. アプリケーションでデータのインポートを開始します。期待どおりに実行され、データが大幅に変更されます
  3. もう一度アプリケーションを開始します。最初の数十のクエリは正常に実行されます
  4. 上記の大きなインサートでは、ハングします。

だから:初めて、問題はありません。2回目は、毎回同じ場所にぶら下がっています。

アプリケーションを再起動すると、再び正常に動作します。

ここからが奇妙になります。しばらくの間、これを回転させておきます。データベースを停止すると、クエリは実行され続けます。エラーは発生しません。

したがって、この動作がおなじみのように聞こえる場合は、解決策に興味があります。

これを診断する方法についてのアイデアがあれば、私もそれらに興味があります. 私はアプリケーション開発者であり、Oracle 側よりも Java 側に精通しています。支援してくれる社内の Oracle DBA を見つけようとしていますが、少なくとも当面は独力です。

アドバイスをありがとう。

4

1 に答える 1

0

アプリを再起動すると再び機能するようになると言ったので、インデックスなどのSQL側には何もないことを示しているため、Hibernateセッションサイズに関連している可能性があるため、セッションを最大限に活用している可能性があります。

于 2012-12-09T19:39:04.550 に答える