PostgreSQL 11 preview - pg_stat_statements 增强,支持执行计划翻转记录
背景
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》