使用RDS MySQL读写分离功能后查询语句被路由到主实例

更新时间:

概述

当您使用RDS MySQL读写分离功能时,遇到查询语句被路由到主实例,且主实例QPS比只读实例高的情况,请参见文本排查该问题。

详细信息

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

主实例本身负责写请求,且事务中的语句也会被路由到主实例,所以可能主实例QPS会比只读实例多。因此需要查看业务类型是读请求多还是写请求多,且是否使用了大量事务类操作,将SQL语句封装到事务。具体排查步骤如下所示:

  1. 开通RDS的SQL洞察功能,详情请参见SQL洞察,通过SQL洞察确认对应查询是否封装在事务中,事务的关键词如下所示。
    set autocommit=0
    set autocommit=1

    begin
    end

    start transaction
    commit
  2. 使用SQL洞察排查时,先根据SQL执行时间使用SQL关键词查看对应SQL执行的线程ID,然后根据线程ID查看线程这段时间执行的SQL操作,查看对应的查询是否放到了事务语句中。
  3. 如果查询的文本大小超过64KB,那么无论这个SQL是否封装在事务中,也只路由到主实例。
  4. 检查读写分离是否配置了延迟超过一定时间,就不分配请求到只读实例的功能。如果配置了该功能,请在实际条件允许的情况下,取消该功能。

相关文档

更多读写分离介绍请参见如下文档:

适用于

  • 云数据库RDS