0

我做了一个测试,插入相同数量的行似乎没有明显的性能提升,2个并发线程几乎与1个单线程花费相同的时间。

有什么方法可以提高加载数据文件的性能吗?多线程是错误的方法吗?

4

2 回答 2

2

如果多线程可以增加计算资源的并行使用,则可以提高性能。如果文件和数据库在同一个硬盘上,你可能不走运。如果您加载数据、计算繁重的数据然后写入数据库,您可能能够并行使用 CPU 和 HD。对于测试,创建一个线程来读取输入文件,并创建第二个线程来写入数据库(使用数据库的假数据)。如果这比读一点写一点快,那么多线程可以提高性能。我提到这一点,因为远不清楚你的测试实际上做了什么。

于 2013-04-19T15:28:07.320 回答
1

如果您对批量加载的数据的一致性有信心,您可能需要使用以下内容:

SET FOREIGN_KEY_CHECKS=0;
-- do the bulk load
SET FOREIGN_KEY_CHECKS=1;

这将暂时禁用外键检查,使数据插入方式更快。关于多线程,请尝试将两个线程移至最低隔离级别:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- bulk load
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; --default setting

将最后一行更改为您的正常隔离级别。或者,您可以使用临时变量来存储上一个级别:

SET @tx_isolation_orig = @@tx_isolation;
SET @@tx_isolation = read-uncommited;
-- bulk load
SET @@tx_isolation = @tx_isolation_orig;

更多信息:

于 2013-04-19T17:00:01.047 回答