当给出并行加载数据文件时,我想了解innodb_autoinc_lock_mode选项0、1和2之间的区别。
我在"0“选项中看到,它锁定整个表并为N个记录执行第一个请求事务,比如TX1。因此,当下一个事务(假设TX2在第一个事务仍然使用"load data“上载时)被引发时,它必须在队列中等待第一个TX1才能完成。然后从表中设置max(AI_column)+1值,并为下一组加载数据进行上载。在这种情况下,它不会跳过自动增量数字。
我还在"1“选项中看到,它锁定整个表,并为N个记录进行第一次事务处理,TX1说。因此,当下一个事务(假设TX2在第一个事务仍然使用"load data“上载时)被引发时,它必须在队列中等待第一个TX1才能完成。然后从表中设置max(AI_column)+1值,并为下一组加载数据进行上载。然后设置最大(AI_column)+some_creepy_jump。
但我在"2“选项中看到,它没有锁定整张桌子。相反,它同时为每个进程保留插入,并为其插入任何请求的记录,并以平均时间结束所有线程(7个并行线程的平均时间为1.21秒,使用的是每个记录为1000000条的加载数据)。在这种情况下,它以混合顺序处理多个事务。然后设置最大(AI_column)+some_creepy_jump属性。
我使用的是mysql 5.1.61。
由于我的项目需要使用一个表的加载数据的多个进程。我已经测试了上述选项,并最终选择了选项2。如果我的实验是错误的,请纠正我。
发布于 2013-02-09 03:05:13
您使用的是什么复制方法?选项2适用于基于行的语句复制,但是对于语句复制,不能保证从服务器上的auto inc值是相同的。
选项2也意味着你的汽车公司的价值可能不会是连续的,但也许这对你并不重要。
选项1是默认的,因为它是最安全的基于语句的复制方法(我认为这是默认的)。它比选项0更具可伸缩性,因为它只对批量插入执行表级auto inc锁,但它仍然提供连续的auto inc值,不存在任何间隙。有些人依赖这种行为。
对于您的用例来说,只要您的复制设置正常,您就可以接受所选的设置。
希望这能帮上忙。
https://dba.stackexchange.com/questions/34396
复制相似问题