lt_show_plans
是一个模块,用于显示所有当前正在运行的SQL语句的查询计划。
您可以选择计划的输出格式:TEXT或JSON。
当服务器启动时,lt_show_plans会在共享内存中创建一个哈希表,用于临时存储查询计划。 哈希表的大小不能更改,因此如果哈希表已满,则不会存储计划。
lt_show_plans.plan_format
它控制查询计划的输出格式。
它可以选择为text
或json
。默认值为text
。
lt_show_plans.max_plan_length
它设置查询计划的最大长度。默认值为8192
[字节]。请注意,该参数必须设置为整数。
lt_show_plans.show_level
它控制查询计划的级别。您可以选择其中之一:all
、top
和none
。
"all"显示查询计划的所有级别。例如,当您执行由PL/pgSQL定义的函数时,将显示调用SQL语句(级别0)和函数内部的内部SQL语句(级别1)。
"top"显示查询计划的顶级别。"none"不存储查询计划,因此lt_show_plans视图不显示任何内容。默认值为none
。
在你的 lightdb.conf
中添加如下行(参见上文 lt_show_plans.show_level
):
shared_preload_libraries = 'lt_show_plans' lt_show_plans.show_level = 'top'
在启动服务器后,必须执行以下显示的 CREATE EXTENSION
语句:
testdb=# CREATE EXTENSION lt_show_plans;
执行后,您必须调用下面显示的启用函数:
testdb=# select pg_show_plans_enable();
通过执行以下查询,可以显示当前运行的 SQL 语句的查询计划及相关信息:
testdb=# SELECT * FROM pg_show_plans; pid | level | userid | dbid | plan -------+-------+--------+-------+----------------------------------------------------------------------- 11473 | 0 | 10 | 16384 | Function Scan on pg_show_plans (cost=0.00..10.00 rows=1000 width=56) 11504 | 0 | 10 | 16384 | Function Scan on print_item (cost=0.25..10.25 rows=1000 width=524) 11504 | 1 | 10 | 16384 | Result (cost=0.00..0.01 rows=1 width=4) (3 rows)
pg_show_plans
视图:
pid
:正在运行查询的进程的 pid。
level
:运行查询的查询级别。顶级是 0
。
userid
:运行查询的用户的用户 ID。
dbid
:正在运行查询的数据库的数据库 ID。
plan
:正在运行查询的查询计划。
如果您需要正在运行的 SQL 语句的查询计划以及相应的查询字符串,则可以执行以下查询,该查询结合了 pg_show_plans
和 pg_stat_activity
:
testdb=# \x Expanded display is on. testdb=# SELECT p.pid, p.level, p.plan, a.query FROM pg_show_plans p LEFT JOIN pg_stat_activity a ON p.pid = a.pid AND p.level = 0 ORDER BY p.pid, p.level; -[ RECORD 1 ]----------------------------------------------------------------------------------------- pid | 11473 level | 0 plan | Sort (cost=72.08..74.58 rows=1000 width=80) + | Sort Key: pg_show_plans.pid, pg_show_plans.level + | -> Hash Left Join (cost=2.25..22.25 rows=1000 width=80) + | Hash Cond: (pg_show_plans.pid = s.pid) + | Join Filter: (pg_show_plans.level = 0) + | -> Function Scan on pg_show_plans (cost=0.00..10.00 rows=1000 width=48) + | -> Hash (cost=1.00..1.00 rows=100 width=44) + | -> Function Scan on pg_stat_get_activity s (cost=0.00..1.00 rows=100 width=44) query | SELECT p.pid, p.level, p.plan, a.query FROM pg_show_plans p + | LEFT JOIN pg_stat_activity a + | ON p.pid = a.pid AND p.level = 0 ORDER BY p.pid, p.level; -[ RECORD 2 ]----------------------------------------------------------------------------------------- pid | 11517 level | 0 plan | Function Scan on print_item (cost=0.25..10.25 rows=1000 width=524) query | SELECT * FROM print_item(1,20); -[ RECORD 3 ]----------------------------------------------------------------------------------------- pid | 11517 level | 1 plan | Result (cost=0.00..0.01 rows=1 width=4) query |
pg_show_plans_disable()
禁用此功能。只有超级用户才能执行它。
pg_show_plans_enable()
启用此功能。只有超级用户才能执行它。