【PGCCC】pg_show_plans:显示所有正在运行的语句的查询计划

news2025/1/25 4:46:28

PostgreSQL 扩展可显示所有当前正在运行的 SQL 语句的查询计划。查询计划可以以多种格式显示,例如JSON或YAML。
在这里插入图片描述

此扩展在共享内存中创建哈希表。哈希表不可调整大小,因此一旦填满,就无法添加新计划。

安装

支持 PostgreSQL 版本 12 及更新版本。

在继续之前安装 PostgreSQL。确保有pg_config二进制文件,这些通常包含在-dev和-devel包中。

git clone https://github.com/cybertec-postgresql/pg_show_plans.git
cd pg_show_plans
make
make install

配置

添加pg_show_plans到shared_preload_libraries内postgresql.conf:

shared_preload_libraries = 'pg_show_plans'

重新启动服务器并调用CREATE EXTENSION pg_show_plans;:

postgresql=# CREATE EXTENSION pg_show_plans;
CREATE EXTENSION
postgresql=#

用法

查看查询计划:

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)

要获取查询计划并查看相应的查询表达式:

testdb=# \x
Expanded display is on.
testdb=# SELECT * FROM pg_show_plans_q;
-[ 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 |

基准

pgbench -c 10 -j 3 -t 5000 -S普通的 PostgreSQL 16.1:

tps = 193655.084802 (without initial connection time)
tps = 200890.346014 (without initial connection time)
tps = 199931.223659 (without initial connection time)

pgbench -c 10 -j 3 -t 5000 -SPostgreSQL16.1版本:pg_show_plans​2.1.0

tps = 166564.507102 (without initial connection time)
tps = 172814.245424 (without initial connection time)
tps = 174658.455390 (without initial connection time)

总体而言,性能损失约为 15%。

参考

GUC 变量

  • pg_show_plans.plan_format = texttext:查询计划输出格式, 、json、yaml和之一 xml。
  • pg_show_plans.max_plan_length =
    16384:查询计划的最大长度(以字节为单位)。此值会影响扩展请求的共享内存量,如果值过高,服务器可能无法启动。
  • pg_show_plans.is_enabled = true:通过分配给此变量来启用或禁用扩展。

默认值显示在‘=’符号后。

视图

  • pg_show_plans:为了SELECT * FROM pg_show_plans();方便而定义。
  • pg_show_plans_q:与相同pg_show_plans,但它多一列相应的查询字符串。

功能

pg_show_plans():显示查询计划:

  • pid:运行查询的服务器进程 ID。

  • evel:查询嵌套级别。顶层为 0。例如,如果您执行一个简单的 select 查询,则此查询的计划级别为 0。如果您执行调用 select
    查询的函数,则级别 0 是该函数的计划,级别 1 是该函数调用的 select 查询的计划。

  • userid:运行查询的用户 ID。

  • dbid:查询运行的数据库 ID。

  • plan:查询计划。
    #PG培训#PG考试#postgresql培训#postgresql考试#postgresql认证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学Python可少不了项目练手,这8个小项目有趣又实用,小白也能做出来_python练手项目,python教程

学习之路比较科学的学习方法是理解了之后把知识点进行运用,找一些开源的小项目做是最好的,站在岸上是学不会游泳的,光看健身视频是减不了肥的,不自己动手敲代码是学不会编程的。 我在找了8个比较有趣的小项目,技术水平…

DirectX修复工具下载安装指南:电脑dll修复拿下!6种dll缺失修复方法!

在日常使用电脑的过程中,不少用户可能会遇到“DLL文件缺失”的错误提示,这类问题往往导致程序无法正常运行或系统出现不稳定现象。幸运的是,DirectX修复工具作为一款功能强大的系统维护软件,能够有效解决大多数DLL文件缺失问题&am…

下属“软对抗”,工作阳奉阴违怎么办?4大权谋术,让他不敢造次

下属“软对抗”,工作阳奉阴违怎么办?4大权谋术,让他不敢造次 第一个:强势管理 在企业管理中,领导必须展现足够的强势。 所谓强势的管理,并不仅仅指态度上的强硬,更重要的是在行动中坚持原则和规…

元气森林|每天拆解一个品牌营销方案

元气森林的品牌营销策略是一个多维度、全方位的策略体系,旨在通过创新、用户导向和多元化渠道来塑造和提升品牌形象,促进产品销售。 以下是道叔对元气森林品牌营销策略的详细拆解: 一、以用户为中心的营销理念 元气森林注重通过市场调研、…

Java | Leetcode Java题解之第313题超级丑数

题目&#xff1a; 题解&#xff1a; class Solution {public int nthSuperUglyNumber(int n, int[] primes) {int[] dp new int[n 1];int m primes.length;int[] pointers new int[m];int[] nums new int[m];Arrays.fill(nums, 1);for (int i 1; i < n; i) {int minN…

浅谈莫比乌斯反演(c++)

目录 前置知识一些约定数论分块狄利克雷卷积定义一些常见的狄利克雷卷积 莫比乌斯反演莫比乌斯函数的性质/莫比乌斯变换 例题讲解公约数的和题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据规模与约定 思路 AC代码[HAOI2011] Problem b题目描述输入格…

Kimi+AiPPT的正确打开方式!文档一键转换PPT!限时免费!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 我之前…

C++ | Leetcode C++题解之第313题超级丑数

题目&#xff1a; 题解&#xff1a; class Solution { public:int nthSuperUglyNumber(int n, vector<int>& primes) {vector<long> dp(n 1);int m primes.size();vector<int> pointers(m, 0);vector<long> nums(m, 1);for (int i 1; i < n…

【glomap】glomap install tutorial

【glomap】glomap install tutorial 1. install step by office2. install step3. reason方法1&#xff1a;修改目标GPU架构方法2&#xff1a;更新CUDA工具包方法3&#xff1a;在CMake中手动设置CUDA编译选项 4 reference 1. install step by office mkdir build cd build cma…

视频驱动数字人形象,LivePortrait最新模型分享

LivePortrait是一个由快手可灵团队开发的高级人工智能肖像动画框架&#xff0c;其主要功能是使静态照片中的面部能够模仿动态视频中的表情变化&#xff0c;从而让照片看起来像是活生生的人在做表情。 LivePortrait采用了基于隐式关键点的方法&#xff0c;而不是传统的扩散方法…

报表系统之Cube.js

Cube.js 是一个开源的分析框架&#xff0c;专为构建数据应用和分析工具而设计。它的主要目的是简化和加速构建复杂的分析和数据可视化应用。以下是对 Cube.js 的详细介绍&#xff1a; 核心功能和特点 1. 多数据源支持 Cube.js 支持从多个数据源中提取数据&#xff0c;包括 SQ…

怎么给USER新增表空间文件

今天介绍一下docker部署的oralce19c&#xff0c;怎么增加表空间 docker exec -it orcl19c bash 管理员方式登录 sqlplus / as sysdba 增加表空间脚本 ALTER TABLESPACE USERS ADD DATAFILE /opt/oracle/oradata/newdatafile6.dbf SIZE 30720M AUTOEXTEND ON NEXT 10M MAXSIZE…

Linux内核:哈希表hlist_head和hlist_node

linux内核中哈希表使用链接法实现哈希表&#xff0c; 结构体有hlist_head和hlist_node&#xff0c;hlist指向hlist_node。 哈希表具体如下&#xff1a; 以哈希表删除为例&#xff1a; 为什么要使用二级指针&#xff1f;

基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 无刷直流电机&#xff08;BLDCM&#xff09;原理 4.2 六步换相逆变器 4.3 双PI控制器设计 5.完整工程文件 1.课题概述 基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真。双PI控制…

作为架构师的你,NoSQL如何选型

什么是 NoSQL&#xff1f; NoSQL数据库是一种非关系型数据库管理系统它和我们传统的关系型数据库&#xff08;如MySQL、Oracle&#xff09;不一样。传统数据库要求你在存储数据之前&#xff0c;先定义好数据的结构&#xff08;称为“schema”&#xff09;&#xff0c;而且数据…

一刷代码随想录(贪心5)

56. 合并区间 题意&#xff1a; 给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: intervals [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: intervals [[1,4],[4…

用户画像系列——Spark任务调优实践

在画像标签的加工和写入hbase中&#xff0c;我们采用了spark来快速进行处理和写入。但是在实际线上运行的过程中&#xff0c;仍然遇到了不少问题&#xff0c;下面来总结下遇到的一些问题 1.数据倾斜问题 其实spark 数据倾斜思路和hive、mapreduce 数据倾斜思路处理类似&…

LED点阵屏(51单片机)

一、LED点阵屏介绍 1.点阵屏介绍及显示原理 2.开发板对应引脚 单片机工作是弱上拉&#xff0c;低电平强&#xff0c;高电平弱。 操作硬件电路是通过操作寄存器实现的 行&#xff1a;D0~D7 列&#xff1a;P0~P7 用P3口的三根线控制D0~D7&#xff0c;使能端OE&#xff0c;OE…

【Android】kotlin RecyclerView遍历json实现列表数据

需求 效果图如下 : 这个ui看起来简单, 其实要实现几个功能点 1. json数据的遍历 2. RecyclerView实现循环的列表 3. 每块元素里的元素点击 : 未选中的话, 首次点击显示"selected", 点击"selected"则进行下一步数据处理 4. 设置默认的选择的元素, 显示sel…

增加一个按钮,批量获取凭证号

create PROCEDURE Cux_Ar_ServiceLedger_Voucher_ProcOrgId Int ,result Int output AS BEGIN SET NOCOUNT ONDECLARE Date DATETIME IF OrgId 0 or OrgIdBEGIN RAISERROR(N获取当前组织ID失败&#xff01;, 16, 1) RETURNEND SET Date GETDATE()BEGIN TRANSACTION BEGIN…