网易首页 > 网易号 > 正文 申请入驻

MySQL Group Replication Multi-Primary 模式,你真的理解么?

0
分享至

MySQL 数据库支持传统的四大事务隔离级别,即 Read Uncommitted、Read Committed、Repeatable Read、Serializable。

然而,对于 MySQL Group Replication Multi-Primary 模式,严格来说他的事务隔离级别是快照事务隔离级别(Snapshot Isolation,下简称:SI)。

今天,姜老师来聊聊数据库的快照事务隔离级别。

Snapshot Isolation 概述

很多 DBA 同学在面试的时候会被问到事务的隔离级别,然后会说Read Uncommitted(RU)、Read Committed(RC)、Repeatable Read(RR)、Serializable(SRZ)。

是的,但这四大事务隔离级别的定义姜老师更喜欢称其为古典事务隔离级别,即 ANSI SQL 92 定义的事务隔离级别。

ANSI SQL 92 定义的事务隔离级别依次解决 Dirty Read(脏读),Repeatable Read(不可重复读)、Phatom(幻读)。

在当时的学术界,认为只要解决了这三个问题,那么事务就是具有真正的隔离性。

最终推导出具有两阶段加锁的 Serializable 事务隔离级别可以保证完整的隔离性。

The fundamental serialization theorem is that well-formed two-phase locking guarantees serializability

但是!后来 Hal Berenson、Jim Gray 他们在 1995 年发表了一篇新的论文《A critique of ANSI SQL Isolation levels》[1],用来批判 ANSI SQL的事务隔离级别。在论文的摘要中,可以看到如下内容:

ANSI SQL-92 [MS, ANSI] defines Isolation Levels in terms of phenomena: Dirty Reads, Non-Repeatable Reads, and Phantoms. This paper shows that these phenomena and the ANSI SQL definitions fail to characterize several popular isolation levels, including the standard locking implementations of the levels. Investigating the ambiguities of the phenomena leads to clearer definitions; in addition new phenomena that better characterize isolation types are introduced. An important multiversion isolation type, Snapshot Isolation, is defined.

在论文的总结部分,可以看到如下内容:

In summary, there are serious problems with the original ANSI SQL definition of isolation levels

可以说,这篇论文应该基本上把 Jim Gray 在自己书中 《Transaction Processing: Concepts and Techniques》[2],对于事务隔离级别的定义进行”彻头彻尾“的批判。
论文的大意是除了 ANSI SQL 定义的三种并发问题,还有其他并发问题,如 Lost Update(P4)、Read Skew(A5A)、Write Skew(A5B)、New Phantom(A3B)等。

之前定义的事务隔离级别,除了 SRZ,都无法解决。

然后论文引出了新的事务隔离级别 SI ,相比之前除了 SRZ,SI 有着更好的隔离性。

Such applications will find Snapshot Isolation better behaved than either: it avoids the lost update anomaly, some phantom anomalies (e.g., the one defined by ANSI SQL), it never blocks read only transactions, and readers do not block updates.

为了简洁说明,这里仅举例 Read Skew 的问题,看下面的测试用例:

可以看到事务 T1 读取到了事务T2修改后的数据,因此不符合隔离性的要求。

但是这个场景不在 ANSI SQL 定义的 Dirty Read,Repeatable Read、Phatom 范畴内。

上述场景就是论文中定义的 Read Skew:

A5A Read Skew Suppose transaction T1 reads x, and then a second transaction T2 updates x and y to new values and commits. If now T1 reads y, it may see an inconsistent state, and therefore produce an inconsistent state as output. In terms of histories, we have the anomaly:

A5A: r1[x]...w2[x]...w2[y]...c2...r1[y]...(c1 or a1)

在 RC、RR 隔离级别下,是无法解决上述问题的,只有通过设置隔离级别为 SRZ。

但是 SRZ 隔离级别需要遵循两阶段加锁,即对每条读取到的记录加锁,可能会被写操作堵塞,因此使用 SRZ 隔离级别后,数据库并发性能较差。

然而, SI 事务隔离级别不会有 Read Skew问题,同时读取操作也不会阻塞变更操作。

简单来说,SI 有着更好的隔离性,以及比 SRZ 更好的性能,甚至可以比肩 RC 事务隔离级别。

BTW,论文中谈及的 (Basic)SI 隔离级别也没有解决 Write Skew 的问题。

但是在之后的论文《Serializable isolation for snapshot databases》[3], SSI (Serializable Snapshot Isolation) 彻底达到了事务隔离性的要求。

Snapshot Isolation 实现原理

论文《A critique of ANSI SQL Isolation levels》对于 SI 的实现原理做了大致介绍,原理还是非常简单的,主要是以下几个主要过程:

[1]. 事务T1读取第一条记录时,分配一个 Start-Timestamp ,这个值是单调递增的;

