设置一致性级别

2026-10-19   访问量:0

RDS MySQL数据库代理在读写(读写分离)模式下提供了三种一致性级别:最终一致性、会话一致性和全局一致性。本文介绍三种一致性级别的基本功能和适用场景,帮助您根据实际业务需求选择合适的一致性级别。


关于RDS数据库代理的使用问题和更多相关信息,欢迎加入用户钉钉群(106730000316)进行咨询、反馈和交流 。


背景信息


RDS MySQL使用Binlog复制来同步主节点和只读节点的数据。当主节点提交事务时,产生的Binlog Event会被发送到只读节点,只读节点通过接收和应用Binlog Event来实现和主节点的数据同步。虽然基于Binlog复制确保了最终一致性,但在高并发或高负载情况下,只读节点上的数据可能出现延迟,导致从只读节点上读到的数据不一致。


为了解决数据不一致问题,RDS MySQL数据库代理提供了三种一致性级别:最终一致性、会话一致性和全局一致性。您可以根据业务需求选择合适的一致性级别。


一致性介绍


功能介绍


RDS MySQL数据库代理默认采用最终一致性级别,在Binlog复制不中断的情况下,读请求直接发送到只读节点。由于只读节点的数据在Binlog复制下是最终一致的,因此代理上的读请求也是最终一致的。RDS MySQL代理支持设置延迟阈值,限制只读实例的最大延迟时间。一旦只读节点的延迟超过该阈值,读请求将不再被发送到该节点。


设置最终一致性会话后,只读节点读取结果如下图所示:

image

此外,复制延迟可能导致不同只读节点上的数据存在差异。例如,在一个会话中连续执行如下查询,最终查询结果可能有所不同:

SET AUTOCOMMIT = 1;INSERT INTO t1(id, price) VALUES (111, 96);UPDATE t1 SET price = 100 WHERE id = 111;SELECT price FROM t1;


这些查询的结果可能会因复制延迟而有所变化。


适用场景


一致性需求较弱,更希望尽量减轻主节点压力,使更多读请求路由到只读节点时,您可以选择最终一致性。


image


image


关于会话一致性和全局一致性的实现原理,请参见附录:会话一致性和全局一致性实现原理。


选择一致性级别


•一致性级别越高(全局一致性 > 会话一致性 > 最终一致性),读写分离性能越低。


•一般情况下,推荐使用会话一致性,不仅对性能影响较小,且能满足大多数应用场景的需求。


•如果不同会话间需要较高的一致性,并且写入压力不大,可以选择全局一致性。


一致性级别

 

对读写分离性能影响

 

数据一致性强度

 

数据一致性范围

 

最终一致性

 

无

 

低

 

最终结果一致

 

会话一致性

 

中

 

中

 

单个会话内一致

 

全局一致性

 

高

 

高

 

跨会话一致

 

设置一致性级别


前提条件


•已开通数据库代理,且代理的内核小版本不低于2.25.1,详情请参见查看代理内核小版本。


•数据库代理的读写属性为读写(读写分离),详情请参见设置读写属性和读权重。


•RDS MySQL实例版本为8.0或5.7,且内核小版本满足:


◦MySQL 5.7需大于等于20210630。


◦MySQL 8.0需大于等于20210930。


注意事项


•当使用会话一致性或全局一致性时,代理需要等待数据位点同步(最大等待时间为一致性读超时时间),这可能导致业务延迟增加。


•如果只读节点存在复制延迟,使用全局一致性可能会使更多读请求路由到主节点,导致主节点负载增大,并进一步增加业务延迟。


•一致性级别默认值为最终一致性。


操作步骤


1.访问RDS实例列表,在上方选择地域,然后单击目标实例ID。


2.在左侧导航栏,单击数据库代理。


3.在连接信息区域,在目标代理连接地址的操作列,单击修改配置。


4.根据需求选择一致性级别。


◦当选择最终一致性或会话一致性级别时,可以按需开启延迟阈值。默认开启的延迟阈值为30 s。


◦当选择会话一致性或全局一致性级别时,可以按需设置一致性读超时时间,如果不设置,默认值为10 ms。


附录:会话一致性和全局一致性实现原理


为了实现会话一致性和全局一致性,RDS MySQL代理记录每个只读节点的 Executed_Gtid_Set (已提交事务集合),以确定每个只读节点上的数据位点(GTID,全局事务号)。在每次读请求开始前,代理会设置读请求所需的GTID,并将读请求路由至已达到该GTID位点的只读节点。若只读节点未满足GTID要求,则等待其同步至指定的GTID位点后再进行路由。RDS MySQL代理支持通过设置一致性读超时时间来限定最大等待时间,若超时内无符合GTID位点的只读节点,则请求将被发送到主节点。


读请求所需的GTID根据一致性级别不同而变化:


•会话一致性:当前会话中最新执行事务对应的GTID。


•全局一致性:当前集群中最新执行事务对应的GTID。


image.png


相关API


API

 

描述

 

查询数据库代理详情

 

查询RDS实例数据库代理详细信息。

 

查询数据库代理的连接地址信息

 

查询RDS实例数据库代理的连接地址信息。

 

配置数据库代理连接地址访问策略

 

修改RDS实例数据库代理连接地址访问策略。

 


热门文章
更多>