【DB吐槽大会】第55期 - PG SQL无法穿越

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 大家好,这里是DB吐槽大会,第55期 - PG SQL无法穿越

背景


1、产品的问题点

  • PG SQL无法穿越

2、问题点背后涉及的技术原理

  • PG SQL 的执行计划是怎么生成的?
  • 通过SQL统计信息、结合PG的一些代价系数参数设置、通过公式计算cost, 最后选择cost最低的plan作为plan tree. (多表JOIN触发geqo的除外)
  • PG SQL 是按什么执行计划执行的?
  • 如果时generic plan, 则按cached plan执行.
  • 如果cached plan算出来的代价大于custom plan的avg(cost), 则使用custom plan(相当于硬解析).
  • 使用绑定变量时就一定会用会话中已经缓存的执行计划吗?
  • 不一定, 参考如上. 如果cached plan算出来的代价大于custom plan的avg(cost), 则使用custom plan(相当于硬解析).
  • 怎么知道过去某个时刻当时SQL的执行计划?
  • 不知道, 除非打印出来. 例如, 使用auto_explain插件

3、这个问题将影响哪些行业以及业务场景

  • 通用

4、会导致什么问题?

  • 无法轻松了解SQL在过去某个时刻的执行计划, 排查因为执行计划问题导致的性能抖动非常困难.
  • 例如: 统计信息未及时更新, 导致的执行计划问题
  • 例如: 数据倾斜, 并且产生plan cache的前几次导致执行计划运算有问题.

5、业务上应该如何避免这个坑

  • 可以开启auto_explain插件, 记录抖动SQL的执行计划以及每个NODE的开销, 耗时, IO, 命中, 等.
  • 避免plan错误的一些手段
  • 缩短长连接使用生命周期, 避免错误的plan cache造成长时间的影响.
  • 加快统计信息收集频率, 避免统计信息不及时造成的query plan不正确.
  • 分析型的业务设置plan_cache_mode为force_custom_plan, 避免大量数据的变化统计信息频繁变化, 导致cache plan不争气的问题. force_custom_plan要求每次执行SQL时都重新生成query plan.

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

  • auto explain 开启后, 会打开时间计数器, 影响全局. 导致性能下降.

7、数据库未来产品迭代如何修复这个坑

  • 希望内核可以支持统计信息、元数据信息快照功能,用于回放SQL,得到过去的执行计划信息。
  • 当query执行计划发生变化时, 通过参数控制, 例如SQL执行时间抖动超过多少时, 可以将前后的plan tree打印到日志中, 同时输出类似auto_explain的详细内容.



相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
9月前
|
SQL 前端开发 关系型数据库
pg库实现sql行转列
这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。
233 0
pg库实现sql行转列
|
SQL 缓存 大数据
以小博大外小内大,Db数据库SQL优化之小数据驱动大数据
SQL优化中,有一条放之四海而皆准的既定方针,那就是:永远以小数据驱动大数据。其本质其实就是以小的数据样本作为驱动查询能够优化查询效率,在SQL中,涉及到不同表数据的连接、转移、或者合并,这些操作必须得有个数据集作为“带头”大哥,即驱动数据,而这个驱动数据最好是数据量最小的那一个。
以小博大外小内大,Db数据库SQL优化之小数据驱动大数据
|
SQL NoSQL 关系型数据库
|
SQL Oracle 关系型数据库
Java 技术篇 - java同时连接多种数据库执行sql语句的兼容性验证,数据库类型包括:oracle、sqlserver、DB2、人大金仓、达梦、PG、瀚高、polardb
Java 技术篇 - java同时连接多种数据库执行sql语句的兼容性验证,数据库类型包括:oracle、sqlserver、DB2、人大金仓、达梦、PG、瀚高、polardb
685 0
Java 技术篇 - java同时连接多种数据库执行sql语句的兼容性验证,数据库类型包括:oracle、sqlserver、DB2、人大金仓、达梦、PG、瀚高、polardb
|
SQL Oracle 关系型数据库
Oracle 数据库sql语句查看字符集,PG数据库查询字符集方法
Oracle 数据库sql语句查看字符集,PG数据库查询字符集方法
385 0
Oracle 数据库sql语句查看字符集,PG数据库查询字符集方法
|
SQL Oracle 关系型数据库
PG数据库版本查看方法,sql语句查pg数据库版本方法
PG数据库版本查看方法,sql语句查pg数据库版本方法
526 0
PG数据库版本查看方法,sql语句查pg数据库版本方法
|
SQL 数据库
一个计算SQL语句在HANA数据库执行花费的DB和CPU时间的统计工具
一个计算SQL语句在HANA数据库执行花费的DB和CPU时间的统计工具
|
SQL 存储 关系型数据库
【DB吐槽大会】第74期 - PG 不支持SQL维度资源限流
大家好,这里是DB吐槽大会,第74期 - PG 不支持SQL维度资源限流
|
SQL 数据库 开发者
【DB吐槽大会】第51期 - 缺乏SQL审查功能
大家好,这里是DB吐槽大会,第51期 - 缺乏SQL审查功能