排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
Oracle2PG系列之管理SQL执行计划
Oracle2PG系列之管理SQL执行计划
IT那活儿
2022-02-10
632
点击上方
“IT那活儿”,关注后了解更多精彩内容!!!
前 言
在我们日常运维过程中或多或少都会碰到SQL执行计划突变的问题,应急性解决方案基本都绕不开固定执行计划,Oracle也提供了丰富的工具outline、coe等。在我们最近的老案例Oracle迁移PG中,测试也发现了部分SQL在PG库中的执行计划性能较差,由于应用迁移工期紧以及程序代码繁多SQL逻辑层改造成本大,最终使用pg_show_plans与pg_hint_plan这2个社区插件在数据库层调整执行计划解决SQL性能问题。今天我们就来总结一下。
执行计划
首先
PG原生提供了explain命令来查看SQL执行计划,但是这个工具不能查看正在执行的SQL执行计划,这点非常不人性化。而我们根据query text重新构造SQL不仅费时而且DML语句还容易引起误操作。索性社区提供了插件pg_show_plans这个插件可以帮助我们查询pg_stat_activity中正在执行的SQL执行计划,支持PG主流版本9.5~14。
具体文档以及安装这里不在过多赘述,可以参考:
https://github.com/cybertec-postgresql/pg_show_plans:
安装完成后,我们构建用户表50万行,类型表500万行,并使用uid进行关联 ,如下:
使用pg_show_plans进行观察pid:19405的会话。
图中plan字段就是实际的执行计划,内容相对简单,但还是能够看到关键信息关联条件以及tb_classinfo表的Filter条件、返回行数等。案例中就是tb_classinfo 表根据cid 4301211进行全表扫描过滤返回1行数据再与tb_userinfo关联查询,老司机一看就知道可以在tb_classinfo的cid字段创建索引。
建完索引后,效率提升还是很明显的。
接下来
就来看如何绑定一个SQL的执行计划,这里社区插件也相对较多,我们采用pg_hint_plan。
具体可以参考下面的连接:
https://github.com/ossc-db/pg_hint_plan
继续
使用上文的案例,我们在tb_classinfo的cid创建索引后SQL使用索引扫描,这里我们使用Hint改变执行计划。
使用Hint seqscan成功改变计划,我们便可以将此方式存入plan hint表固定这类SQL的执行计划。
注意
在绑定时常量值可以使用?代替。
在计划绑定后,重新发起SQL查询,pg_show_plans插件成功捕获到该SQL并打印出执行计划是我们绑定的计划,在这个过程中我们发现计划存入plan table时没有标志为,且show_plans里的计划也没有提示来自于哪个plan table的绑定,这方面还不够友好。
另外Hint种类繁多具体可以参考文档这里就不再一一介绍,本文就到此为止!
本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)
分享
收藏
点赞
在看
postgresql
oracle
文章转载自
IT那活儿
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