【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】OCP有 metrics 监控项,如何用SQL查询 OceanBase 租户请求队列大小与SQL 在等待队列中等待耗时,此SQL可以反应OB整体性能与是否存在排队阻塞现象
[@论坛小助手]
【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】OCP有 metrics 监控项,如何用SQL查询 OceanBase 租户请求队列大小与SQL 在等待队列中等待耗时,此SQL可以反应OB整体性能与是否存在排队阻塞现象
[@论坛小助手]
针对您的问题,我们可以使用 obdiag 来收集有关 SQL 在请求队列中的等待情况的信息,尤其是对于租户请求队列大小及 SQL 等待耗时的数据。这可以帮助我们判断是否存在排队阻塞的情况。
obdiag gather scene run --scene=observer.perf_sql --env "{db_connect='-h<主机IP> -P<端口号> -u<用户名>@<租户名> -p<密码> -D<数据库名>', trace_id='<追踪ID>'}"
在这个命令中,请替换 <主机IP>、<端口号>、<用户名>、<租户名>、<密码> 和 <数据库名> 为您的实际值。trace_id 可以通过查看具体的 SQL 请求获取,如果您不确定如何获得这个值,可以省略这个参数。
如果您希望直接通过 SQL 查询租户请求队列的大小和 SQL 在等待队列中的耗时,可以考虑以下查询语句:
查询当前正在运行的 SQL 会话及其状态:
SELECT * FROM gv$session WHERE tenant_id = (SELECT tenant_id FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = '<租户名称>');
此查询将显示所有当前租户的活动会话。
查询 SQL 的等待事件:
SELECT * FROM gv$sql_audit WHERE tenant_id = (SELECT tenant_id FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = '<租户名称>') AND sql_id = '<SQL_ID>';
该查询可以帮助您了解特定 SQL 语句的执行情况,包括等待时间等。
查询租户请求队列的大小:
SELECT * FROM oceanbase.__all_tenant_queue_stat WHERE tenant_id = (SELECT tenant_id FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = '<租户名称>');
请根据实际情况替换 <租户名称> 和 <SQL_ID>。
希望以上信息对您有所帮助,如果有任何进一步的问题或需要更详细的指导,请随时告诉我。
附上敏捷诊断工具 obdiag 使用帮助链接
可以通过gv$ob_sql_audit这个表查看一下
我也想通过 SELECT /*+ read_consistency(weak) query_timeout(100000000) */ tenant_name, SQL_ID, query_sql AS query_sql FROM oceanbase.GV$OB_SQL_AUDIT WHERE time_to_usec(NOW(6)) - request_time < 10601000000 AND tenant_name=‘ocp_monitor’ AND QUERY_SQL IS NOT NULL; 反查, 不知道是哪个SQL