【问题标题】:DBUnit FlatXMLDataSet insert extremely slow for MySQL containerized databaseDBUnit FlatXMLDataSet 对 MySQL 容器化数据库的插入速度极慢
【发布时间】:2019-09-12 08:16:06
【问题描述】:

我有一个由大约 263k 行组成的 FlatXMLDataSet,我正在尝试将其加载到 MySQL 数据库中。我有一个小得多的数据集(5k 行),可以毫无问题地加载。大型数据集并不过分复杂(姓名、地址、电子邮件等)。

我尝试过的:

禁用外键检查

SET FOREIGN_KEY_CHECKS=0;

设置批量大小

dbUnitConnection.getConfig().setProperty(org.dbunit.database.DatabaseConfig.FEATURE_BATCHED_STATEMENTS, true);
dbUnitConnection.getConfig().setProperty(org.dbunit.database.DatabaseConfig.PROPERTY_BATCH_SIZE, 20000);

为什么使用 DBUnit 将数据插入 MySQL/MariaDB 如此缓慢,有什么方法可以加快速度?任何帮助/指针将不胜感激,因为我需要它来工作。

注意相同的数据集可以毫无问题地插入到 Oracle、Postgres、SQLServer 等中。

【问题讨论】:

  • 您是否将自动提交设置为 false?

标签: java mysql database mariadb dbunit


【解决方案1】:

感谢 Georg 的评论,他的评论大大加快了速度。

解决方案是将 MySQL 的 autocommit 设置为 false,然后在加载数据后手动提交更改

jdbcConnection.setAutoCommit(false);
jdbcConnection.commit();

这会加快速度。为了让它更快,我还必须禁用外键检查(我使用 JDBC 数据库 url 变量来做到这一点)

"url:port/schema?useSSL=false&sessionVariables=FOREIGN_KEY_CHECKS=0"

【讨论】:

  • 除了禁用外键检查,您还应该禁用唯一键检查:SET unique_checks=0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 2017-04-15
  • 1970-01-01
  • 2014-08-10
  • 2015-11-14
相关资源
最近更新 更多