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

devtools/2024/11/14 2:52:20/

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

基础信息
OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo)
DB版本:16.2
pg软件目录:/home/pg16/soft
pg数据目录:/home/pg16/data
端口:5777

pg_stat_statements 是 PostgreSQL 中的一个非常有用的扩展,它用于跟踪和统计数据库中执行的所有SQL语句的性能。这个扩展可以帮助你识别最频繁运行的查询、哪些查询消耗的时间最长,以及系统的整体工作量,从而对性能瓶颈进行诊断和优化。

主要特性

  • 查询统计:收集关于执行的SQL语句的统计信息,包括调用次数、总执行时间、行读取数、行写入数等。
  • 性能分析:帮助识别最耗时的查询,以便进行查询优化。
  • 系统监控:了解系统运行情况,哪些查询对系统资源消耗最大。

安装和启用

要使用 pg_stat_statements 扩展,你首先需要在 PostgreSQL 安装它,然后在数据库中启用它。

  1. 安装扩展:这一步通常在 PostgreSQL 的安装过程中就已经完成。如果未完成,你可能需要根据操作系统和 PostgreSQL 的安装方法进行手动安装。

  2. 启用扩展:在你的目标数据库中运行以下SQL命令来启用 pg_stat_statements 扩展。

    CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
    

–创建

postgres=# SELECT * FROM pg_extension;oid  | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 
-------+---------+----------+--------------+----------------+------------+-----------+--------------14270 | plpgsql |       10 |           11 | f              | 1.0        |           | 
(1 row)postgres=# CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION
postgres=# SELECT * FROM pg_extension;oid  |      extname       | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 
-------+--------------------+----------+--------------+----------------+------------+-----------+--------------14270 | plpgsql            |       10 |           11 | f              | 1.0        |           | 16423 | pg_stat_statements |       10 |         2200 | t              | 1.10       |           | 
(2 rows)

配置

你可能需要在 postgresql.conf 配置文件中进行一些配置来使用 pg_stat_statements

  • shared_preload_libraries:需要将 pg_stat_statements 添加到这个参数中,以便在 PostgreSQL 启动时加载该扩展。修改配置后,你需要重启 PostgreSQL 服务。

    shared_preload_libraries = 'pg_stat_statements'
    
postgres=# select * from pg_settings  where name='shared_preload_libraries' and setting ='pg_stat_statements'; name | setting | unit | category | short_desc | extra_desc | context | vartype | source | min_val | max_val | enumvals | boot_val | reset_val | sourcefile | sourceline | pending_restart 
------+---------+------+----------+------------+------------+---------+---------+--------+---------+---------+----------+----------+-----------+------------+------------+-----------------
(0 rows)postgres=# alter system set shared_preload_libraries=pg_stat_statements;
ALTER SYSTEM
postgres=# \q
[pg16@test ~]$ pg_ctl restart
waiting for server to shut down....2024-04-24 21:22:28.679 PDT [14806] DEBUG:  logger shutting downdone
server stopped
waiting for server to start....2024-04-24 21:22:28.728 PDT [15113] DEBUG:  registering background worker "logical replication launcher"
2024-04-24 21:22:28.729 PDT [15113] DEBUG:  loaded library "pg_stat_statements"
2024-04-24 21:22:28.729 PDT [15113] DEBUG:  mmap(153092096) with MAP_HUGETLB failed, huge pages disabled: Cannot allocate memory
2024-04-24 21:22:28.750 PDT [15113] LOG:  redirecting log output to logging collector process
2024-04-24 21:22:28.750 PDT [15113] HINT:  Future log output will appear in directory "log".done
server started
[pg16@test ~]$ psql -p 5777
psql (16.2)
Type "help" for help.postgres=# select * from pg_settings  where name='shared_preload_libraries' and setting ='pg_stat_statements';name           |      setting       | unit |                        category                        |                   short_desc                   | extra_desc |  context   | 
vartype |       source       | min_val | max_val | enumvals | boot_val |     reset_val      |              sourcefile              | sourceline | pending_restart 
--------------------------+--------------------+------+--------------------------------------------------------+------------------------------------------------+------------+------------+-
--------+--------------------+---------+---------+----------+----------+--------------------+--------------------------------------+------------+-----------------shared_preload_libraries | pg_stat_statements |      | Client Connection Defaults / Shared Library Preloading | Lists shared libraries to preload into server. |            | postmaster | 
string  | configuration file |         |         |          |          | pg_stat_statements | /home/pg16/data/postgresql.auto.conf |          3 | f
(1 row)postgres=# 
  • track 配置:你可以通过调整 pg_stat_statements.track 参数来控制哪些SQL被统计(例如,仅统计顶级语句或所有语句)。

使用

启用和配置 pg_stat_statements 后,你可以开始查询收集到的数据。

