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