云数据库 GAUSSDB(FOR MYSQL)-GaussDB(for MySQL)数据库代理简介:请求路由规则

时间:2024-09-23 10:09:33

请求路由规则

  • 只发往主节点的写请求
    • INSERT、UPDATE、DELETE。
    • 所有DDL操作(建表/库、删表/库、变更表结构、权限等)。
    • 所有事务中的请求(事务拆分开启时部分读请求可能发送至只读节点,详见事务拆分)。
    • 用户自定义函数。
    • 存储过程。
    • EXECUTE语句。
    • Multi Statements。
    • 使用到临时表的请求。
    • 所有对用户变量的更改。
    • KILL(SQL语句中的KILL,非命令KILL)。
  • 发往主节点的读请求
    • 如果查询语句被放在事务中,事务请求都会路由到主实例。如果在查询语句前设置set autocommit=0时也当做事务处理路由到主实例。
    • 如果所有只读节点都均异常或只读节点权重为0时,则查询会路由到主实例。对于成功开启读写分离功能的实例,您可以设置其主实例和只读实例的权重。
    • 在执行SQL语句时:
      • 如果执行了Multi-Statements(如“insert xxx;select xxx”),当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。
      • 带锁的读操作(如SELECT for UPDATE)会被路由到主节点。
      • 当使用/*FORCE_MASTER*/这个Hint语句时,会被路由到主实例。
      • 如果执行了Handler语句,默认后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。
    • SELECT last_insert_id()。
    • 所有对用户变量的查询。
  • 发往只读节点或主节点
    • 非事务中的SELECT。
    • COM_STMT_EXECUTE命令。
  • 总是发往所有节点
    • 所有系统变量的更改。
    • USE命令。
support.huaweicloud.com/usermanual-gaussdbformysql/gaussdbformysql_11_0016.html