LightDB pg_show_plans

pg_show_plans 是 LightDB 用于查看当前执行语句执行状态的工具,以便用户可以实时监视执行计划。pg_show_plans 可以以 TEXT 或 JSON 的格式展示执行状态。

pg_show_plans  内部将查询信息信息有效地存储在共享内存中,以便更方便更快速的查询/过滤这些信息 。

LightDB 通过修改原有的的处理逻辑,可避免在高并发情况下(特别是客户端数量庞大时)引起的性能急剧下降的问题。

Configuration Parameters

  1. pg_show_plans.plan_format:控制查询计划的输出格式,可以是 text(默认) 或 json;
  2. pg_show_plans.max_plan_length:控制查询计划的最大长度。默认为 8192(字节);
  3. pg_show_plans.show_level:控制查询计划的级别,all 表示显示全部级别的查询计划,top 表示显示最顶层的查询计划的,none 表示不工作(即不存储执行计划);

Usage


在 postgresql.conf 中添加:

shared_preload_libraries = 'pg_show_plans'
pg_show_plans.show_level = 'top'

启动服务器前,需确保执行如下语句:

testdb=# CREATE EXTENSION pg_show_plans;

执行如下语句,即可查询执行状态:

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 是视图:

  1. pid:运行该查询的进程 pid;
  2. level:运行该查询的级别,最高级别为 0;
  3. userid:运行该查询的用户的用户名;
  4. dbid:运行该查询的数据库的 id;
  5. plan:运行中的查询计划;

如果你需要运行中的 SQL 语句的查询计划和相应的查询字符串,可以执行以下查询(关联 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 | 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值