mysql 事务隔离级别的思考

2020-03-12 21:07:35 +08:00
 zxc1234

mysql 默认的级别是可重复读

为什么不用读已提交呢?因为以前 binlog 在 RC 隔离级别下主从复制会出错

但是因为在 RR 级别下,存在间隙锁,导致出现死锁的几率比 RC 的大很多

因此 很多大厂采用 RC 级别

那么问题来了,修改为 RC 级别后,binlog 主从复制为什么不会出错呢??

3958 次点击
所在节点    MySQL
12 条回复
puperSB
2020-03-12 23:08:02 +08:00
首先问问题可不可以不可重复读和 RR 同时用。。。其次现在很多大厂的某些业务也是使用的 读提交 隔离级别。但是有两点要注意。第一,读提交会出现幻读(自己的业务要能忍受),第二主从同步要使用 row 模式。
chen1164162915
2020-03-13 00:37:25 +08:00
隔离级别玩不明白就 Serializable,select for update 一刀切
CoderGeek
2020-03-13 02:17:54 +08:00
看业务容忍度
hantsy
2020-03-13 02:23:14 +08:00
每个数据库默认不一样,也不一定所有数据库都支持这 4 种级别。
一般用数据库默认的比较安全。
littlewing
2020-03-13 08:24:14 +08:00
rc 下主从复制会出错,可以举个例子吗
leorealman
2020-03-13 09:10:53 +08:00
我也想知道为什么大厂采用 RC 而不用 RR,我的理解中 RC 没有严格满足 ACID 的 I 也就是隔离性...我推测是为了更好的并发?
cstj0505
2020-03-13 09:19:35 +08:00
如果你觉得同一个事务以内读到的数据不同没关系,可以改已提交读啊。
bbao
2020-03-13 09:53:43 +08:00
不明白的事情,设计者帮你想明白了,做了默认的选择;
事务隔离级别可以随时调整,满足业务的场景下,如果觉得自己的对且没问题,测试和生产都可以改,有更多不了解就查阅资料就行了。
wps353
2020-03-13 10:22:58 +08:00
因为在 RC 级别下,binlog 的 format 是 row 格式的就能避免问题。
Aresxue
2020-03-13 10:51:26 +08:00
binlog 的复制方式有两种, 按语句和按行复制, 按语句在幻读发生的情况下就会产生问题,使用严格的行复制就不会有这种问题了
scnace
2020-03-13 10:53:37 +08:00
gap lock 指的是 autoinc 的主键吗?
githubhaoliu
2020-03-13 11:40:20 +08:00
在 RR 下 Mysql 采用 Next Key Locking 机制避免了幻象问题,Oracle 要在 Serializable 才能实现。安全是数据库第一重要的,再说,可以自己调呀。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/652301

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX