使用 pg_profile 在 Postgres 中生成性能分析报告

news2025/1/15 23:47:32

前言:

postgres数据库中拥有大量的辅助插件用于帮助DBA更好的分析数据库性能或整个集群,包括索引、I/O、CPU和内存等,pg_profile是基于PostgreSQL标准统计信息视图的诊断工具,它类似于Oracle AWR架构,和Oracle一样,它在指定时间生成快照,并且提供html格式来解释快照之间的统计数据;今天我们就来聊聊pg_profile这款性能分析工具有哪些功能和优点。

pg_profile工作原理:

pg_profile通过捕获数据库中被任意服务器进程执行的命令、收集关于表和索引访问的统计信息、监控对块读写次数、对用户定义函数使用的跟踪等四个方面来进行性能分析汇总展示,另外它还需追踪pg_stat_statements所有服务数据库执行sql语句的执行统计信息

1.安装部署与配置:

提示:
    安装pg_profile扩展需要使用dblink扩展和pg_stat_statements扩展,因此在安装pg_profile扩展前需要先安装dblink扩展和pg_stat_statements扩展这两个扩展。

安装:pg_stat_statements(pg_stat_statements是数据库自带一种扩展)
    1.修改配置文件
    vi postgresql.conf
    修改:
    shared_preload_libraries = 'pg_stat_statements,pg_cron'
    track_activities = on   //默认开启
    track_counts = on       //默认开启
    track_io_timing = on    //默认为off,需要修改成on
    track_functions = all   //默认为none,需要修改成all
    2.保存配置文件,并重启数据库生效
    pg_ctl -D $PGDTA restart
    3.使用管理员用户创建pg_stat_statements扩展
    antdb=# create extension pg_stat_statements;    
    CREATE EXTENSION
注:开启track_io_timing和track_functions这两个参数是为了pg_profile扩展更好的分析数据库使用

安装:dblink
    1.使用管理员用户创建dblink扩展
    antdb=# create extension dblink ;    
    CREATE EXTENSION
    
安装:pg_profile    
    1.tar xzf pg_profile--4.3.tar.gz --directory $(pg_config --sharedir)/extension
    2.antdb=# create schema profile;
    3.antdb=# create extension pg_profile schema profile;    
    CREATE EXTENSION
注:1.单独创建一个profile模式,是为将pg_profile扩展的表、视图、序列和函数单独创建到自定义模式中,与其他用户数据对象进行有效隔离。
    2.如果没有安装dblink和pg_stat_statements会报ERROR:  required extension "dblink" is not installed错。

查询扩展是否部署成功:
    antdb=# \dx
                                            List of installed extensions
        Name        | Version |   Schema   |                              Description                               
--------------------+---------+------------+------------------------------------------------------------------------
 dblink             | 1.2     | public     | connect to other PostgreSQL databases from within a database
 pg_cron            | 1.3     | public     | Job scheduler for PostgreSQL
 pg_profile         | 4.1     | public     | PostgreSQL load profile repository and report builder
 pg_repack          | 1.5.0   | public     | Reorganize tables in PostgreSQL databases with minimal locks
 pg_stat_statements | 1.8     | public     | track planning and execution statistics of all SQL statements executed
 plorasql           | 1.0     | pg_catalog | PL/oraSQL procedural language
 plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language
(7 rows)

2.查询pg_profile扩展信息


antdb=# \dx+ profile.pg_profile 
                       Objects in extension "pg_profile"
                               Object description                               
--------------------------------------------------------------------------------
 function check_stmt_cnt_all_htbl(jsonb,integer)
 function check_stmt_cnt_first_htbl(jsonb,integer)
 function check_stmt_cnt(integer,integer,integer)
 function check_stmt_cnt_second_htbl(jsonb,integer)
 function cleanup_report_temp_tables(jsonb,integer)
 function cluster_stats_diff_htbl(jsonb,integer)
 function cluster_stats_htbl(jsonb,integer)
 function cluster_stats(integer,integer,integer)
 function cluster_stats_reset_diff_htbl(jsonb,integer)
 function cluster_stats_reset_htbl(jsonb,integer)
 function cluster_stats_reset(integer,integer,integer)
 function collect_obj_stats(jsonb,integer,integer,boolean)
 function collect_pg_stat_statements_stats(jsonb,integer,integer,integer)
 function collect_pg_wait_sampling_stats_11(jsonb,integer,integer,integer)
 function collect_pg_wait_sampling_stats(jsonb,integer,integer,integer)
 function collect_queries(oid,oid,bigint)
 function create_baseline(character varying,integer,integer,integer)
 function create_baseline(character varying,tstzrange,integer)
 function create_baseline(name,character varying,integer,integer,integer)
 function create_baseline(name,character varying,tstzrange,integer)
 function create_server(name,text,boolean,integer,text)
 function create_server_partitions(integer)
 function dbagg_jit_stats_diff_htbl(jsonb,integer)
 function dbagg_jit_stats_htbl(jsonb,integer)
 function dbstats_diff_htbl(jsonb,integer)
 function dbstats_htbl(jsonb,integer)
 function dbstats(integer,integer,integer)
 function dbstats_reset_diff_htbl(jsonb,integer)
 function dbstats_reset_htbl(jsonb,integer)
 function dbstats_reset(integer,integer,integer)
 function dbstats_sessions_diff_htbl(jsonb,integer)
 function dbstats_sessions_htbl(jsonb,integer)
 function dbstats_sessions(integer,integer,integer,integer)
 function delete_samples(integer,integer)
 function delete_samples(integer,integer,integer)
 function delete_samples(name,integer,integer)
 function delete_samples(name,tstzrange)
 function delete_samples(tstzrange)
 function disable_server(name)
 function drop_baseline(character varying)
 function drop_baseline(name,character varying)
 function drop_server(name)
 function enable_server(name)
 function export_data(name,integer,integer,boolean)
 function func_top_calls_diff_htbl(jsonb,integer)
 function func_top_calls_htbl(jsonb,integer)
 function func_top_time_diff_htbl(jsonb,integer)
 function func_top_time_htbl(jsonb,integer)
 function func_top_trg_diff_htbl(jsonb,integer)
 function func_top_trg_htbl(jsonb,integer)
 function get_baseline_samples(integer,character varying)
 function get_connstr(integer,jsonb)
 function get_diffreport(character varying,character varying,text,boolean)
 function get_diffreport(character varying,integer,integer,text,boolean)
 function get_diffreport(integer,integer,character varying,text,boolean)
 function get_diffreport(integer,integer,integer,integer,integer,text,boolean)
 function get_diffreport(integer,integer,integer,integer,text,boolean)
 function get_diffreport(name,character varying,character varying,text,boolean)
 function get_diffreport(name,character varying,integer,integer,text,boolean)
 function get_diffreport(name,character varying,tstzrange,text,boolean)
 function get_diffreport(name,integer,integer,character varying,text,boolean)
 function get_diffreport(name,integer,integer,integer,integer,text,boolean)
 function get_diffreport(name,tstzrange,character varying,text,boolean)
 function get_diffreport(name,tstzrange,tstzrange,text,boolean)
 function get_report(character varying,text,boolean)
 function get_report_context(integer,integer,integer,text,integer,integer)
 function get_report(integer,integer,integer,text,boolean)
 function get_report(integer,integer,text,boolean)
 function get_report(integer,tstzrange,text,boolean)
 function get_report_latest(name)
 function get_report(name,character varying,text,boolean)
 function get_report(name,integer,integer,text,boolean)
 function get_report(name,tstzrange,text,boolean)
 function get_report_template(jsonb,integer)
 function get_report(tstzrange,text,boolean)
 function get_sampleids_by_timerange(integer,tstzrange)
 function get_server_by_name(name)
 function get_sized_bounds(integer,integer,integer)
 function import_data(regclass,text)
 function init_report_temp_tables(jsonb,integer)
 function ix_top_fetch_diff_htbl(jsonb,integer)
 function ix_top_fetch_htbl(jsonb,integer)
 function ix_top_io_diff_htbl(jsonb,integer)
 function ix_top_io_htbl(jsonb,integer)
 function ix_unused_htbl(jsonb,integer)
 function jsonb_replace(jsonb,jsonb)
 function keep_baseline(character varying,integer)
 function keep_baseline(name,character varying,integer)
 function mark_pg_stat_statements(integer,integer,integer)
 function profile_checkavail_functions(integer,integer,integer)
 function profile_checkavail_io_times(integer,integer,integer)
 function profile_checkavail_planning_times(integer,integer,integer)
 function profile_checkavail_rusage(integer,integer,integer)
 function profile_checkavail_rusage_planstats(integer,integer,integer)
 function profile_checkavail_sessionstats(integer,integer,integer)
 function profile_checkavail_statements_jit_stats(integer,integer,integer)
 function profile_checkavail_statstatements(integer,integer,integer)
 function profile_checkavail_stmt_wal_bytes(integer,integer,integer)
 function profile_checkavail_trg_functions(integer,integer,integer)
 function profile_checkavail_wait_sampling_total(integer,integer,integer)
 function profile_checkavail_walstats(integer,integer,integer)
 function rename_server(name,name)
 function report_queries(jsonb,integer)
 function sample_dbobj_delta(jsonb,integer,integer,integer,boolean)
 function save_pg_stat_statements(integer,integer)
 function set_server_connstr(name,text)
 function set_server_db_exclude(name,name[])
 function set_server_description(name,text)
 function set_server_max_sample_age(name,integer)
 function set_server_size_sampling(name,time with time zone,interval,interval)
 function settings_and_changes_diff_htbl(jsonb,integer)
 function settings_and_changes_htbl(jsonb,integer)
 function settings_and_changes(integer,integer,integer)
 function show_baselines(name)
 function show_samples(integer)
 function show_samples(name,integer)
 function show_servers()
 function show_servers_size_sampling()
 function snapshot()
 function snapshot(name)
 function statements_stats_diff_htbl(jsonb,integer)
 function statements_stats_htbl(jsonb,integer)
 function statements_stats(integer,integer,integer,integer)
 function tablespaces_stats_diff_htbl(jsonb,integer)
 function tablespaces_stats_htbl(jsonb,integer)
 function tablespace_stats(integer,integer,integer)
 function take_sample()
 function take_sample(integer,boolean)
 function take_sample(name,boolean)
 function take_sample_subset(integer,integer)
 function tbl_top_dead_htbl(jsonb,integer)
 function tbl_top_fetch_diff_htbl(jsonb,integer)
 function tbl_top_fetch_htbl(jsonb,integer)
 function tbl_top_io_diff_htbl(jsonb,integer)
 function tbl_top_io_htbl(jsonb,integer)
 function tbl_top_mods_htbl(jsonb,integer)
 function template_populate_sections(jsonb,integer,text,integer)
 function top_analyzed_tables_diff_htbl(jsonb,integer)
 function top_analyzed_tables_htbl(jsonb,integer)
 function top_cpu_time_diff_htbl(jsonb,integer)
 function top_cpu_time_htbl(jsonb,integer)
 function top_dml_tables_diff_htbl(jsonb,integer)
 function top_dml_tables_htbl(jsonb,integer)
 function top_elapsed_diff_htbl(jsonb,integer)
 function top_elapsed_htbl(jsonb,integer)
 function top_exec_diff_htbl(jsonb,integer)
 function top_exec_htbl(jsonb,integer)
 function top_exec_time_diff_htbl(jsonb,integer)
 function top_exec_time_htbl(jsonb,integer)
 function top_functions(integer,integer,integer,boolean)
 function top_growth_indexes_diff_htbl(jsonb,integer)
 function top_growth_indexes_htbl(jsonb,integer)
 function top_growth_tables_diff_htbl(jsonb,integer)
 function top_growth_tables_htbl(jsonb,integer)
 function top_indexes(integer,integer,integer)
 function top_io_filesystem_diff_htbl(jsonb,integer)
 function top_io_filesystem_htbl(jsonb,integer)
 function top_io_indexes(integer,integer,integer)
 function top_io_tables(integer,integer,integer)
 function top_iowait_diff_htbl(jsonb,integer)
 function top_iowait_htbl(jsonb,integer)
 function top_jit_diff_htbl(jsonb,integer)
 function top_jit_htbl(jsonb,integer)
 function top_kcache_statements(integer,integer,integer)
 function top_plan_time_diff_htbl(jsonb,integer)
 function top_plan_time_htbl(jsonb,integer)
 function top_scan_tables_diff_htbl(jsonb,integer)
 function top_scan_tables_htbl(jsonb,integer)
 function top_shared_blks_fetched_diff_htbl(jsonb,integer)
 function top_shared_blks_fetched_htbl(jsonb,integer)
 function top_shared_dirtied_diff_htbl(jsonb,integer)
 function top_shared_dirtied_htbl(jsonb,integer)
 function top_shared_reads_diff_htbl(jsonb,integer)
 function top_shared_reads_htbl(jsonb,integer)
 function top_shared_written_diff_htbl(jsonb,integer)
 function top_shared_written_htbl(jsonb,integer)
 function top_statements(integer,integer,integer)
 function top_tables(integer,integer,integer)
 function top_temp_diff_htbl(jsonb,integer)
 function top_temp_htbl(jsonb,integer)
 function top_upd_vac_tables_diff_htbl(jsonb,integer)
 function top_upd_vac_tables_htbl(jsonb,integer)
 function top_vacuumed_indexes_diff_htbl(jsonb,integer)
 function top_vacuumed_indexes_htbl(jsonb,integer)
 function top_vacuumed_tables_diff_htbl(jsonb,integer)
 function top_vacuumed_tables_htbl(jsonb,integer)
 function top_wait_sampling_events_diff_htbl(jsonb,integer)
 function top_wait_sampling_events_htbl(jsonb,integer)
 function top_wal_size_diff_htbl(jsonb,integer)
 function top_wal_size_htbl(jsonb,integer)
 function wait_sampling_totals_diff_htbl(jsonb,integer)
 function wait_sampling_totals_htbl(jsonb,integer)
 function wait_sampling_total_stats(integer,integer,integer)
 function wal_stats_diff_htbl(jsonb,integer)
 function wal_stats_htbl(jsonb,integer)
 function wal_stats(integer,integer,integer)
 function wal_stats_reset_diff_htbl(jsonb,integer)
 function wal_stats_reset_htbl(jsonb,integer)
 function wal_stats_reset(integer,integer,integer)
 sequence baselines_bl_id_seq
 sequence servers_server_id_seq
 table baselines
 table bl_samples
 table funcs_list
 table import_queries
 table import_queries_version_order
 table indexes_list
 table last_stat_archiver
 table last_stat_cluster
 table last_stat_database
 table last_stat_database_srv1
 table last_stat_indexes
 table last_stat_indexes_srv1
 table last_stat_kcache
 table last_stat_kcache_srv1
 table last_stat_statements
 table last_stat_statements_srv1
 table last_stat_tables
 table last_stat_tablespaces
 table last_stat_tablespaces_srv1
 table last_stat_tables_srv1
 table last_stat_user_functions
 table last_stat_user_functions_srv1
 table last_stat_wal
 table report
 table report_static
 table report_struct
 table roles_list
 table sample_kcache
 table sample_kcache_total
 table samples
 table sample_settings
 table sample_stat_archiver
 table sample_stat_cluster
 table sample_stat_database
 table sample_statements
 table sample_statements_total
 table sample_stat_indexes
 table sample_stat_indexes_total
 table sample_stat_tables
 table sample_stat_tablespaces
 table sample_stat_tables_total
 table sample_stat_user_functions
 table sample_stat_user_func_total
 table sample_stat_wal
 table sample_timings
 table servers
 table stmt_list
 table tables_list
 table tablespaces_list
 table wait_sampling_total
 view v_sample_settings
 view v_sample_stat_indexes
 view v_sample_stat_tables
 view v_sample_stat_tablespaces
 view v_sample_stat_user_functions
 view v_sample_timings
(257 rows)

3.pg_profile使用

1.打开一个psql命令行窗口,并使用数据库管理账户登录数据库,执行数据库的快照
antdb=# select profile.snapshot();    
        snapshot        
------------------------
 (local,OK,00:00:01.45)
(1 row)

提示:为了使生成的数据库性能报告更加准确,可以在执行PL/PGSQL程序的过程中多生成几次快照信息。

2.查询生成的快照信息
antdb=# select profile.show_samples();      
           show_samples            
-----------------------------------
 (1,"2024-03-13 17:00:48+08",t,,,)
 (2,"2024-03-13 17:02:23+08",t,,,)
(2 rows)

3.生成数据库性能报告
psql -d antdb -qtc "select profile.get_report(1,2)" --output ~/awr_report_antdb_1_2.html

提示:pg_profile可以和pg_cron扩展一起使用,使用pg_cron扩展定义数据库定时任务去每半分钟生成一次快照信息。后期方便排查数据库问题。

4.报告分析

  • Server statistics:服务器的统计信息,包含整个数据库在此快照运行期间的相关统计信息,如事务数、内存命中率、元组的操作统计数据、数据库调用次数、数据库集群的统计信息和表空间信息。
  • SQL query statistics:SQL查询的统计信息,主要包含Top SQL的相关信息,如执行时长、执行次数、执行消耗的I/O,以及逻辑读信息和完整的SQL语句。更具Query ID可以查看具体的SQL语句。
  • Schema object statistics:模式对象的统计信息,这里主要包含访问频率最高的对象的信息,根据这部分信息可以定位到DML操作最频繁的表和索引、以及无效的索引等。
  • Vacuum-related statistics:VACUUM相关的统计信息。
  • Cluster settings during the report interval:报告快照期间的参数设置。

 

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

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

相关文章

MFC 添加MFC类方法

1、打开工程目录的"类视图" 2、工程名右键添加"MFC类" 3、填写"类名"并选择“基类”CDialog,对话框ID填写添加好的对话框ID

2024(1),Android高分面试指南

以前,见到过挺多这样的新闻,某些学霸,成绩稍微有点下滑之类的,就受不了,做出一些过激的行为。如自杀等。这是非常懦弱的表现。究其背后,这是因为他们把自己蹦的太紧了。就像气球,你憋着一直吹气…

【PyTorch][chapter 22][李宏毅深度学习]【无监督学习][ WGAN]【理论二】

前言: 本篇主要参考《Wasserstein GAN and the Kantorovich-Rubinstein Duality》 重点介绍一下 WGAN 的损失函数 是如何通过 Wasserstein Distance 变换过来的。 分为5步: 我们首先建立Wasserstein Distance 极小值形式, 经过对…

QGIS 开发之旅二《构建插件工程》

上一篇文章写了二次开发环境的构建,这一章我们从零开始构建插件工程,并理解下QIGIS 如何识别插件程序的。 1、创建QGIS 工程 新建项目,选择下面的空工程 工程创建成功后,是下面的样子,没有任何文件 2、配置QGIS工程 …

掼蛋-掌握出牌权

掼蛋游戏中,出牌权往往能决定一局牌的走向,掌握出牌权可以主动控制局势。出牌权是指在每一轮的出牌环节中谁先出牌。出牌权的重要性主要体现在以下两个方面: 一、控制节奏 出牌权可以让我们主动控制游戏的节奏,可以根据自己的出牌…

VUE3项目学习系列--项目基础配置(四)

目录 一、环境变量配置 二、SVG图标配置 三、注册组件为全局组件 四、集成sass 1、安装依赖 2、添加文件 3、配置 一、环境变量配置 项目开发过程中会经历开发环境、测试环境、生产环境三种状态,对与环境变量的配置需求不同,因此需要在项目中进行环…

移动端研发技术的进化历程

移动端研发技术 移动端研发技术主要分为原生开发和跨平台开发。本章主要介绍一下移动开发技术的过去、当下和未来,一步一步介绍移动技术的进化历程。 原生开发 原生应用程序是指某一个移动平台(比如iOS或Android)所特有的应用,使…

【漏洞复现】CERIO DT系列路由器 远程代码执行漏洞

0x01 产品简介 CERIO DT系列路由器是中国台湾智鼎资讯(CERIO)公司的一款无线路由器。 0x02 漏洞概述 CERIO DT系列路由器在特定版本中存在操作命令注入漏洞。未授权的攻击者可利用该漏洞进行远程代码执行,从而控制服务器。 0x03 测绘语句…

