高频SQL导致集群资源压力过大,是否可以通过工具或者相关命令进行处理?

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】OB
【 使用版本 】V4
【问题描述】在生产环境中,某些高频执行的SQL(可能是查询或写入)会瞬时消耗大量CPU或内存资源,尤其在业务高峰或资源不足时,可能导致整个集群服务受影响。

1 个赞

可以通过ocp的sql诊断去定位处理

1 个赞

系统快照表吗

1 个赞

ocp的sql诊断查看top sql


或者黑屏化查询gv$ob_porcesslist 查找当前处于 ACTIVE 状态的长时间运行的 SQL

SELECT 
    USER,
    tenant,
    sql_id,
    concat(time, 's') as time,
    info,
    svr_ip,
    svr_port,
    trace_id
FROM GV$OB_PROCESSLIST
WHERE STATE = 'ACTIVE'
ORDER BY time DESC 
LIMIT 1;
2 个赞

解决方案:
使用OceanBase的Outline功能,对特定的高频SQL实施并发控制。

sql
– 1. 在OCP的SQL诊断或TopSQL页面找到高频率的SQL文本及其SQL_ID:cite[3]:cite[8]
– 2. 通过SQL_ID为该SQL创建Outline,限制其并发度
CREATE OUTLINE outline_limiter ON “ED570339F2C856BA96008A29EDF04C74”
USING HINT /+max_concurrent(1)/;
说明:

“ED570339F2C856BA96008A29EDF04C74” 需要替换为实际的SQL_ID。SQL_ID需要用双引号包围。

/+max_concurrent(1)/ 是一个Hint,表示在单台OBServer节点上,此SQL同时执行的并发数被限制为1。

执行后,该SQL的并发执行会受到限制,从而为集群“刹车”,避免资源被耗尽。你可以根据业务需要调整并发数值。

2 个赞

多谢分享~

1 个赞

666

1 个赞

多谢分享~

1 个赞