0

我正在尝试从 4.0 更新到 4.5.1,但该过程总是在UpdateMeasuresDebtToMinutes. 我使用 MySQL 5.5.27 作为数据库,使用 InnoDB 作为表引擎。

基本上问题看起来像这个问题

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()which 在BatchSession.MAX_BATCH_SIZE (250)强制执行和提交之后

有没有办法配置数据库连接以允许此操作继续进行?

4

2 回答 2

0

首先,您可以尝试将您的数据库恢复到 4.0 并重试吗?那么,能否请您给我们您正在使用的 JDBC url (sonar.jdbc.url)?

谢谢

于 2015-01-12T14:06:29.947 回答
0

由于我需要运行该声纳服务器,因此我最终实施了一种解决方法。

似乎我根本无法写入数据库,只要一个大结果集仍然打开(我尝试使用第二个表,但问题与以前相同)。

因此,我更改了所有需要读取和写入project_measures表(org.sonar.server.db.migrations.v43.TechnicalDebtMeasuresMigration, org.sonar.server.db.migrations.v43.RequirementMeasuresMigration, org.sonar.server.db.migrations.v44.MeasureDataMigration)的迁移,以将更改的数据加载到内存结构中,并在关闭读取结果集后将其写回。这听起来很老套,并且不适用于较大的数据集,您需要通过数据分页或将所有内容存储到辅助数据存储中来实现这一点。

此外,我发现稍后(在546_inverse_rule_key_index.rb)需要在rules表上创建一个索引,该索引大于 mysql 上的最大键长度(2 varchar(255) 列,UTF-8 超过 1000 字节 ..)所以我不得不也限制密钥长度..

正如我所说,这是一种解决方法,因此我不会接受它作为答案..

于 2015-01-20T09:12:32.260 回答