MySQL 路由器允许服务器连接被池化和共享。如果客户端断开连接,服务器连接将被移到连接池中,以便再次使用。如果客户端连接处于空闲状态超过指定时间,服务器连接将处于空闲状态,直到建立新的客户端连接。这降低了服务器需要维护的连接数量,并释放了通常与空闲连接绑定的资源。
MySQL 路由器跟踪客户端执行的语句和会话的 SQL 状态,以确保客户端连接不会丢失其会话状态。如果连接被共享,重新连接的会话将处于客户端离开时的状态。如果不可能,连接将不会被共享。
由语句生成的警告和错误将在客户端请求时捕获并返回。会话变量也是如此。
默认的 I/O 线程数与主机支持的 CPU 线程数相同,可以使用 threads
配置选项进行配置。
在 PASSTHROUGH 模式下或如果
server-ssl-mode=AS_CLIENT
且client-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