首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >innodb_autoinc_lock_mode 0,1,2的实际差别是什么?

innodb_autoinc_lock_mode 0,1,2的实际差别是什么?
EN

Database Administration用户
提问于 2013-02-08 12:35:03
回答 1查看 6.4K关注 0票数 5

当给出并行加载数据文件时,我想了解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。

  • 我的问题是,备选案文1的用途是什么?
  • 为什么它会被保留为Mysql 5.1.22的默认更新版本呢?
  • 有没有人用第二种选择来应对任何灾难?

由于我的项目需要使用一个表的加载数据的多个进程。我已经测试了上述选项,并最终选择了选项2。如果我的实验是错误的,请纠正我。

EN

回答 1

Database Administration用户

发布于 2013-02-09 03:05:13

您使用的是什么复制方法?选项2适用于基于行的语句复制,但是对于语句复制,不能保证从服务器上的auto inc值是相同的。

选项2也意味着你的汽车公司的价值可能不会是连续的,但也许这对你并不重要。

选项1是默认的,因为它是最安全的基于语句的复制方法(我认为这是默认的)。它比选项0更具可伸缩性,因为它只对批量插入执行表级auto inc锁,但它仍然提供连续的auto inc值,不存在任何间隙。有些人依赖这种行为。

对于您的用例来说,只要您的复制设置正常,您就可以接受所选的设置。

希望这能帮上忙。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/34396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档