关系型数据库相关

  • 记录关系型数据库相关的疑难杂症

目录

MySQL

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

关系型数据库相关
https://www.lewismind.site/2024/06/27/RDBMS/
作者
lewis
发布于
2024年6月27日
许可协议