[2]. 任何事务修改的记录会被写入到快照中,以便事务需要访问这些历史记录版本;

[3]. 当事务T1提交时,会获得一个 Commit-Timestamp 。事务 T1 能提交的前提是不存在其他事务T2,修改事务 T1 中的变更的任何一条记录。原文:

The transaction successfully commits only if no other transaction T2 with a Commit-Timestamp in T1’s execution interval [Start-Timestamp, Commit-Timestamp] wrote data that T1 also wrote.

[4]. 若事务提交时存在冲突,哪个事务先提交,则提交成功,这个机制称为:First-committed-wins。

从上面的实现原理看,SI 本质是一种乐观锁的机制,读不会因为写操作而阻塞,写只有在提交时才会进行冲突检测。

所以,若每个事务绝大部分情况下更新的记录都不冲突,则 SI 隔离级别有着极好的性能表现,也就是前面说的性能不输 RC。

那么,SI 就完美无缺了么?它的缺点是什么呢?其实在生产环境中,他的缺点是比较致命的。

一方面,他需要假设事务绝大部分情况下更新的记录都不冲突,若存在热点,如类似秒杀这样的场景,则 SI 的性能会严重退化。

另一方面,对于每条记录的快照需要保存在内存中,以类似 RowVersion + Start-Timestamp 的形式存在。如若存在大事务,则需要较大的内存使用。因此,支持 SI 隔离级别的数据库,如 PostgreSQL 数据库,需要设置使用 SSI 隔离级别的内存使用量。当然,这个问题新版本 PG 貌似已经解决[3]。

MGR 与 SI

讲了这么多 SI 的知识点,其实现在大家就会发现 MGR Multi-Primary 模式的隔离级别本质是 SI。

首先,虽然 MGR Multi-Primary 模式是 Share Nothing 的架构,但其允许在多个节点中并发写入数据,我们要将 MGR 集群看成一个大的数据库实例。

其次,MGR Multi-Primary 模式是一种乐观锁机制,多个事务在并发提交的时,会在各节点上进行全局冲突检测。若存在事务之间有更新同一行的记录情况,则回滚事务。冲突检测的原理是基于WriteSet,回滚的原则依然遵循 First-committed-wins。

最后,MGR 需要严格控制事务大小,当事务太大时,Certification_info 会占用大量的内存,从而导致系统的不稳定。参数 group_replication_transaction_size_limit 用于控制事务大小,类似对于 SI 隔离级别内存使用上限的控制。

MySQL 源码也有对 SI 实现的简单说明:

总结来说,以前单实例数据库的 SI 隔离级别,事务提交时的冲突检测仅在单个进程中完成。

但对于 MGR Multi-Primary 这样的集群来说,事务交前,会通过 Paxos 协议发送 Certification_info 到 MGR 中的每个节点,然后再进行冲突检测。

其中,Certification_info 是一个map,由 组成。

typedef std::unordered_map Certification_info;

再次提醒,对于 SI 事务隔离级别来说,提交时可能会失败。即在 MGR Multi-Primary 模式下,正常的提交可能失败!!!

ERROR 3101 (HY000) at line 4: Plugin instructed the server to rollback the current transaction.

一方面,在 MGR 中,事务提交失败并不代表数据库发生了故障,业务需要有重试逻辑(理解乐观锁机制)。

另一方面,业务侧一定要做好对于上述错误码的监控,如果很多,则表示你的 MGR Multi-Primary 模式使用姿势存在很大的问题。

总结

MySQL Group Replication Multi-Primary 是目前为止关系型数据库最伟大的产品,但很多同学并不能充分发挥其优势。

这就如拿着特斯拉 Model S 当燃油车去跑赛道,最后分数肯定不理想。

所以,理解 SI 隔离级别,是理解 MySQL Group Replication Multi-Primary 的第一步,也是充分发挥 MGR 全面潜力的第一步。

MGR,你准备好了么?欢迎留下你的评论。

参考文献:

[1]. https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf

[2]. J. Gray and A. Reuter, “Transaction Processing: Concepts and Techniques”

[3]. https://courses.cs.washington.edu/courses/cse444/08au/544M/READING-LIST/fekete-sigmod2008.pdf

[4]. https://drkp.net/papers/ssi-vldb12.pdf

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
两小时卖光两年订单,董宇辉登顶抖音带货榜第一

两小时卖光两年订单,董宇辉登顶抖音带货榜第一

电商报APP
2024-04-29 14:28:18
女子花万元买来的衬衣手洗一次后现划痕 商家拒绝退货:不能水洗|追踪到底

女子花万元买来的衬衣手洗一次后现划痕 商家拒绝退货:不能水洗|追踪到底

封面新闻
2024-04-30 15:17:33
这一中央部门有重要部署!履新一月后,蔡丽新南下,提出新要求

这一中央部门有重要部署!履新一月后,蔡丽新南下,提出新要求

