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

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

pg_store_plans 是一个 PostgreSQL 扩展,用于捕获查询执行计划(execution plans)并将其存储在数据库中。通过存储和分析这些执行计划,数据库管理员和开发者可以更好地了解查询的性能特征,并进行优化。这个扩展非常适用于监控查询性能、诊断慢查询以及跟踪执行计划的变化。

安装 pg_store_plans

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

从源码安装

首先,从 pg_store_plans 的官方 GitHub 项目下载源码并进行编译安装。

  1. 克隆仓库

    git clone https://github.com/ossc-db/pg_store_plans.git
    cd pg_store_plans
    
  2. 编译和安装

    make
    sudo make install
    

配置 pg_store_plans

  1. 加载扩展

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

    shared_preload_libraries = 'pg_store_plans'
    pg_store_plans.plan_format = 'json'  # 可选值: 'text', 'json'
    

    重启 PostgreSQL 服务以加载扩展:

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

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

    CREATE EXTENSION pg_store_plans;
    

使用 pg_store_plans

pg_store_plans 会自动捕获查询执行计划并将其存储在系统的专用表中。通常,这些表位于 pg_catalog 模式下。

查看捕获的执行计划

捕获的执行计划存储在 pg_catalog.pg_store_plans 表中。你可以查询这个表来查看存储的计划。

SELECT * FROM pg_catalog.pg_store_plans;
检查执行计划

展示具体的执行计划信息,比如查询的哈希值、执行计划的 JSON 结构等。

SELECT queryid, query, plan FROM pg_catalog.pg_store_plans WHERE queryid = 'your_queryid_here';
统计和分析查询

你可以根据不同需要来统计查询的执行计划信息。例如,可以按查询 ID 汇总信息,以找到执行时间最长的查询:

SELECT queryid, min(run_total_time) as min_time,max(run_total_time) as max_time,avg(run_total_time) as avg_time,count(*) as executions
FROM pg_catalog.pg_store_plans
WHERE queryid IS NOT NULL
GROUP BY queryid
ORDER BY avg_time DESC
LIMIT 10;

示例

下面是一个完整的示例,展示如何使用 pg_store_plans 来捕获、存储并分析查询的执行计划。

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

    CREATE TABLE employees (id SERIAL PRIMARY KEY,name VARCHAR(100),department_id INT
    );INSERT INTO employees (name, department_id)
    SELECT 'Employee ' || g, g % 10 FROM generate_series(1, 10000) g;
    
  2. 执行一个带有复杂查询的 SQL 语句,以便捕获执行计划:

    EXPLAIN ANALYZE SELECT * FROM employees WHERE department_id = 1;
    
  3. 查看存储在 pg_store_plans 表中的执行计划:

    SELECT * FROM pg_catalog.pg_store_plans WHERE query LIKE '%SELECT * FROM employees WHERE department_id = 1%';
    
  4. 分析查询的执行计划信息:

    SELECT queryid, planid, plan FROM pg_catalog.pg_store_plans WHERE queryid = 'your_queryid_here';
    

    这将返回查询的执行计划 JSON 结构,你可以进一步解析和分析它。

注意事项

  1. 性能开销:启用 pg_store_plans 可能会引入一些性能开销,特别是在高负载的生产环境中。建议在测试环境中验证其影响,并适当配置捕获规则。
  2. 存储空间:由于捕获并存储了大量的执行计划,可能会占用较多存储空间。需要定期清理或归档旧的执行计划数据。
  3. 版本兼容性:确保 pg_store_plans 的版本与 PostgreSQL 服务器版本兼容。
  4. 安全性:存储的查询和执行计划可能包含敏感数据,确保适当的安全措施以防止未授权访问。

总结

pg_store_plans 是一个强大的 PostgreSQL 扩展,提供了捕获并存储查询执行计划的功能。通过存储和分析执行计划,数据库管理员和开发者可以深入了解查询的性能表现,并能够有针对性地优化复杂查询。通过正确的安装、配置和使用,pg_store_plans 可以显著提高数据库性能监控和优化的效率。然而,在启用前需要充分评估其性能影响,并定期维护存储的数据。

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

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

相关文章

Spring IOC容器与Bean管理详解

一.IOC与DI 1. 传统的开发方式区别 对象直接引用导致对象硬性关联,程序难以扩展维护 loC容器是Spring生态的地基,用于统─创建与管理对象依赖 2. Spring IOC 控制反转 loC控制反转,全称Inverse of Control,是一种设计理念 由代理人来创建与管理对象,消费者通…

请允许自己偶尔情绪不稳定

最近看网上的讨论,发现一件事:许多人都把「情绪稳定」当作一个很难得的优点,狂热地去追捧。 什么叫情绪稳定呢?大抵指这些: 遇到问题时不容易发火或沮丧,而是能立刻切换成解决问题的视角; 心情…

Windows系统使用Docker部署Focalboard团队协作工具详细流程

文章目录 前言1. 使用Docker本地部署Focalboard1.1 在Windows中安装 Docker1.2 使用Docker部署Focalboard 2. 安装Cpolar内网穿透工具3. 实现公网访问Focalboard4. 固定Focalboard公网地址 前言 本篇文章将介绍如何使用Docker本地部署Focalboard项目管理工具,并且结…

铠侠KIOXIA KCD81PJE7T68 E3.S PCIe 5.0 NVMe 企业级SSD

今天介绍一下我们的新产品KCD81PJE7T68,这款企业级NVMe固态硬盘将为您的关键任务应用带来出色的性能和可靠支持。 提升业务效能 提速至关键 在当今高度数字化的商业环境中,企业对于数据存储系统的性能要求愈加苛刻。无论是大数据分析、人工智能训练,还是虚拟化和联…

