PostgreSQL的扩展(extensions)-常用的扩展之pg_plan_advsr

PostgreSQL的扩展(extensions)-常用的扩展之pg_plan_advsr

pg_plan_advsr 是 PostgreSQL 社区中的一个扩展,用于分析和改进查询执行计划。它能够自动识别哪些查询执行缓慢,并提供优化建议,以提高查询性能。pg_plan_advsr 能够为指定的查询生成性能建议,包括索引创建、SQL 语句重写等。

安装 pg_plan_advsr

首先,需要确保已经安装了 PostgreSQL 的开发包(例如 libpq-devpostgresql-server-dev-X.Y),这样才能编译和安装扩展。

从源码安装

pg_plan_advsr 通常以源码形式发布,因此需要从源码进行编译安装。以下是一个安装示例:

  1. 克隆仓库

    git clone https://github.com/ossc-db/pg_plan_advsr.git
    
  2. 进入目录

    cd pg_plan_advsr
    
  3. 编译并安装

    make
    sudo make install
    

配置 pg_plan_advsr

  1. 加载扩展

    在 PostgreSQL 配置文件 postgresql.conf 中添加或修改以下配置:

    shared_preload_libraries = 'pg_stat_statements, pg_plan_advsr'
    

    确保配置文件中也启用了 pg_stat_statements 扩展,因为 pg_plan_advsr 需要依赖它来收集查询统计信息。

  2. 重启 PostgreSQL 服务

    使配置生效:

    sudo systemctl restart postgresql
    
  3. 在数据库中创建扩展

    使用 psql 或其他 PostgreSQL 客户端连接到数据库,并执行以下 SQL 命令以创建扩展:

    CREATE EXTENSION pg_stat_statements;
    CREATE EXTENSION pg_plan_advsr;
    

使用 pg_plan_advsr

一旦安装和配置了 pg_plan_advsr,就可以开始分析查询执行计划并获取优化建议。

以下是 pg_plan_advsr 的一些常用功能和使用示例:

1. 捕获和保存执行计划

pg_plan_advsr 可以捕获查询的执行计划,并将其保存在数据库中。

-- 假设有一个查询
EXPLAIN ANALYZE SELECT * FROM employees WHERE department_id = 1;-- 捕获并保存执行计划
SELECT pg_plan_capture('SELECT * FROM employees WHERE department_id = 1');

执行完上述 SQL 语句,会返回一个 query id,用于下一步分析。

2. 分析查询执行计划

使用 pg_plan_advsr 提供的功能,可以分析捕获的执行计划,并生成优化建议:

-- 使用上一步捕获的 query id
SELECT * FROM pg_plan_advice(query_id);

pg_plan_advice 返回结果将指示哪些方面的查询计划可以改进,例如建议在特定列上创建索引或重写查询。

3. 直接提供优化建议

你也可以直接传入查询,获取优化建议。

SELECT * FROM pg_plan_advice('SELECT * FROM employees WHERE department_id = 1');

示例

以下是一个具体示例,展示如何使用 pg_plan_advsr 分析查询并生成优化建议:

  1. 创建示例表并插入数据

    CREATE TABLE employees (id SERIAL PRIMARY KEY,name VARCHAR(100),department_id INT
    );INSERT INTO employees (name, department_id)
    VALUES ('Alice', 1), ('Bob', 1), ('Chris', 2), ('Diana', 2);
    
  2. 捕获查询执行计划

    SELECT pg_plan_capture('SELECT * FROM employees WHERE department_id = 1');
    

    假设返回的 query_id12345

  3. 生成优化建议

    SELECT * FROM pg_plan_advice(12345);
    

    或者直接分析查询:

    SELECT * FROM pg_plan_advice('SELECT * FROM employees WHERE department_id = 1');
    

注意事项

  1. 性能开销:启用和使用 pg_plan_advsr 可能会引入一些性能开销,尤其是在捕获和分析大量查询时。建议在测试环境中进行验证,并仔细监控生产环境的性能。
  2. 版本兼容性:确保 pg_plan_advsr 的版本与 PostgreSQL 服务器版本兼容。
  3. 配置调优
    • pg_stat_statements:确保正确配置 pg_stat_statements 以收集准确的查询统计信息,可调整 trackmax 参数。

总结

pg_plan_advsr 是一个强大的 PostgreSQL 扩展,允许用户捕获和分析查询执行计划,并提供实际的优化建议。通过正确的安装和配置,pg_plan_advsr 可以显著帮助数据库管理员和开发者识别和解决查询性能问题。然而,需要注意的是,其带来的性能开销应被仔细监控,确保在生产环境中不引入额外的性能瓶颈。

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

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

相关文章

AI时代存储大战,NAND闪存市场风云再起!

随着人工智能(AI)相关半导体对高带宽存储(HBM)需求的推动,NAND闪存市场也感受到了这一趋势的影响。 据《Business Korea》援引行业消息来源称,NAND闪存市场的竞争正在加剧,而存储巨头三星和SK海…

CSP俄罗斯方块(简单易懂)

开始将题目理解成了&#xff0c;开始的列应该是从输入图案的最左端开始计算&#xff0c;将前面所有的空列都删掉&#xff0c;代码如下&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e410; const int M 1e510; int a[20][20]; int b[5][5];int…

Redis的持久化方式:

Redis提供了两种数据持久化的方式&#xff1a; RDB 该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 AOF 该机制将以日志的形式记录服务器所处理的每一个写操作。 在Redis服务器启动之初会读取文件来重新构建数据库&#xff0c;以保证启动后数据库中的数据是完…

leedcode【203】. 移除链表元素——Java解法

Problem: 203. 移除链表元素 题目思路解题方法复杂度Code效果 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val…

