推特 阿里云技术文档正文

读写分离_自定义 HINT_用户指南_分布式关系型数据库 DRDS

admin 阿里云技术文档 2020-02-11 189 0
阿里云服务器优惠

读写分离

本文适用于 DRDS 5.3 及以上版本,早期版本请参考DRDS 5.2 HINT 读写分离文档

DRDS 提供了一种针对应用层透明的读写分离实现。但是由于 RDS 主实例与只读实例之间数据的同步存在着毫秒级别的延迟,如果在主库中变更以后需要马上读取变更的数据,则需要保证将读取数据的 SQL 下发到主实例中。针对这种需求,DRDS 提供了读写分离自定义 HINT,指定将 SQL 下发到主实例或者只读实例。

语法

  1. /*+TDDL:
  2. master()
  3. | slave()
  4. */

在该自定义 HINT 中可以指定 SQL 是在主实例上执行还是在只读实例上执行。对于/*+TDDL:slave()*/,如果一个主 RDS 实例存在多个只读实例,那么 DRDS 会根据所分配的权重随机选择一个只读实例执行 SQL 语句。

注意:

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

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

示例

  • 指定 SQL 在主实例上执行:

    1. SELECT /*+TDDL:master()*/ * FROM table_name;

    在 SQL 第一个关键字之后添加 /*+TDDL:master()*/ 这个自定义 HINT 后,这条 SQL 将被下发到主实例上执行。

  • 指定 SQL 在只读实例上执行:

    1. SELECT /*+TDDL:slave()*/ * FROM table_name;

    在 SQL 第一个关键字之后添加 /*+TDDL:slave()*/ 这个自定义 HINT 后,这条 SQL 将会根据所分配的权重被随机下发到某个只读实例上执行。

注意

  • 此读写分离自定义 HINT 仅仅针对非事务中的读 SQL 语句生效,如果 SQL 语句是写 SQL 或者 SQL 语句在事务中,那么还是会下发到 RDS 的主实例执行。
  • DRDS 针对 /*+TDDL:slave()*/ 自定义 HINT,会从只读实例中按照权重随机选取一个下发 SQL 语句执行。若只读实例不存在时,不会报错,而是选取主实例执行。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论

-----