1

私は MySQL、Grails、および Java と戦っています。

  1. アプリサーバーがあり、そこで Grails アプリが実行されています。
  2. 私はmysql dbを備えた別のサーバーを持っています。
  3. サーバーに接続してデータをcsvファイルにエクスポートするJavaアプリが1つあります。

DB には大量のデータ (1,000 万のレジスタ) があり、15 分ごとに Grails アプリが DB に接続して、新しい情報を確認して保存しています。通常の機能方法。

私の問題は、grails アプリが動作している間に、データベース内の情報の一部をエクスポートする Java アプリを実行したいということです。しかし、私の問題は、プロセスが非常に遅いことですが、たまにしかありません。私は説明します:

  1. Grails アプリが機能している場合、私の Java アプリはすべてのデータをエクスポートするのに約 4 日かかります。Java プロセスは CPU の約 0.3 ~ 0% を使用します。

  2. Tomcat をオフにした場合、DB へのすべての接続 (mySQL の show processlist コマンド) は、すべてのプロセスを完了するのに約 40 分かかります。Java プロセスは、CPU の約 85% を使用します。

何が問題なのかわかりませんが、私はすべてを試しました。私の問題は、エクスポートしたいときに常に grails アプリを停止できないことです。このため、プロセス間の優先順位を指定して、Java アプリが最高の優先順位になるようにする方法はありますか?

ご回答ありがとうございます。

4

1 に答える 1

3

これは、データベースのロックの問題のようです。innotopのようなツールを入手して、データベースで何が起こっているかを詳しく調べることをお勧めします。特に、grails アプリの実行中に開いているテーブル、ロック、およびアクティブなクエリを注意深く調べます。

于 2012-04-18T21:23:33.893 に答える