全部产品
分布式关系型数据库 DRDS

只读实例延迟切断

更新时间:2017-08-17 14:15:52   分享:   

正常情况下,如果给 DRDS 数据库的 RDS 主实例配置了只读实例,并且给主实例和只读实例都设置了读流量,那么 DRDS 会根据读写比例将 SQL 下发到主实例或者是只读实例执行。但是如果主实例与只读实例的异步数据复制存在较大的延迟,将 SQL 下发到只读实例执行就会导致出错或者返回错误结果。

只读实例延时切断会根据主备复制最大延时时间判断将所执行的 SQL 下发到主实例还是只读实例。

语法

  1. /!TDDL:SQL_DELAY_CUTOFF=time*/

在自定义 HINT 中指定 SQL_DELAY_CUTOFF 的值,当备库的 SQL_DELAY 值(MySQL主备复制延迟)达到或超过 time 的值(单位秒)时,查询语句会被下发到主实例。

注意:

  • DRDS 自定义 HINT 支持 /!TDDL:hint command*//*TDDL:hint command*/ 两种格式。

  • 如果使用 /*TDDL:hint command*/ 格式,在使用 MySQL 官方命令行客户端执行带有 DRDS 自定义 HINT 的 SQL 时,请在登录命令中加上 -c 参数。否则,由于 DRDS 自定义 HINT 是以 MySQL 注释 形式使用的,该客户端会将注释语句删除后再发送到服务端执行,导致 DRDS 自定义 HINT 失效。具体请查看 MySQL 官方客户端命令

示例

  • 指定主备复制延迟时间为 5 秒:

    1. /!TDDL:SQL_DELAY_CUTOFF=5*/SELECT * FROM table_name;

    在 SQL 语句指定了 SQL_DELAY_CUTOFF 的值为 5,当备库的 SQL_DELAY 值达到或超过5秒时,查询语句会下发到主实例执行。

  • 配合其他自定义 HINT 使用:

    1. /!TDDL:SLAVE AND SQL_DELAY_CUTOFF=5*/SELECT * FROM table_name;

    备库延迟切断注释也可以配合其他注释使用,该 SQL 查询请求默认会被下发到只读实例,但是当出现主备复制延时达到或超过 5 秒时,会下发到主实例。

本文导读目录
本文导读目录
以上内容是否对您有帮助?