0

4.0 から 4.5.1 に更新しようとしていますが、プロセスは常に で失敗しUpdateMeasuresDebtToMinutesます。テーブル エンジンとして InnoDB を使用し、データベースとして MySQL 5.5.27 を使用しています。

基本的に問題はこの問題のように見えます

writeTimeout が (600 秒) を超えると、ログに例外が記録されます

Caused by: java.io.EOFException: Can not read response from server. Expected to read 81 bytes, read 15 bytes before connection was unexpectedly lost.
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3166) ~[mysql-connector-java-5.1.27.jar:na]
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3676) ~[mysql-connector-java-5.1.27.jar:na]

リンクされた問題で提案されているようにインデックスを追加しても役に立ちませんでした。

さらに調査すると、いくつかのことに気付きました。

  • 移行ステップでテーブルからデータを読み取り、同じテーブルに書き戻したい ( project_measures)
  • project_measures に 770000 を超える行が含まれている
  • プロセスは常に 249 行の後にハングします
  • 実行とコミットを強制した後org.sonar.server.migrations.MassUpdateに呼び出したときにハングが発生しますupdate.addBatch()BatchSession.MAX_BATCH_SIZE (250)

これを続行できるように DB 接続を構成する方法はありますか?

4

2 に答える 2

0

そのソナーサーバーを実行する必要があるため、最終的に回避策を実装しました。

大きな結果セットがまだ開いている限り、データベースにまったく書き込めないようです(2番目のテーブルで試しましたが、以前と同じ問題でした)。

project_measuresしたがって、テーブル ( org.sonar.server.db.migrations.v43.TechnicalDebtMeasuresMigrationorg.sonar.server.db.migrations.v43.RequirementMeasuresMigration、 )の読み取りと書き込みが必要なすべての移行を変更してorg.sonar.server.db.migrations.v44.MeasureDataMigration、変更されたデータをメモリ構造にロードし、読み取り結果セットを閉じた後に書き戻します。これはハッキーに聞こえるかもしれませんが、データをページングしたり、すべてをセカンダリ データストアに保存したりする必要がある大規模なデータセットでは機能しません。

さらに、後で(で) mysqlの最大キー長よりも大きいテーブル546_inverse_rule_key_index.rbにインデックスを作成する必要があることがわかりました(UTF-8の2つのvarchar(255)列は1000バイトを超えています..)ので、私はしなければなりませんでしたrulesその上でもキーの長さを制限してください..

私が言ったように、これは回避策であるため、回答として受け入れません..

于 2015-01-20T09:12:32.260 に答える
0

まず、データベースを 4.0 に戻して、もう一度お試しいただけますか? それでは、使用しているJDBCのURL(sonar.jdbc.url)を教えていただけますか?

ありがとう

于 2015-01-12T14:06:29.947 に答える