包含标签:多路路由 的文章
  • MySQL中间件之ProxySQL(12):禁止多路路由

    1.multiplexing multiplexing,作用是将语句分多路路由。开启了multiplexing开关,读/写分离、按规则路由才能进行。但有时候,有些语句要求路由到同一个主机组,甚至是同一个主机组中的同一个节点上。这时会自动禁用multiplexing。禁用multiplexing后,语句会根据同一个连接进行路由。 也就是说,在禁用multiplexing情况下,会将语句路由到同一个主机组中的同一个节点上。 什么情况下会禁用多路路由(disable multiplexing)? 激活事务时 当某连接中激活了一个事务,则在该事务提交或回滚之前,multiplexing将一直被禁用。 表被锁 当执行了LOCK TABLE, LOCK TABLES 或 FLUSH TABLES WITH READ LOCK 时,将一直禁用multiplexing,直到执行UNLOCK TABLES。 使用GET_LOCK()时 如果执行了GET_LOCK(),将一直禁用multiplexing,且永不再次启用。 使用某些特定的会话/用户(session/user)变量 所有查询的query_digest部分包含了@的都将禁用multiplexing,且永不再次启用。 下面的命令是类似的情况,都会禁用multiplexing且不再次启用: SET SQL_SAFE_UPDATES=?,SQL_SELECT_LIMIT=?,MAX_JOIN_SIZE=? (mysql --safe-updates) SET FOREIGN_KEY_CHECKS SET UNIQUE_CHECKS SET AUTO_INCREMENT_INCREMENT (v 1.4.4+) SET AUTO_INCREMENT_OFFSET (v 1.4.4+) SET GROUP_CONCAT_MAX_LEN (v 1.4.4+) 但下面两个语句是例外,因为它们被硬编码为不禁用multiplexing: SELECT @@tx_isolation SELECT @@version 之所以要硬编码这两个例外,是因为很多应用程序在每个连接中都会执行这两个语句。 使用SQL_CALC_FOUND_ROWS 如果查询语句中包含了SQL_CALC_FOUND_ROWS,那么该连接上将禁用multiplexing且不再启用。 临时表 如果执行了CREATE TEMPORARY TABLE,那么该连接上将禁用multiplexing且不再启用。 使用PREPARE 如……

    SE_You 2024-03-28
    28 0 0