OceanBase:如何管理连接?

2023-03-02  本文已影响0人  轻松的鱼

参考资料

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

另对文中内容进行了测试,并做了一些运维经验上的总结,更便于理解重点。

连接模型

和传统数据库不一样,因为有 OBProxy 的存在,因此连接分为:

如何管理连接

  1. 前端连接只能连 OBProxy 管理,并且只能展示和管理当前连接的这个 OBProxy 上的前端连接;
  2. 后端连接可以在 OBProxy 上管理(使用特殊语法),也可以在 OBServer 上管理。
1. 在 OBProxy 上管理连接

小结

  1. 在 OBProxy 上执行 kill id,中断的是前端连接(对应的后端连接也会一并中断)。因此在 obproxy 上 kill [后端连接ID] 会报错"Unknown thread id";
  2. 如果要在 OBProxy 上kill后端连接,需要使用特殊语法:kill proxysession [前端连接ID] [对应的后端连接ss_id(非后端连接ID)];
  3. 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 所有连接):

另一个问题是普通租户以管理员用户登录后:

1.3 show proxysession

show proxysession; 命令是对 show processlist 的补充,能多输出两个信息:

1.4 show proxysession attribute

show proxysession attribute 549810; 这个命令可以查看ID为 549810 的前端连接对应有哪些后端连接,以及这些后端连接的信息,其中:

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 节点上的后端连接:

2.2 show full processlist

show full processlist; 同样查看的是本集群所有 OB 节点上的后端连接,只是相比 show processlist; 多了几个信息:

2.3 kill

kill [后端连接ID]; 命令可以中断集群中任意 OB 节点上的后端连接,前端连接不受影响,当对应的前端连接发起查询时,会自动新建后端连接。

__all_virtual_processlist

这个系统视图用来查询所有后端连接,输出基本和 show full processlist 一致。方便之处在于可以通过条件筛选对应的连接。

上一篇 下一篇

猜你喜欢

热点阅读