MySQL 路由器 9.0  /  部署 MySQL 路由器  /  连接共享与重用

3.4 连接共享与重用

MySQL 路由器允许服务器连接被池化和共享。如果客户端断开连接,服务器连接将被移到连接池中,以便再次使用。如果客户端连接处于空闲状态超过指定时间,服务器连接将处于空闲状态,直到建立新的客户端连接。这降低了服务器需要维护的连接数量,并释放了通常与空闲连接绑定的资源。

MySQL 路由器跟踪客户端执行的语句和会话的 SQL 状态,以确保客户端连接不会丢失其会话状态。如果连接被共享,重新连接的会话将处于客户端离开时的状态。如果不可能,连接将不会被共享。

由语句生成的警告和错误将在客户端请求时捕获并返回。会话变量也是如此。

注意

默认的 I/O 线程数与主机支持的 CPU 线程数相同,可以使用 threads 配置选项进行配置。

限制

  • 在 PASSTHROUGH 模式下或如果 server-ssl-mode=AS_CLIENTclient-ssl-mode=PREFERRED,不支持连接共享。

  • 连接共享仅支持经典连接。

  • 依赖于先前会话状态的 SQL 语句在连接共享处于活动状态时将无法正常工作,除非在事务内。

  • 某些功能将使连接处于阻止其在空闲时被共享的状态。关闭或重置连接 (COM_RESET_CONNECTION) 将允许再次重用连接。

不支持的 SQL 功能

以下语句和函数在连接共享处于活动状态时不受支持,除非在事务内。

  • GET DIAGNOSTICS

  • LAST_INSERT_ID()

阻止共享的 SQL 功能

以下 SQL 功能会阻止连接被池化,直到连接被客户端关闭或重置。

  • SQL_CALC_FOUND_ROWS,

  • GET_LOCK()service_get_write_locks()SQL_CALC_FOUND_ROWS

  • 用户变量

  • 临时表

  • 预处理语句

注意

事务和 LOCK TABLES 也会阻止连接共享,直到事务关闭或锁释放。

配置

使用以下选项配置连接共享

以下是在引导期间配置连接共享的示例

        --conf-set-option=routing:bootstrap_rw.connection_sharing=1 
        --conf-set-option=routing:bootstrap_ro.connection_sharing=1 
        --conf-set-option=connection_pool.max_idle_server_connections=32