MySQL 容器化数据库的 DBUnit FlatXMLDataSet 插入速度极慢
DBUnit FlatXMLDataSet insert extremely slow for MySQL containerized database
我有一个包含大约 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 如此缓慢,有什么方法可以加快速度吗?任何 help/pointers 都将不胜感激,因为我需要它来工作。
N.B。相同的数据集可以毫无问题地插入 Oracle、Postgres、SQLServer 等。
感谢 Georg 的评论,这大大加快了速度。
解决方案是为 MySQL 将自动提交设置为 false,然后在加载数据后手动提交更改
jdbcConnection.setAutoCommit(false);
jdbcConnection.commit();
这样可以加快速度。为了让它更快,我还必须禁用外键检查(我使用 JDBC 数据库 url 变量)
"url:port/schema?useSSL=false&sessionVariables=FOREIGN_KEY_CHECKS=0"
我有一个包含大约 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 如此缓慢,有什么方法可以加快速度吗?任何 help/pointers 都将不胜感激,因为我需要它来工作。
N.B。相同的数据集可以毫无问题地插入 Oracle、Postgres、SQLServer 等。
感谢 Georg 的评论,这大大加快了速度。
解决方案是为 MySQL 将自动提交设置为 false,然后在加载数据后手动提交更改
jdbcConnection.setAutoCommit(false);
jdbcConnection.commit();
这样可以加快速度。为了让它更快,我还必须禁用外键检查(我使用 JDBC 数据库 url 变量)
"url:port/schema?useSSL=false&sessionVariables=FOREIGN_KEY_CHECKS=0"