关系型数据库相关
- 记录关系型数据库相关的疑难杂症
目录
MySQL
- 1.MGR集群查询读取问题:
- 现象: 在业务代码中,有一个插入后立即查询的操作,但是出现了插入数据之后无法立刻查询到该数据的情况。
- 分析排查: 这里很容易会联想到2种情况:
- 一:事务等级,合适的事务等级决定了是否能查看到对应的数据,在插入数据后,该事务还没有结束,应该是读未提交的事务隔离等级
- 二:数据库是MySQL的多主模式的MGR集群,在对同一个集群的读写操作,可能会出现读写不一致的情况,节点之间可能会存在同步延时,导致数据无法查询到。
- 测试验证
- 一、检查事务等级:这里如果是事务等级导致的,那么应该所有的数据都不可见,不会出现一部分数据出现,一部分数据可见的随机性错误,这个场景可以排除。
- 二、测试MGR集群的一致性:模拟写了一段业务插入后立即查询的操作,10线程并发的压测,每个线程请求10次,总共请求100次,发现有13次的未读取到插入的数据,确定了是MGR的同步问题。
- 解决:
- 查阅资料之后,了解MGR可以调整数据一致性的等级,默认等级为
EVENTUAL
,尝试调整为AFTER
,用来保证集群各个节点的数据强一致性。 - 在MGR集群,group_replication_consistency共 5 个值可选:
EVENTUAL
:确保最终一致性,并不能保证数据实时同步。(MySQL 8.0.14 之前只有这一个选项)
BEFORE
:确保本地强一致性,并不保证其他节点数据实时同步。
AFTER
:确保全局强一致性,可以保证所有节点数据实时同步。
BEFORE_AND_AFTER
:最高级别,确保本地强一致性,全局强一致性。结合 BEOFRE 和 AFTER 的特- 性。
BEFORE_ON_PRIMARY_FAILOVER
:确保从节点晋升为主节点后的本地一致性。
- 查阅资料之后,了解MGR可以调整数据一致性的等级,默认等级为
关系型数据库相关
https://www.lewismind.site/2024/06/27/RDBMS/