电脑数据守护神:备份文件的重要性与实用方案

一、备份文件:数据安全的第一道防线 在数字化时代,电脑已成为我们生活和工作中不可或缺的一部分。无论是个人用户还是企业组织,电脑中存储的各类文件都承载着重要的信息。然而,随着电脑使用频率的增加,数据丢失或损坏…

R语言复现:如何利用logistic逐步回归进行影响因素分析?

Logistic回归在医学科研、特别是观察性研究领域,无论是现况调查、病例对照研究、还是队列研究中都是大家经常用到的统计方法,而在影响因素研究筛选自变量时,大家习惯性用的比较多的还是先单后多,P<0.05纳入多因素研究&…

第五节:使用SMB开发WebSocket通信

一、概述 本节主要讲解在SMB中如何进行websocket快速开发,实现客户端连接、关闭、消息通讯等功能。 示例下载:https://download.csdn.net/download/lllllllllluoyi/88949743 二、创建WebSocket服务器 1、在csdnProject工程中新建一个消息流。 添加W…

MySQL实战:问题排查与监控

常见问题 有更合适的索引不走,怎么办? MySQL在选取索引时,会参考索引的基数,基数是MySQL估算的,反映这个字段有多少种取值,估算的策略为选取几个页算出取值的平均值,再乘以页数,即…

经验分享:专业知识库的搭建秘诀都在这里啦!

我想必每个人都有过被一堆纷繁复杂的信息搞得头疼不已的时候,对吧?那么你是否想过,如果我们有一个专门收藏整理这些信息的地方,会变得多么方便呢?这就是知识库的作用。所以,接下来我就要向大家分享如何搭建…

如何设计一个高并发的系统--简谈

设计一个高并发系统可以从下面这些角度来考虑。 所谓设计高并发系统,就是设计一个系统,保证它整体可用的同时,能够处理很高的并发用户请求,能够承受很大的流量冲击。 我们要设计高并发的系统,那就需要处理好一些常见…

【MySQL】-知识点整理

1、存储引擎 -- 查询数据库支持的存储引擎 show engines; -- 查询当前数据库使用的存储引擎 show variables like %storage_engines%; 主要的存储引擎说明: 1)MyISAM:无外键、表锁、所有索引都是非聚簇索引、无事务、记录表总条数、删除表…

Realsense 相机SDK学习(一)——librealsense使用方法及bug解决(不使用Ros)

一.介绍 realsense相机是一个intel开发出来的一款深度相机,我之前使用他来跑过slam,也配置过他的驱动,在此附上realsense的相机驱动安装方法:Ubuntu20.04安装Intelrealsense相机驱动(涉及Linux内核降级) …

支持S/MIME证书的邮件客户端有哪些?

S/MIME证书,也叫做邮件安全证书,支持安全/多用途互联网邮件扩展协议(S/MIME协议),是通过加密和数字签名来确保电子邮件的安全性、保密性和完整性的数字证书。GDPR、HIPAA、FDA等多个行业都要求邮件发送方在发送邮件时对…

EasyPoi 教程

文章目录 EasyPoi教程文档1. 前传1.1 前言 这个服务即将关闭,文档迁移到 http://www.wupaas.com/ 请大家访问最新网站1.2 Easypoi介绍1.3 使用1.4 测试项目1.5 可能存在的小坑 2. Excel 注解版2.1 Excel导入导出2.2 注解注解介绍ExcelTargetExcelEntityExcelCollectionExcelIgn…

如何在群晖NAS部署WPS容器并实现无公网IP远程访问本地office软件

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本,通过…

Express学习(四)

使用Express写接口 创建基本的服务器 创建API路由模块 编写GET接口 编写POST接口 CORS跨域资源共享 什么是CORS CORS由一系列HTTP响应头组成,这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源。浏览器的同源安全策略默认会阻止网页“跨域”获取资源。但如…