【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手 ] 即可召唤小助手,欢迎试用!
select /* MONITOR_AGENT */ case when cnt is null then 0 else cnt end as cnt, tenant_name, tenant_id from (select DBA_OB_TENANTS.tenant_name, DBA_OB_TENANTS.tenant_id, cnt from DBA_OB_TENANTS left join (select count(1) as cnt, tenant as tenant_name from GV$OB_PROCESSLIST where svr_ip = ‘10.104.100.11’ and svr_port = 2881 group by tenant) t1 on DBA_OB_TENANTS.tenant_name = t1.tenant_name where DBA_OB_TENANTS.tenant_type<>‘META’) t2;
| cnt | tenant_name | tenant_id |
±-----±------------±----------+
| 0 | sys | 1 |
| 0 | ocp | 1002 |
会话数计算方法正确吗,等于0正常吗
论坛小助手
2024 年12 月 4 日 20:04
#3
根据您提供的 SQL 语句以及查询结果,我们可以分析一下会话数的计算方法及其结果是否正常。
1. 会话数计算方法
您的 SQL 语句如下:
select /* MONITOR_AGENT */
case when cnt is null then 0 else cnt end as cnt,
tenant_name,
tenant_id
from (
select DBA_OB_TENANTS.tenant_name,
DBA_OB_TENANTS.tenant_id,
cnt
from DBA_OB_TENANTS
left join (
select count(1) as cnt,
tenant as tenant_name
from GV$OB_PROCESSLIST
where svr_ip = '10.104.100.11'
and svr_port = 2881
group by tenant
) t1
on DBA_OB_TENANTS.tenant_name = t1.tenant_name
where DBA_OB_TENANTS.tenant_type <> 'META'
) t2;
这个 SQL 语句的目的是计算每个租户的会话数。具体步骤如下:
从 GV$OB_PROCESSLIST
视图中获取当前活动的会话数,并按租户分组统计。
将统计结果与 DBA_OB_TENANTS
表进行左连接,确保即使某些租户没有活动会话也能显示出来。
最终结果中,如果没有活动会话的租户会显示 cnt
为 0。
2. 结果分析
根据您的查询结果:
| cnt | tenant_name | tenant_id |
+------+-------------+-----------+
| 0 | sys | 1 |
| 0 | ocp | 1002 |
2.1 会话数计算方法是否正确
从 SQL 语句来看,会话数的计算方法是正确的。它通过 GV$OB_PROCESSLIST
视图获取当前活动的会话数,并按租户分组统计,然后与 DBA_OB_TENANTS
表进行左连接,确保所有租户都显示在结果中。
2.2 会话数等于 0 是否正常
会话数等于 0 是正常的,这表示在查询时刻,这些租户没有活跃的会话。具体原因可能包括:
租户当前没有执行任何 SQL 语句。
租户的会话已经结束。
租户的连接超时或被关闭。
3. 进一步检查
如果您认为会话数应该不为 0,可以进一步检查以下几点:
时间窗口 :确保查询的时间窗口内确实有活动会话。
IP 和端口 :确保 svr_ip
和 svr_port
参数正确,指向了正确的服务器和端口。
租户状态 :检查租户的状态,确保租户是活动的。
日志 :查看 obdiag
收集的日志,确认是否有其他异常情况。
4. 总结
综上所述,您的会话数计算方法是正确的,会话数等于 0 也是正常的。如果需要进一步排查,可以按照上述建议进行检查。如果有其他问题或需要更多帮助,请联系 OceanBase 的技术支持团队。
检索到的文档如下:
0001 ~ 3999
采用SELECT * FROM oceanbase.GV$OB_PROCESSLIST WHERE STATE = ‘ACTIVE’ and TENANT = ‘sys’ ;
这种做法代表某个租户的活跃连接吗
论坛小助手
2024 年12 月 4 日 22:33
#5
根据您提供的 SQL 语句:
SELECT * FROM oceanbase.GV$OB_PROCESSLIST WHERE STATE = 'ACTIVE' AND TENANT = 'sys';
这个查询的目的是获取 sys
租户中所有状态为 ACTIVE
的活跃连接。我们可以通过以下几个方面来分析这个查询是否能代表某个租户的活跃连接。
1. GV$OB_PROCESSLIST
视图
GV$OB_PROCESSLIST
视图用于显示当前所有活跃的会话信息。这个视图包含了各个会话的详细信息,如会话 ID、用户、数据库、状态等。
2. 查询条件
STATE = 'ACTIVE'
:这个条件过滤出状态为 ACTIVE
的会话。ACTIVE
状态表示该会话当前正在执行某个操作。
TENANT = 'sys'
:这个条件过滤出属于 sys
租户的会话。
3. 结论
这个查询确实可以用来获取 sys
租户中所有状态为 ACTIVE
的活跃连接。因此,它可以代表 sys
租户的活跃连接。
4. 示例
假设查询结果如下:
+-----------+---------+--------+----------------+----------+----------------+-------------+----------------------------+----------------------------+-------+
| TENANT_ID | USER_ID | DB_ID | SVR_IP | SVR_PORT | CLIENT_IP | CLIENT_PORT | FIRST_ACTIVE_TIME | LAST_ACTIVE_TIME | STATE |
+-----------+---------+--------+----------------+----------+----------------+-------------+----------------------------+----------------------------+-------+
| 1 | 200001 | 500001 | 11.162.xx.xx | 54302 | 30.182.xx.xx | 59346 | 2024-05-31 22:23:17.359210 | 2024-05-31 22:23:17.359210 | ACTIVE|
+-----------+---------+--------+----------------+----------+----------------+-------------+----------------------------+----------------------------+-------+
这个结果表示 sys
租户有一个活跃的连接,其状态为 ACTIVE
。
5. 注意事项
租户名称 :确保 TENANT
列的值与租户名称一致。不同的租户可能有不同的名称。
状态 :STATE
列的值可以有多种状态,如 ACTIVE
, SLEEP
, INIT
等。ACTIVE
表示当前正在执行操作的会话。
时间窗口 :查询结果反映的是查询时刻的活跃连接情况。如果需要持续监控,可以定期执行该查询。
6. 综合分析
综上所述,您的查询语句:
SELECT * FROM oceanbase.GV$OB_PROCESSLIST WHERE STATE = 'ACTIVE' AND TENANT = 'sys';
确实可以代表 sys
租户的活跃连接。如果您需要监控其他租户的活跃连接,只需将 TENANT
条件更改为相应的租户名称即可。
希望这能解答您的疑问。如果有其他问题或需要进一步的帮助,请随时联系。
检索到的文档如下:
OBKV-HBase 相关视图
检查 OBServer 状态
并行执行问题诊断
查看内存的使用信息
GV$OB_LOG_STAT
GV$OB_TRANSACTION_PARTICIPANTS
oceanbase.DBA_OB_TENANTS
V$OB_LOG_STAT
OceanBase 自有视图
负载均衡
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)