阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

SQL Profile不起作用的原因是什么?

313次阅读
没有评论

共计 2011 个字符,预计需要花费 6 分钟才能阅读完成。

导读 对于 SQL PROFILE 和 SQL PLAN BASELINE,如果选择错误,就很容易引发不可预知的隐患,因此需要十分谨慎的选择。Oracle 建议通过 SPM 的建议来选择,而不要依靠 DBA 的自己判断来选择,从而避免错误使用。不过我觉得遇到类似问题,往往都和索引设计比较混乱有关,优化索引设计可以从更上游去解决此类问题。​

有个客户前阵子一条 SQL 因为统计信息问题走错执行计划,导致 CPU 资源耗尽,系统出现严重故障,必须下线部分功能才临时解决了问题,后来在开发商的尝试下通过 SQL PROFILE 解决了错误执行计划的问题,恢复了系统。事后远程健康服务中心、Oracle 原厂都参与了故障总结,都认为是因为统计信息不准导致了执行计划错误。当时我也提出了一个更为彻底的解决方案,就是合并 USERID 和日期的两个索引为复合索引,不过因为该表太大,开发商不太愿意重建索引,所以就没有执行。

这个问题一般比较多的出在月底月初,只要产生了硬解析就容易出问题。自从加了 SQL PROFILE 也消停了一阵子。不过昨天又出问题了。

SQL Profile 不起作用的原因是什么?

早上突然 CPU 飙升到 100%,因为出过类似问题,所以很快就怀疑到了这条 SQL 上了。做个 AWRSQRPT 发现确实存在两个执行计划,又有 SQL 用错索引了,似乎 SQL PROFILE 没起作用了。

故障报到远程健康服务中心的时候,我们的支撑人员建议他们用 SQL PLAN BASELINE 固化执行计划,很快就恢复了系统。虽然问题解决的很快,不过用户还是有些疑问,为什么上回出问题时候,研发部门采取的通过 SQL PROFILE 优化执行计划的策略失效了。

实际上用户是把 SQL PROFILE 当成绑定执行计划了,其实从原理上讲,SQL PROFILE 并不是强行绑定执行计划,而是通过 SPM 分析发现统计信息与实际运行情况不符,因此通过 SQL PROFILE 设置了一些 TABLE_STATS hint,从而让优化器可以使用更为精准的生成执行计划。下面这张图来自于 Oracle 的官方文档,可以很好的解释 SQL PROFILE 发挥作用的机理。

SQL Profile 不起作用的原因是什么?

在 SQL PROFILE 提供的 HINT 中,并没有指定执行计划的内容,而只是设定了一些统计信息的纠正提示。因此设置了 SQL PROFILE 的 SQL 语句,SQL 解析的时候,会使用 PROFILE 中的对象的统计信息来纠正执行计划。这样做的好处是灵活,比如某张表上的索引修改了。这条 SQL 解析的时候会考虑这些因素,选择较好的执行计划。不过也有不好的地方,那就是某些时候,执行计划还是会错误。

SQL PROFILE 是 Oracle 10g 引入的新功能,从 11g 开始,Oracle 也看到了 SQL PROFILE 存在的不足,因此引入了一个新的功,SQL PLAN BASELINE。SQL PLAN BASE LINE 的作用与 SQL PROFILE 类似,不过采取的方法完全不同。按照 ORACLE 官方文档上的说法,SQL PLAN BASELINE 是用于避免存在问题的执行计划的。SQL PLAN BASELINE 采取的是强行绑定执行计划的方式。

SQL Profile 不起作用的原因是什么?

上面这张图也来自于 Oracle 的官方文档,这张图十分清晰,从上面我们可以看出,SQL PROFILE 是用于纠正过去错误的执行计划的,但是并不限定今后不会再次使用这个错误的执行计划。而 SQL PLAN BASELINE 是用于确保以后不会使用错误的执行计划的。

SQL PLAN BASELINE 是一组可接受的计划。每个计划都使用一组 Outline hint 来实现,这些 hint 指定了特定的计划。而与之不同的是,SQL PROFILE 也使用 hint 实现,但这些 hint 没有指定任何特定的计划,仅仅纠正了优化器估算成本时产生的错误统计信息。

因为 SQL PROFILE 不会将优化器约束到任何一个计划,所以 SQL PROFILE 比 SQL PLAN BASELINE 更灵活。初始化参数和优化器统计信息的更改使优化器能够选择更好的计划。而 SQL PLAN BASELINE 一旦设定,那么今后这条 SQL 就只能使用一个固定的执行计划了。当某条 SQL 根据绑定变量的不同会有多个不同的最优执行计划的时候,SQL PROFILE 可以充分发挥其灵活性。但是 SQL PROFILE 会有一定的出错的可能性。

SQL PLAN BASELINE 就简单粗暴的多了,它是强制指定执行计划。这对于某条 SQL 只有一个唯一的最优执行计划的时候是最为有效的。不过它的缺陷是缺乏灵活性。

对于 SQL PROFILE 和 SQL PLAN BASELINE,如果选择错误,就很容易引发不可预知的隐患,因此需要十分谨慎的选择。Oracle 建议通过 SPM 的建议来选择,而不要依靠 DBA 的自己判断来选择,从而避免错误使用。不过我觉得遇到类似问题,往往都和索引设计比较混乱有关,优化索引设计可以从更上游去解决此类问题。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2011字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7803211
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
Python自学26 – Cookie和Session

Python自学26 – Cookie和Session

Python 自学 26 – Cookie 和 Session 在学习 Web 开发时,Cooki...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...