Multithreading 多线程加载数据填充到同一innodb表中是否可以提高性能?

Multithreading 多线程加载数据填充到同一innodb表中是否可以提高性能?,multithreading,file-io,load,innodb,Multithreading,File Io,Load,Innodb,我做了一个测试,似乎没有明显的性能提升 要插入相同数量的行,2个并发线程与1个单线程的时间几乎相同 有没有办法提高加载数据填充性能?多线程是一种错误的方法吗?如果多线程可以增加计算资源的并行使用,那么它可以提高性能。如果文件和数据库位于同一硬盘上,则可能是运气不好。如果您加载数据,计算一些繁重的数据,然后写入数据库,您可能能够并行使用CPU和HD。对于测试,创建一个线程来读取输入文件,创建第二个线程来写入数据库(使用数据库的假数据)。如果这比读一点写一点快,那么多线程可以提高性能。我提到这一点,

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


有没有办法提高加载数据填充性能?多线程是一种错误的方法吗?

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

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

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

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;
其他资料:


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

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;
其他资料:


谢谢你,杜姆斯特,我的服务器有2个CPU,8核(每个4核),32g内存和1个硬盘,你认为多线程会获得更高的性能吗?谢谢你,杜姆斯特,我的服务器有2个CPU,8核(每个4核),32g内存和1个硬盘,你认为多线程会获得更高的性能吗?