PostgreSQL 11 preview - pg_stat_statements 增强,支持执行计划翻转记录

简介:

标签

PostgreSQL , pg_stat_statements , 执行计划 , 翻转 , pg_stat_plans


背景

pg_stat_statements是PG的一个用于收集SQL统计信息的插件,可以帮助我们分析TOP SQL。

《PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL)》

另一方面,我们可能也想知道SQL曾经执行时是否出现过较差的执行计划,使用较差的执行计划执行了多少次等信息。

通过pg_stat_plans这个插件可以记录SQL的执行计划变化,不同执行计划下SQL的平均执行时间,执行次数等。

例如,下面是某个SQL的统计信息,一共使用了两种PLAN,调用次数和平均执行时间都被记录了下来。

plan_ids            | {2758236521,1252991393}  
calls_histogram     | {1,5}  
avg_time_histogram  | {21.224,0.016}  

执行计划如下

postgres=# select planid,query,query_valid,pg_stat_plans_explain(planid, userid, dbid) from pg_stat_plans where dbid=12788 and query ~ 'test';    
-[ RECORD 1 ]---------+-------------------------------------------------------------------  
planid                | 2758236521    
query                 | select * from test where id=1;    
query_valid           | f    
pg_stat_plans_explain | ***** Existing entry's planid (2758236521) and explain of original SQL query string planid (1252991393) differ *****    
                      | Index Only Scan using idx_test on test  (cost=0.00..2.30 rows=1 width=4)    
                      |   Index Cond: (id = 1)    
-[ RECORD 5 ]---------+-----------------------------------------------------------------------------------------------------  
planid                | 1252991393    
query                 | select * from test where id=1;    
query_valid           | t    
pg_stat_plans_explain | Index Only Scan using idx_test on test  (cost=0.00..2.30 rows=1 width=4)    
                      |   Index Cond: (id = 1)    

PostgreSQL 11,将要把这个功能整合到pg_stat_statements中。patch 如下。

https://www.postgresql.org/message-id/flat/9e43fd8f-4d35-4b9d-545c-f9011cd4aa5d@uni-muenster.de#9e43fd8f-4d35-4b9d-545c-f9011cd4aa5d@uni-muenster.de

https://commitfest.postgresql.org/17/1470/

参考

https://www.postgresql.org/message-id/flat/9e43fd8f-4d35-4b9d-545c-f9011cd4aa5d@uni-muenster.de#9e43fd8f-4d35-4b9d-545c-f9011cd4aa5d@uni-muenster.de

https://commitfest.postgresql.org/17/1470/

custom extension pg_stat_plan

https://github.com/2ndQuadrant/pg_stat_plans

custom extension pg_store_plans

https://github.com/ossc-db/pg_store_plans

《执行计划维度统计\判断执行计划翻转\统计每种执行计划的统计信息 use pg_stat_plans in PostgreSQL 9.0, 9.1 and 9.2》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
SQL Kubernetes 关系型数据库
如何一键安装部署PolarDB-X
《PolarDB-X 动手实践》系列第一期,体验如何一键安装部署PolarDB-X。
|
关系型数据库 MySQL 数据库
Kubernetes-部署高可用的MySQL
1、MySQL简介 MySQL 是一个开源的关系型数据库管理系统,使用标准的sql语言,由瑞典 MySQL AB 公司开发,当前属于 Oracle 公司。能够 支持大型的数据库,可以处理上千万条的数据记录。
5499 0
|
SQL 移动开发 算法
MySQL 8.0.23 Hypergraph Join Optimizer代码详解
MySQL Join MySQL本身没有常规意义上的执行计划,一般情况就是通过JOIN和QEP_TAB这两个结构组成。QEP_TAB 的全称是Query Execution Plan Table,这个“Table“可以是物理表、内存表、常量表、子查询的结果表等等。作为整个单独JOIN执行计划载体之前还承担着整个执行路径的调用和流转,但是从8.0.20后,全面的生成了独立的
1929 0
MySQL 8.0.23 Hypergraph Join Optimizer代码详解
|
网络协议 Java 应用服务中间件
tomcat配置域名及HTTPS
tomcat配置域名及HTTPS
|
安全 网络协议 数据安全/隐私保护
Windows Server 2019 搭建并加入域
Windows Server 2019 搭建并加入域
521 0
|
Android开发 iOS开发
Flutter中获取监听屏幕方向、锁定屏幕方向
Flutter中获取监听屏幕方向、锁定屏幕方向
610 2
IntelliJ IDEA 如何在控制台过滤信息
IntelliJ IDEA 如何在控制台过滤信息
986 0
|
存储 算法 物联网
海量数据实时计算利器:深入探索Tec(一个假设性技术框架)
总之,Tec作为海量数据实时计算利器,在推动数字化转型、提升业务效率、保障数据安全等方面发挥着重要作用。随着技术的不断进步和应用场景的不断拓展,Tec的未来发展前景将更加广阔。
|
域名解析 Kubernetes 网络协议
Kubernetes 部署 MySQL 集群
在有状态应用中,MySQL是我们最常见也是最常用的。本文我们将实战部署一个一组多从的MySQL集群。
7826 0
Kubernetes 部署 MySQL 集群
|
SQL 关系型数据库 中间件
postgresql从入门到精通 - 第35讲:中间件PgBouncer部署
postgresql技术大讲堂,从入门到精通 - 第35讲:中间件PgBouncer部署
593 1