参考资料
如何管理 OceanBase 数据库连接
这篇官方文档将连接管理讲解的很详细,但是位置比较难找,不在社区版和企业版的数据库手册中,在社区版的DBA入门教程中,因此特意提出:

另对文中内容进行了测试,并做了一些运维经验上的总结,更便于理解重点。
连接模型
和传统数据库不一样,因为有 OBProxy 的存在,因此连接分为:
- 客户端与OBProxy的连接为前端连接
- OBProxy与OBServer的连接为后端连接

如何管理连接
- 前端连接只能连 OBProxy 管理,并且只能展示和管理当前连接的这个 OBProxy 上的前端连接;
- 后端连接可以在 OBProxy 上管理(使用特殊语法),也可以在 OBServer 上管理。
1. 在 OBProxy 上管理连接
小结
- 在 OBProxy 上执行
kill id
,中断的是前端连接(对应的后端连接也会一并中断)。因此在 obproxy 上 kill [后端连接ID] 会报错"Unknown thread id"; - 如果要在 OBProxy 上kill后端连接,需要使用特殊语法:
kill proxysession [前端连接ID] [对应的后端连接ss_id(非后端连接ID)];
; - OBProxy 上管理前端连接有诸多限制:
- 只能看到连接的那个 OBProxy 上的前端连接
- 只有在 sys 租户上可以看到这个 OBProxy 上的所有前端连接
- 只能kill相同租户的前端连接
换句话说:要kill业务租户的前端连接,你只能先在 sys 租户上查找到对应的连接,然后用对应的租户管理员登录,再执行 kill 命令(个人觉得这相当别扭,普通租户无法看到同一个OBProxy上的其他连接,却能 kill,也许这是一个 bug,当前测试版本是3.2.3.x)
1.1 show processlist 查看前端连接
在 OBProxy 上执行 show processlist;
命令所展示的 ID 即为前端连接 ID,需要注意的是这里不会展示连接正在执行的SQL:

1.2 kill 前端连接
sys 租户可以查看连接的这个 OBProxy 上的所有租户的前端连接,但是却只能 kill 同样 sys 租户的前端连接,而不能 kill 其他普通租户的前端连接(这个不太合理,sys 租户应该有权限 kill 所有连接):
另一个问题是普通租户以管理员用户登录后:
-
show processlist;
看不到这个租户的在同一个 OBProxy 的其他前端连接; - 但却能 kill 同一个 OBProxy 其他前端连接。

1.3 show proxysession
show proxysession;
命令是对 show processlist 的补充,能多输出两个信息:
- proxy_sessid:这个 ID 会在 OBServer 上与后端连接一一对应,是前端连接的另一种标识,但是 kill 前端连接时不能用这个 ID
- Cluster:因为一个 obproxy 可以连多个 OB 集群,因此可以通过这个字段知道前端连接属于哪个集群

1.4 show proxysession attribute
show proxysession attribute 549810;
这个命令可以查看ID为 549810 的前端连接对应有哪些后端连接,以及这些后端连接的信息,其中:
- server_sessid 是 OBServer 上后端连接ID;
- ss_id 是是 OBProxy 内部标识的后端连接(OBProxy 跟 OBServer 连接)的 ID 号,在 OBProxy 上 kill 后端连接要是用这个ID。

1.5 kill proxysession [前端连接ID] [后端连接标识]
注意这是一个特殊语法,可以用来在 OBProxy 上 kill 后端连接。前一步使用 show proxysession attribute 549810;
得到了前端连接对应的后端连接,接下来可以使用 kill proxysession 549810 [ss_id];
来中断对应的后端连接。
kill 后这个前端连接只剩一个后端连接了,在发起查询时,如果有需要会自动创建新的后端连接:

1.6 show full processlist
在 OBProxy 上执行 show full processlist;
展示的是 OB 集群的所有 OB 节点上的后端连接:

2. 在 OBServer 上管理连接
在 OBServer 上管理连接相对简单很多:只能查看&kill后端连接。
2.1 show processlist
连接任意一个 OBServer 节点执行 show processlist;
命令可以查看本集群所有 OB 节点上的后端连接:
- ID 就是后端连接ID;
- Host 是客户端IP,通常是 OBProxy、客户端的 IP。

2.2 show full processlist
show full processlist;
同样查看的是本集群所有 OB 节点上的后端连接,只是相比 show processlist;
多了几个信息:
- Tenant 租户信息
- Ip 即 OBServer 的IP
- Port 即 OBServer 的端口
- Proxy_sessid 即对应的前端连接标识(非前端连接ID)

2.3 kill
kill [后端连接ID];
命令可以中断集群中任意 OB 节点上的后端连接,前端连接不受影响,当对应的前端连接发起查询时,会自动新建后端连接。
__all_virtual_processlist
这个系统视图用来查询所有后端连接,输出基本和 show full processlist 一致。方便之处在于可以通过条件筛选对应的连接。
网友评论