pgSQL的执行计划篡改

本文探讨了在PGSQL中优化和篡改执行计划的几种方法,包括使用sr_plan插件来保存和固定执行计划,pg_hint_plan启用hint_table强制执行计划,以及pg_query_rewrite进行查询重写。这些方法旨在解决因复杂SQL和统计信息不准确导致的性能问题,以及实现SQL执行的自动化控制。

篡改SQL

1、SaaS类业务, 非常复杂的SQL, 数据库自动生成的执行计划不准确导致性能下降严重, 希望固定一种更好的执行计划解决性能问题.

2、分析型的SQL, 非常复杂, 而且数据经常大批量变化, 在收集完统计信息前后跑的SQL执行计划完全不准确. 希望通过固定执行计划来解决因为统计信息不准导致的SQL执行计划不准确的问题.

3、希望在执行SQL的同时自动触发执行其他的SQL, 例如对非常重要的表进行DML操作后, 立即发出NOTIFY消息, 上报告警. 或记录更新的内容.

方法(汇总)

sr_plan:

  1. 可以保存 查询 的执行计划,支持绑定变量的查询,也允许篡改执行计划。
  2. 针对每一条保存的执行计划,允许单独开启或关闭。
  3. 原理:通过post_parse_analyze_hook获取parser后的text并保存到sr_plan的query字段中,通过planner_hook保存,处理,返回保存的执行计划。
  4. 篡改执行计划需要执行替换的语句,举例:
    update sr_plans set plan=(select plan from sr_plans where query_hash=1956817209) where query_hash=1668453880;
    并允许QUERY使用sr_plan保存的执行计划:
    update sr_plans set enable=true where query_hash=1668453880;

pg_hint_plan.enable_hint_table
pg_hint_plan插件可以用Hint来强制干预和调优SQL语句的执行计划,并注册调优后的SQL语句模板和Hint,后续遇到相同SQL语句模板(常数参数数值不同,其它值都相同)的SQL语句将自动生成调优后的执行计划

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值