gpt4 book ai didi

mysql - Aurora Mysql 写csv记录耗时长

转载 作者:行者123 更新时间:2023-11-28 23:11:21 25 4
gpt4 key购买 nike

我正在尝试将我的 csv 文件记录写入 Aurora Mysql RDS。我没有进行任何设置/性能调整。

it is taking 7 minutes to write 500 lines/records

这是正常的还是我需要更改任何设置。我正在使用 jooq。

Loader<?> loader = create.loadInto(Tables.DUMMY_PROCESS_LISTING)
.onErrorIgnore()
.loadCSV(new File("/tmp/" + fileName))
.fields(Tables.DUMMY_PROCESS_LISTING.COL1,
Tables.DUMMY_PROCESS_LISTING.COL2,
Tables.DUMMY_PROCESS_LISTING.COL3)
.execute();​

当前最大线程连接数为 40 - 默认值。CPU 使用率在 7% 左右

最佳答案

我无法评论您的 Amazon 设置和您的具体数据库,但从 jOOQ 方面来看,有一些方法可以调整 Loader API。

默认加载程序提交/批处理/批量值:

jOOQ 的 LoaderOptionsStep 上的默认提交/批处理/批量标志是:

这通常不是插入数据的最快方式,尤其是在客户端和服务器之间存在大量延迟的情况下。以下是对每个的解释:

提交大小

提交大小指定在一个事务中应该执行多少个批处理。在许多数据库中,提交大小太小会对性能产生负面影响,因为导入数据的进程在 UNDO/REDO 日志上做的工作太多。相反,提交大小过大也会对性能产生负面影响,因为 其他 事务(尤其是在 MVCC 事务模型中)的 UNDO 日志可能需要大量工作。

在您的情况下,这应该不是问题,因为您只插入了 500 行。

批量大小

在 jOOQ 中,“批处理”与 JDBC 批处理相同,因此批处理大小是在单个批处理语句中发送到服务器的单个插入语句的数量。

批处理优化了延迟,因为它允许一次将多个语句发送到服务器。

默认不对任何语句进行批处理。在这里,您绝对可以获得相当大的吞吐量。

批量大小

在 jOOQ 中,“批量”对应于由单个语句插入/修改的“批量行”。例如,如果您指定批量大小为 5,则将使用一条语句插入 5 行,例如:

INSERT INTO t (a, b, c)
VALUES (1, 2, 3),
(2, 3, 4),
(3, 4, 5),
(4, 5, 6),
(5, 6, 7);

如果不支持上面的语法,jOOQ会模拟如下:

-- Depending on the database, FROM DUAL or something similar is added, too.
INSERT INTO t (a, b, c)
SELECT 1, 2, 3 UNION ALL
SELECT 2, 3, 4 UNION ALL
SELECT 3, 4, 5 UNION ALL
SELECT 4, 5, 6 UNION ALL
SELECT 5, 6, 7;

批量插入操作优化了数据库内部的性能,因为数据库可以针对多行的插入进行优化,例如分配磁盘空间。

当然,作为副作用,这也优化了延迟,因为现在单个语句将通过线路从客户端传输 5 行到服务器。

这也是对您有益的事情。

其他原因

同样,这些是调整 jOOQ 的 Loader API 的方法。可能还有其他与 jOOQ 无关的调优数据库的方法。

关于mysql - Aurora Mysql 写csv记录耗时长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com