OS复习笔记ch6-1

死锁的原理 定义 一组进程中&#xff0c;其中每个进程因等待事件而阻塞&#xff0c;且所等待的事件只能被这组进程中的另一阻塞进程激发称之为死锁。 举例如下 四个车辆希望紧迫的希望能很快通过&#xff0c;每辆车需要两个象限的资源&#xff0c;然而四个车都只得到一个象…

golang调用aliyun的语音通话服务,复制直接使用

golang调用aliyun的语音通话服务 通过API使用语音通知/语音验证码——阿里云官方文档SingleCallByTts - 发送语音验证码或文本转语音类型的语音通知入门流程主要参数引入阿里云语音官方SDK-go版本完整代码通过API使用语音通知/语音验证码——阿里云官方文档 https://help.aliy…

电子电器架构 - AUTOSAR软件架构介绍

电子电器架构 - AUTOSAR软件架构介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己…

MFC Winsock 类:MFC 中的网络编程

目录 概述 一.MFC Winsock 类简介 1.MFC Winsock 类的主要功能 2.MFC Winsock 类的主要优点 3.MFC Winsock 类的主要缺点 4.MFC Winsock 类的主要类 5.MFC Winsock 类示例 二.CAsyncSocket 类 1.主要功能 异步通信 事件驱动 数据传输 套接字选项 2.常用函数 创建…

Maven多环境打包配置

一、启动时指定环境配置文件 在启动springboot应用的jar包时&#xff0c;我们可以指定配置文件&#xff0c;通常把配置文件上传到linux服务器对应jar包的同级目录&#xff0c;或者统一的配置文件存放目录 java -jar your-app.jar --spring.config.location/opt/softs/applicat…

matlab 图像的中值滤波

目录 一、功能概述1、算法概述2、主要函数3、计算公式二、代码实现三、结果展示四、参考链接本文由CSDN点云侠翻译,放入付费专栏只为防不要脸的爬虫。专栏值钱的不是本文,切勿因本文而订阅。 一、功能概述 1、算法概述 中值滤波是图像处理中一种常用的非线性运算,用于减少…

间接平差——以水准网平差为例 (python详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,间接平差——以水准网平差为例 (python详细过程版),爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、原理概述 间接平差的函数模型和随机模型…

openai api的初次尝试

不懂已经不去百度了&#xff0c;现在直接问chatgpt就解决绝大多数问题了。 OpenAI API目前还没有官方支持的npm库&#xff0c;但是您可以使用现有的第三方npm库进行OpenAI API的访问和使用。这里提供一个npm库 openai-node 的安装和使用方法&#xff1a; 在命令行或终端中使用…

Util和utils

Util FieldStats 这段代码定义了一个名为FieldStats的Java类&#xff0c;位于com.cqupt.software_1.Util包中。它使用了lombok库的Data和AllArgsConstructor注解&#xff0c;这些注解帮助生成了getter、setter、toString等方法&#xff0c;以及包含所有参数的构造函数。类中有…

区块链会议投稿资讯CCF A--USENIX Security 2025 截止9.4、1.22 附录用率

会议名称&#xff1a;34th USENIX Security Symposium CCF等级&#xff1a;CCF A类学术会议 类别&#xff1a;网络与信息安全 录用率&#xff1a;2023年接收率29%&#xff0c;2024录用的区块链相关文章请查看 Symposium Topics System security Operating systems security …

vue实现可拖拽移动悬浮球

封装悬浮球组件&#xff0c;文件名s-icons.vue <template><div ref"icons" class"icons-container" :style"{ left: left px, top: top px }"><slot></slot></div> </template> <script> export …

国产化服务器开启NTP功能并向NTP时钟服务器同步

1.备份/etc/chrony.conf文件&#xff1b; cp -rp /etc/chrony.conf /etc/chrony.conf.bak.20240522 2.修改chrony.conf文件&#xff0c;增加NTP时钟信息。&#xff08;客户端填写时钟同步服务器的IP地址或者域名&#xff0c;我这里写的IP地址。下面Allow NTP Client是只允许…

Mysql 的 binlog 有几种格式?

MySQL 的二进制日志&#xff08;binlog&#xff09;有三种格式&#xff0c;每种格式都有其特定的用途和优缺点。以下是详细描述&#xff1a; 1. STATEMENT 描述: 记录的是 SQL 语句。特点: 每条更改数据的 SQL 语句都会记录在 binlog 中。相对较小&#xff0c;因为只记录了 S…

数字图像处理冈塞雷斯第四版课后习题答案【英文原版】

第二章 第三章 . 第四章 傅里叶变换是一个线性过程&#xff0c;而计算梯度的平方根和平方根则是非线性运算。傅里叶变换可以用来计算微分的差值(如问题4.50)&#xff0c;但必须在空间域中直接计算平方和平方根值。 (a)实际上&#xff0c;由于高通操作&#xff0c;环有一个暗中心…

在已创建的git工程中添加.gitignore

有些代码创建git时&#xff0c;为了方便将所有文件都加入了git管理&#xff0c;但实际有些库的Makefile文件和编译目录的文件不需要加入管理&#xff0c;否则每次提交或编译后&#xff0c;git diff将看到非常多的冗余信息。而我们修改的核心代码都淹没在这些大量无用的信息里面…

Golang:gammazero/deque是一个快速环形缓冲区deque(双端队列)实现

gammazero/deque是一个快速环形缓冲区deque&#xff08;双端队列&#xff09;实现。 文档 https://github.com/gammazero/deque 安装 go get github.com/gammazero/deque代码示例 先入先出队列 package mainimport ("fmt""github.com/gammazero/deque&quo…