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