开发者社区> 问答> 正文

只读实例延迟切断

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

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

语法

/!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 秒:

/!TDDL:SQL_DELAY_CUTOFF=5*/SELECT * FROM table_name;
在 SQL 语句指定了 SQL_DELAY_CUTOFF 的值为 5,当备库的 SQL_DELAY 值达到或超过5秒时,查询语句会下发到主实例执行。

配合其他自定义 HINT 使用:

/!TDDL:SLAVE AND SQL_DELAY_CUTOFF=5*/SELECT * FROM table_name;
备库延迟切断注释也可以配合其他注释使用,该 SQL 查询请求默认会被下发到只读实例,但是当出现主备复制延时达到或超过 5 秒时,会下发到主实例。

展开
收起
猫饭先生 2017-10-30 13:46:18 1958 0
1 条回答
写回答
取消 提交回答
  • 如果SQL查询的时间超过5秒,那是没法接受的,是否可以优化SQL语句

    2021-10-12 11:41:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载