【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】 OB
【 使用版本 】 5.7.25-OceanBase_CE-v4.3.5.4
【问题描述】执行查询 select * from GV$OB_COMPACTION_DIAGNOSE_INFO 报60秒 query timeout
-- 1. 临时设置会话级查询超时为5分钟(300秒),仅对当前连接生效
SET ob_query_timeout = 300000000; -- 单位:微秒(300*1000000)
-- 2. 简化查询:只查核心字段,避免SELECT *(该视图字段超50个,很多字段无意义)
SELECT
tenant_id, -- 租户ID
svr_ip, -- 服务器IP
compaction_type, -- 合并类型(MINOR/MAJOR)
table_id, -- 表ID
start_time, -- 合并开始时间
end_time, -- 合并结束时间
status -- 合并状态
FROM GV$OB_COMPACTION_DIAGNOSE_INFO
WHERE 1=1
AND start_time >= '2025-01-01 00:00:00' -- 缩小时间范围
AND tenant_id = 1001; -- 指定租户(避免查全集群所有租户)
分节点查询 :GV$OB_COMPACTION_DIAGNOSE_INFO 是集群级视图,可先登录单个 OBServer 节点,查询V$OB_COMPACTION_DIAGNOSE_INFO (单节点视图),避免跨节点扫描:
是查询太慢了,临时改超时是已知的办法
应该是有个节点执行慢,gv表是需要所有节点返回结果后才返回的。
可以查下 gv$ob_sql_audit 看下哪个节点执行慢,去对应节点看下是否有异常。
查询慢的原因是 OB 存在请求队列排队导致耗时异常,扩大租户内存后就缓解了。