微信小程序打印功能怎么用?

在数字化时代,微信小程序为我们提供了许多便捷的服务,其中就包括打印功能。而琢贝云打印小程序,作为一款功能强大、操作简便的线上打印平台,更是受到了广大用户的青睐。下面,我将为大家介绍如何使用琢贝云打印小程序完…

下雨天的短视频:成都鼎茂宏升文化传媒公司

下雨天的短视频:捕捉雨中的诗意与温情 在快节奏的现代生活中,短视频以其独特的魅力成为了人们记录生活、分享情感的重要工具。而下雨天,这个常常带有诗意与温情的场景,更是为短视频创作者们提供了无尽的灵感源泉。成都鼎茂宏升文…

Spring常用注解(超全面)

官网:核心技术SPRINGDOC.CN 提供 Spring 官方文档的翻译服务,可以方便您快速阅读中文版官方文档。https://springdoc.cn/spring/core.html#beans-standard-annotations 1,包扫描组件标注注解 Component:泛指各种组件 Controller、…

9. C++通过epoll+fork的方式实现高性能网络服务器

epollfork 实现高性能网络服务器 一般在服务器上,CPU是多核的,上述epoll实现方式只使用了其中的一个核,造成了资源的大量浪费。因此我们可以将epoll和fork结合来实现更高性能的网络服务器。 创建子进程函数–fork( ) 要了解线程我们先来了解…

近五年营收和净利润大幅“败北”,尚品宅配今年押注扩张加盟

​ 《港湾商业观察》廖紫雯 两个月前经历过高管公开信的尚品宅配(300616.SZ),无论是2023年年报,还是今年一季报,虽然公司净利润表现尚佳,但收入端的持续承压仍然备受关注。 今年一季报,尚品宅…

Prometheus监控平台配置--监控集群资源信息

之前我们介绍的都是对单机的监控,今天介绍下用Prometheus对集群多台机器的系统资源进行监控。 我们需要在被压测服务器上安装 node_exporter和mysql_exporter,通过这两个工具对操作系统和mysql进行监控,将收集的数据存储到Prometheus&#xf…

快速版-JS基础01书写位置

1.书写位置 2.标识符 3.变量 var:声明变量。 (1).变量的重新赋值 (2).变量的提升 打印结果:console.log(变量名) 第一个是你写在里面的。 第二个是实际运行的先后之分,变量名字在最前面。变量…

Delphi 开发Android Service四种模式初探

前言: 本篇文章正经来说,其实算是我的学习履历,是我在不断的摸索过程中,总结的经验,不能算是一篇正经的学术文章。现在DELPHI的学习资料太少了,就算是有也都是基于老版本DELPHI,或VCL相关的内容…

26计算机操作系统408考研--操作系统设备管理篇章(五)

文章目录 一、设备是什么?设备管理目标和任务I/O设备分类 二、I/O系统控制方式程序直接控制方式中断控制方式DMA控制方式通道控制方式 I/O软件的组成I/O软件设计目标和原则I/O软件结构设备驱动程序设备无关软件用户层软件用户层的I/O软件 具有通道的设备管理通 道通…

Day37 代码随想录打卡|二叉树篇---对称二叉树

题目: 给你一个二叉树的根节点 root , 检查它是否轴对称。 方法:本体可以用递归和迭代两种方法,但我更喜欢迭代的方式,因此使用迭代的方式做一下。首先我们分析一下不对称的情况。因为对称的情况很简单,即两…

实现一个简单的 Google Chrome 扩展程序

目录 🧭 效果展示 # 图示效果 a. 拓展程序列表图示效果: b. 当前选项卡页面右键效果: c. 拓展程序消息提示效果: 📇 项目目录结构 # 说明 # 结构 # 文件一览 ✍ 核心代码 # manifest.json # background.j…

星融元获2024网络开源优秀创新成果奖!

5月25日,星融元受邀参加2024年第四届网络开源技术生态大会,分享主题为“开放的网络 开放的AI生态”主题演讲,深受现场用户的认可;《Easy RoCE:基于SONiC、Klish和Prometheus的极简无损网络解决方案》获得2024网络开源优…

SpheroGPT: 声控自然语言编程 AI 玩具 Demo 具身智能 图文解说 完全开源机器人

背景介绍 因为生病请了长假. 一周前状态开始恢复, 于是尝试用 LLM (ChatGPT3.5) + Sphero 开发一个可以声控自然语言编程的 AI 玩具, 作为学习 ChatGPT 应用开发的方法. 差不多十天时间把开发目标基本都实现了, 这里和大家分享一下心得体会. Demo 示例视频 先把录制的几个 d…

云原生Kubernetes: 云主机部署K8S 1.30版本 单Master架构

目录 一、实验 1.环境 2.Termius连接云主机 3.网络连通性与安全机制 4.云主机部署docker 5.云主机配置linux内核路由转发与网桥过滤 6.云主机部署cri-dockerd 7.云主机部署kubelet,kubeadm,kubectl 8.kubernetes集群初始化 9.容器网络(CNI)部署…

Docker学习笔记 - 创建自己的image

目录 基本概念常用命令使用docker compose启动脚本创建自己的image 使用Docker是现在最为流行的软件发布方式, 本系列将阐述Docker的基本概念,常用命令,启动脚本和如何生产自己的docker image。 在我们发布软件时,往往需要把我…

解析边缘计算网关的优势-天拓四方

随着信息化、智能化浪潮的持续推进,计算技术正以前所未有的速度发展,而边缘计算网关作为其中的重要一环,以其独特的优势正在逐步改变我们的生活方式和工作模式。本文将详细解析边缘计算网关的优势。 首先,边缘计算网关具有显著的…