政知新媒体
2024-04-30 20:13:05
特斯拉加速包震惊网友,花七千就可将百公里加速提升到4.4秒

特斯拉加速包震惊网友,花七千就可将百公里加速提升到4.4秒

映射生活的身影
2024-05-01 01:43:10
俞敏洪西藏行收官,与董宇辉渐行渐远,罗永浩辣评:不坏但小气!

俞敏洪西藏行收官,与董宇辉渐行渐远,罗永浩辣评:不坏但小气!

小咪侃娱圈
2024-05-01 14:50:02
上千吨“顶榴”在广州南沙港开柜!榴莲嘉年华狂欢至5月2日

上千吨“顶榴”在广州南沙港开柜!榴莲嘉年华狂欢至5月2日

南方都市报
2024-04-30 22:32:12
走投无路了?哈马斯领导人提出了“三个愿意”

走投无路了?哈马斯领导人提出了“三个愿意”

战域笔墨
2024-04-29 09:41:21
CCTV5直播!中国女排VS塞尔维亚生死战,朱婷缺席,蔡斌获神助攻

CCTV5直播!中国女排VS塞尔维亚生死战,朱婷缺席,蔡斌获神助攻

小豆豆赛事
2024-05-01 09:59:50
西安楼市全军覆没,连累银川楼市,银川房价降至7000多元

西安楼市全军覆没,连累银川楼市,银川房价降至7000多元

有事问彭叔
2024-04-30 20:13:31
闹大了!专家说中国职工假期不及全球多数国家,评论区被骂惨了

闹大了!专家说中国职工假期不及全球多数国家,评论区被骂惨了

人性大道
2024-05-01 17:58:19
润人“表率”来了!“美国国师”奋斗5年,终求仁得仁,开始要饭

润人“表率”来了!“美国国师”奋斗5年,终求仁得仁,开始要饭

杯子叨叨
2024-04-12 20:44:12
身体不健康的八个表现,建议收藏备用

身体不健康的八个表现,建议收藏备用

荷兰豆爱健康
2024-04-30 21:15:26
意甲最佳灾难级表现!拜仁5000万签金玟哉5年,1年不到就该卖吗?

意甲最佳灾难级表现!拜仁5000万签金玟哉5年,1年不到就该卖吗?

直播吧
2024-05-01 10:40:39
孙颖莎和王艺迪、陈梦同区,陈幸同和王曼昱同区,遭遇硬签

孙颖莎和王艺迪、陈梦同区,陈幸同和王曼昱同区,遭遇硬签

子水体娱
2024-05-01 05:25:03
全程直播!WTT沙特大满贯今日开赛,国乒12人直接晋级正赛!

全程直播!WTT沙特大满贯今日开赛,国乒12人直接晋级正赛!

乒谈
2024-05-01 09:42:40
印度人预测:未来20年,或将面临解体的“6个国家”,看到有哪些

印度人预测:未来20年,或将面临解体的“6个国家”,看到有哪些

辉哥说动漫
2024-05-01 13:33:38
一手打造掘金森林狼两豪强!联盟最被低估总裁?运作能力不输少帅

一手打造掘金森林狼两豪强!联盟最被低估总裁?运作能力不输少帅

你的篮球频道
2024-05-01 07:43:12
miumiu3250元发卡卖断货 客服:补货时间尚不确定

miumiu3250元发卡卖断货 客服:补货时间尚不确定

室内设计师阿喇
2024-05-01 10:14:06
房子隔音很差是什么样的体验?网友:一到晚上我就兴奋

房子隔音很差是什么样的体验?网友:一到晚上我就兴奋

今日搞笑分享
2024-05-01 08:49:59
玄学提醒:未来几年,尽量不要去人多的地方

玄学提醒:未来几年,尽量不要去人多的地方

神奇故事
2024-04-28 23:54:01
2024-05-01 18:44:49
破产码农
破产码农
IT圈最会讲故事的码农
161文章数 7039关注度
往期回顾 全部

科技要闻

余承东卸任华为终端CEO 新任命为董事长

头条要闻

嫦娥六号任务计划5月3日发射

头条要闻

嫦娥六号任务计划5月3日发射

体育要闻

"意甲最佳"金玟哉 踢回了中超水平...

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

俞敏洪,踏足A股!

汽车要闻

预售2.89-3.49万 奔腾小马正式开启预售

态度原创

手机
旅游
游戏
亲子
房产

手机要闻

部分用户反映 iPhone 闹钟不响,苹果称正在修复

旅游要闻

假期最受欢迎的小众目的地 会玩的人已经去了

《沙丘:觉醒》游戏截图泄露 角色定制捏脸细节丰富

亲子要闻

“胡主任”今天不想上班

房产要闻

单价2万内,装标4200+,主城改善大盘无套路硬刚!

无障碍浏览 进入关怀版