ob集群有一个节点执行sql慢

ob: 社区版4.4.1.0
部署:3台配置一样的ecs

今天发现,一个sql,在1,2上面执行都是正常的,但是3却一直报超时(50秒)
用top命令查看,3这个cpu占用经常在200%以上,其他两个大多在150%以下
ocp上看,也是占用要高一些

请教如何排除?

1 个赞

看执行计划。可能那个节点的执行计划跟其他节点不一样

1 个赞

plan_ob3.txt (85.3 KB)
plan_ob1.txt (85.0 KB)

执行explan extented xxx,
ob1是正常节点的log
ob3是异常节点的log

麻烦帮忙分析一下,谢谢!

1 个赞

节点1的执行计划能接受,可以直接用节点1的执行计划绑定下。

请指教如何操作?

用ocp的话,ocp界面SQL诊断,找到这条SQL,详情里面执行计划那可以直接绑定。
用命令行就是建 Outline,参考:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001431842

先用obdiag收集一下 plan_monitor
obdiag gather plan_monitor --trace_id YB420BA2D99B-0005EBBFC45D5A00-0-0 --env “{db_connect=’-hxx -Pxx -uxx -pxx -Dxx’}”
https://www.oceanbase.com/docs/common-obdiag-cn-1000000004494424

看一下文档 是从gv$ob_sql_audit查出来的

obdiag_gather.zip (441.9 KB)
obdiag_log.txt (90.0 KB)

请看刚抓的log


从执行计划来看 应该是这个地方慢 导致的
有等待时间,应该是等待远程节点返回任务结果消耗的时间比较大。

抓的信息不全 gv$ob_sql_audit信息被清理了 有些信息看不到 看看能否在抓一次

我试了几次,最后都是提示ob_sql_audit is empty,感觉这个ob_sql_audit表清得很快,有没有参数设置大小的?

可以通过调整 ob_sql_audit_percentage 系统变量来控制 SQL Audit 所使用的内存占租户内存的百分比。默认情况下,ob_sql_audit_percentage 设置为 3,表示 SQL Audit 使用的内存占租户内存的 3%。你可以根据需要调整这个百分比,范围是 [0, 80]。
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478746

改为10以后,现在抓全了

obdiag_gather.zip (438.3 KB)

ob_trace_log.txt (18.5 KB)

请帮忙分析,谢谢!

看着是远程拉取数据的时候 耗时比较长 全部都在等待上 可以考虑创建表组的方式解决问题


看着走的索引 应该没有问题 可以考虑h g表使用hash join试一下/*+LEADING(@“SEL$9C7D1284” (“h”@“SEL$3” “g”@“SEL$3”)) USE_HASH(@“SEL$9C7D1284” “g”@“SEL$3”) */