odp id 疑问

可能是odp的一个bug 我问一下 相关的同学

我找了研发 connection_id 和show proxysession 的 id列值一样 这个正常

如果通过obproxy,业务拿到的connection id 就是这个cs_id,业务需要根据id终止请求:kill query / kill connection 都是 proxy 提供的这个cs_id, 这个id 就是32位唯一的整数。
官方文档:
“cs_id 为 ODP 内部标记的每个 Client 的 id 号,connection_id 为整个 OceanBase 数据库标记的每个 Client 的 id 号。connection_id 通过 SELECT CONNECTION_ID(); 语句获取。”
官网的文档解释:
ODP作为反向代理,业务看到的ODP就是一个整体OceanBase 数据库。 ODP分配的connection_id,就是数据库client id。

那样的话。 show proxysession id 看到的 server_sessid 还会是 show processlist看到的数据库的id不??

文档解释的应该是observer 节点会话id * ID:进程的 ID,即当前会话的 Client Session ID,该 ID 是会话在客户端中的唯一标识。

如果是 observer的会话id ,那么是不是 应该使用 gv$ob_processlist 查询到才对呢 ???您试下能查询到不,我这查询不到

我这边没有问题 你可以看看



你可以把你操作的截图发一下


你看看我的, 您把您的版本发下 ?


你这个是直连查的 还是odp连接查的

是链接 odp 查询的 。

–下面是直连的测试



我就3台机器 ,都不行

我重新给你说一下 示例的步骤
1、通过odp连接


2、在重新打开一个窗口直连 通过视图或者show processlist查询

以上就可以测试 你是这样操作的么?

对的,就是你这样操作的。

你看我就三个节点 ,都是2881端口。 能看到servr_sessid的是 2883端口 。 还都是 sys 租户

正常情况下 这个端口应该是2881 你说的是截图的这个server_port端口么?

image
你看这次的截图

应该也是正常的 ODP 和 后端 server的每一个session 都会建立一个连接 建链后的那个session 连接 可能已经关闭了 所以测试的时候 测试不到 也属于正常

1 个赞

但是 为啥 不用 server_sessid 查询使用 cs_id 就能查询到呢 ?

设计的时候 应该都可以查 只是建链后的那个session 连接 可能已经关闭了 没有办法查了

https://www.oceanbase.com/docs/common-odp-doc-cn-1000000002024365

是这个原因。可能我这的版本太高了。

1 个赞

这也是个原因 不过上面说的也是个原因

@论坛小助手