Skip to content

Latest commit

 

History

History
38 lines (22 loc) · 2.1 KB

connection-management.md

File metadata and controls

38 lines (22 loc) · 2.1 KB

连接管理

作为TiDB的应用层代理中间件, Weir Proxy的一项重要职责就是管理客户端的连接与后端TiDB Server集群的连接. Weir Proxy使用连接池机制, 客户端连接可以复用数据库连接执行SQL请求.

后端连接池

Weir Proxy会为每个租户的TiDB Server集群中的每个实例创建一个连接池, 连接池的配置参数是租户级别的, 其最大连接数是确定的. 客户端在向Weir Proxy发起SQL查询请求时, Weir Proxy会首先根据集群负载均衡策略选出一个后端实例, 从该后端实例的连接池中取出一个连接, 根据客户端连接当前状态初始化连接后, 执行SQL查询语句, 查询完成后再放回连接池中.

连接绑定

对于大多数普通SQL查询, 都可以使用连接池完成. 但是对于一些依赖后端连接状态的查询场景, 连接池就不适用了. 例如: 事务, Prepare查询.

面对这些场景, Weir Proxy的做法是: 在状态改变时从后端连接池取出一个连接, 并"绑定"到当前客户端连接上, 期间客户端连接的所有查询请求全部使用这个绑定连接, 直到状态恢复时, 再将连接放回连接池.

以下命令可能会触发后端连接绑定 (是否真正绑定与当前状态有关):

  • BEGIN
  • SET AUTOCOMMIT = 0
  • Binary Prepare (COM_STMT_PREPARE命令)

以下命令可能会触发后端连接解绑 (是否真正解绑与当前状态有关):

  • COMMIT / ROLLBACK
  • SET AUTOCOMMIT = 1
  • Binary Close (COM_STMT_CLOSE命令)

连接状态传递

客户端连接在执行某些SQL语句时会改变自身状态, 这些状态会影响SQL语句的执行, 例如: 切换Database, 设置系统变量等.

当客户端连接执行这些语句时, Weir Proxy会记录这些连接状态, 而在执行真正的查询请求时, Weir Proxy会对后端连接 (连接池连接或绑定连接) 执行一次初始化操作, 将后端连接的状态与客户端连接状态同步, 然后再执行查询请求.

目前支持传递给后端连接的状态:

  • USE DB
  • 设置Session级别系统变量 (TODO)