我正在尝试将我的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 - 默认值为1。 CPU使用率约为7%
答案 0 :(得分:1)
我无法评论您的亚马逊设置和您的具体数据库,但从jOOQ方面,有一些方法可以调整Loader
API。
jOOQ&#39; LoaderOptionsStep
上的默认提交/批量/批量标记是:
这通常不是插入数据的最快方式,尤其是在客户端和服务器之间存在大量延迟的情况下。以下是对每个问题的解释:
提交大小指定在一个事务中应执行的批次数。在许多数据库中,提交量太小会对性能产生负面影响,因为导入数据的进程对UNDO / REDO日志的工作量太大。相反,如果提交大小过大也会对性能产生负面影响,因为UNDO登录其他事务可能会有大量工作(特别是在MVCC事务模型中)。
在您的情况下,这不应该是一个问题,因为您只插入了500行。
在jOOQ发言中,&#34;批次&#34;与JDBC批处理相同,因此批处理大小是在单个批处理语句中发送到服务器的各个插入语句的数量。
批处理可以优化延迟,因为它允许一次发送多个语句到服务器。
默认情况下不批处理任何语句。在这里,你绝对可以获得相当多的吞吐量。
在jOOQ发言中,&#34;批量&#34;对应于&#34;大量行&#34;由单个语句插入/修改的。例如,如果您指定批量大小为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无关。