暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

案例分享:OceanBase数据库SQL优化

IT那活儿 2023-07-26
536

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!




问题现象



OB库某租户的OBserver主机前几天出现CPU冲高到100%的情况。推测是有SQL执行导致CPU冲高



问题分析



1. 通过OCP平台的SQL诊断功能,发现主机CPU冲高时都跑了同一条SQL,该SQL响应时间超长,且占用CPU时间久。


2. 查看其执行计划,发现该SQL当时的执行计划走的索引和正常时候不一样。
正常时走的索引应该是SERVICE_NUMBER字段,但是当时走的是STATUS字段,走STATUS字段时的效率很低。如下图:
3. 我们查询SERVICE_NUMBER字段是VARCHAR2类型,在BCV集群测试发现,在该SQL的WHERE条件中的SERVICE_NUMBER的传参不带单引号时,其执行计划如下:
在SQL的WHERE条件中的SERVICE_NUMBER的传参带单引号时,其执行计划如下:
可以看到不带单引号的执行效率低下。
4. 通过OB官网我们可以知道以下信息:
大家可以到原网址看一下文献,地址如下:
隐式类型转换相关-OceanBase 数据库 -OceanBase文档中心-分布式数据库使用文档



问题解决



1. 让业务核实当时执行的SQL的传参中,SERVICE_NUMBER字段是否传入了非字符串类型以外的值。传参必须与字段类型一样,为字符串类型的值。

2. 在OCP平台上将该SQL绑定了outline,发现后续的执行都走了对的索引,执行速度快。


END


本文作者:事业二部(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论