MySQL 路由器 8.4  /  部署 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