postgres=# \d pg_stat_statementsView "public.pg_stat_statements"Column         |       Type       | Collation | Nullable | Default 
------------------------+------------------+-----------+----------+---------userid                 | oid              |           |          | dbid                   | oid              |           |          | toplevel               | boolean          |           |          | queryid                | bigint           |           |          | query                  | text             |           |          | plans                  | bigint           |           |          | total_plan_time        | double precision |           |          | min_plan_time          | double precision |           |          | max_plan_time          | double precision |           |          | mean_plan_time         | double precision |           |          | stddev_plan_time       | double precision |           |          | calls                  | bigint           |           |          | total_exec_time        | double precision |           |          | min_exec_time          | double precision |           |          | max_exec_time          | double precision |           |          | mean_exec_time         | double precision |           |          | stddev_exec_time       | double precision |           |          | rows                   | bigint           |           |          | shared_blks_hit        | bigint           |           |          | shared_blks_read       | bigint           |           |          | shared_blks_dirtied    | bigint           |           |          | shared_blks_written    | bigint           |           |          | local_blks_hit         | bigint           |           |          | local_blks_read        | bigint           |           |          | local_blks_dirtied     | bigint           |           |          | local_blks_written     | bigint           |           |          | temp_blks_read         | bigint           |           |          | temp_blks_written      | bigint           |           |          | blk_read_time          | double precision |           |          | blk_write_time         | double precision |           |          | temp_blk_read_time     | double precision |           |          | temp_blk_write_time    | double precision |           |          | wal_records            | bigint           |           |          | wal_fpi                | bigint           |           |          | wal_bytes              | numeric          |           |          | jit_functions          | bigint           |           |          | jit_generation_time    | double precision |           |          | jit_inlining_count     | bigint           |           |          | jit_inlining_time      | double precision |           |          | jit_optimization_count | bigint           |           |          | jit_optimization_time  | double precision |           |          | jit_emission_count     | bigint           |           |          | jit_emission_time      | double precision |           |          | postgres=# SELECT query, calls, total_exec_time, rows, 100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent FROM pg_stat_statements ORDER BY total_exec_time DESC;

这个查询将返回数据库中消耗时间最长的查询,包括它们被调用的次数、总执行时间、返回的行数和缓存命中率。

注意

  • pg_stat_statements 保存的统计信息是跨服务器重启累积的,但你可以通过调用 pg_stat_statements_reset() 函数来清除统计数据。
  • 在某些情况下,过多的细节信息可能被参数化,为了获得更具体的查询信息,你可能需要调整 pg_stat_statements.max 参数和其他相关配置。

pg_stat_statements 是 PostgreSQL 数据库性能监控和优化的重要工具之一,正确使用和解读它的数据可以大大帮助提高数据库的运行效率。

谨记:心存敬畏,行有所止。


http://www.ppmy.cn/devtools/23823.html

相关文章

力扣经典150题第四十七题:汇总区间

目录 题目描述和要求示例解释解题思路算法实现复杂度分析测试和验证总结和拓展参考资料 题目描述和要求 给定一个无重复元素的有序整数数组 nums,要求返回恰好覆盖数组中所有数字的最小有序区间范围列表。即,nums 的每个元素都恰好被某个区间范围所覆盖…

ECMAScript和JavaScript的区别

ECMAScript和JavaScript在多个方面存在区别。 首先,ECMAScript是JavaScript语言的规范和标准,由Ecma国际组织制定。它定义了JavaScript的语法、类型、语句、关键字以及保留字、操作符、对象等。JavaScript则是基于ECMAScript规范的一种实现,…

Thinkphp使用dd()函数

用过Laravel框架的同学都知道在调试代码的时候使用dd()函数打印变量非常方便,在ThinkPHP6及以上的版本框架中也默认加上了这个函数。但是在ThinkPHP5或更低版本的框架中,dd 并不是一个内置的方法,不过我们可以手动添加这个函数,步…

opencv 存储像素值为浮点数的图像 (.tiff)

在存储32CF1格式的深度图像时,怎么也存储不对 存储成jpg格式的,会乱码。be like 13.6的数据存储之后再读取变成…e-30存储成png格式时,会自动把浮点数转换成整数。13.6的数据读取之后就变成14了直接把深度图片存储成.npy格式python处理很简单…

Docker常见问题排查思路与实战

Docker作为一种流行的容器化技术,已经在众多场景中得到广泛应用。然而,在使用过程中,我们难免会遇到各种问题。本文将介绍一些常见的Docker问题及其排查思路,并通过实战案例帮助大家更好地理解和应对这些挑战。 1. Docker容器启动…

Python计算两个时间的时间差(工作笔记需要自取)

目录 专栏导读方法1:方法2总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章…

Java web第四次作业

要求:读取xml文件并在页面中显示出来。 采用三种方式实现,并体会其中的原理: 1.常规方式,controlller控制器不分层 代码:RestController public class PoetController { RequestMapping("/listPoet") pu…

图片恢复光影效果;通过拖拽等操作编辑3D实物;Cohere开源RAG技术;智能对话客服工具ChatGPT-On-CS

✨ 1: IntrinsicAnything 可以在光照条件未知的情况下,从单一图像中恢复出物体的材质 它就像是一位拥有高超技艺的画家,能够在仅有一张照片的情况下,准确地揭示出画中物体的材质,甚至在没有知道光线条件的情况下,都能…