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

前言:

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,需要修改成ontrack_functions = all   //默认为none,需要修改成all2.保存配置文件,并重启数据库生效pg_ctl -D $PGDTA restart3.使用管理员用户创建pg_stat_statements扩展antdb=# create extension pg_stat_statements;    CREATE EXTENSION
注:开启track_io_timing和track_functions这两个参数是为了pg_profile扩展更好的分析数据库使用安装:dblink1.使用管理员用户创建dblink扩展antdb=# create extension dblink ;    CREATE EXTENSION
注:这里安装dblink插件是为了监控同一套软件中存在多个数据库分析指标    
安装:pg_profile    1.tar xzf pg_profile--4.3.tar.gz --directory $(pg_config --sharedir)/extension2.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=# \dxList of installed extensionsName        | Version |   Schema   |                              Description                               
--------------------+---------+------------+------------------------------------------------------------------------dblink             | 1.2     | public     | connect to other PostgreSQL databases from within a databasepg_cron            | 1.3     | public     | Job scheduler for PostgreSQLpg_profile         | 4.1     | public     | PostgreSQL load profile repository and report builderpg_repack          | 1.5.0   | public     | Reorganize tables in PostgreSQL databases with minimal lockspg_stat_statements | 1.8     | public     | track planning and execution statistics of all SQL statements executedplorasql           | 1.0     | pg_catalog | PL/oraSQL procedural languageplpgsql            | 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_seqsequence servers_server_id_seqtable baselinestable bl_samplestable funcs_listtable import_queriestable import_queries_version_ordertable indexes_listtable last_stat_archivertable last_stat_clustertable last_stat_databasetable last_stat_database_srv1table last_stat_indexestable last_stat_indexes_srv1table last_stat_kcachetable last_stat_kcache_srv1table last_stat_statementstable last_stat_statements_srv1table last_stat_tablestable last_stat_tablespacestable last_stat_tablespaces_srv1table last_stat_tables_srv1table last_stat_user_functionstable last_stat_user_functions_srv1table last_stat_waltable reporttable report_statictable report_structtable roles_listtable sample_kcachetable sample_kcache_totaltable samplestable sample_settingstable sample_stat_archivertable sample_stat_clustertable sample_stat_databasetable sample_statementstable sample_statements_totaltable sample_stat_indexestable sample_stat_indexes_totaltable sample_stat_tablestable sample_stat_tablespacestable sample_stat_tables_totaltable sample_stat_user_functionstable sample_stat_user_func_totaltable sample_stat_waltable sample_timingstable serverstable stmt_listtable tables_listtable tablespaces_listtable wait_sampling_totalview v_sample_settingsview v_sample_stat_indexesview v_sample_stat_tablesview v_sample_stat_tablespacesview v_sample_stat_user_functionsview 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.mzph.cn/news/745050.shtml

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

相关文章

threejs简单创建一个几何体(一)

1.下包引入 //下包 npm install three yarn add three//引入 import * as THREE from three2.创建场景,摄像机 // 1.创建场景const scene new THREE.Scene()// 2.创建摄像机//第一个参数是视角,一般在60-90之间,第二个参数是场景的尺寸,一般取显示器的宽高,第三个参数是开始位…

下载chromedrive,使用自动化

1、先看一下自己浏览器的版本 2、访问 https://googlechromelabs.github.io/chrome-for-testing/

射影几何 -- 摄像机几何 1

三维计算机视觉的主要任务是利用三维物体的二维图像所包含的信息,获取三维物体的空间位置与形状等几何信息,并在此基础上识别三维物体。 摄像机关于空间平面的投影是平面到平面的一个二维中心投影变换 对于空间物体,由于摄像机将三维物体表面…

单例模式( Singleton)——创建型模式

单例模式——创建型模式 什么是单例模式? 单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。简单来说如果你创建了一个对象, 过一会儿后你决定再创建一个新对象, 此…

中国京津冀太阳能光伏推进大会暨展览会

能源是国民经济发展的重要基础之一。随着国民经济的发展,能源的缺口增大,能源安全及能源在国民经济中的地位越显突出。我国是世界上少数几个能源结构以煤为INVITATION主的国家之一,也是世界上最大的煤炭消费国,燃煤造成的环境污染…

Linux操作系统——常见指令(1)

今天分享一下Linux操作系统常见一些指令。今天介绍 ls pwd cd touch mkdir rmdir rm这几个指令。 ls指令 语法 ls 选项 目录或者文件 功能 对于目录,该命令列出该目录下的所有子目录和文件,对于文件,将列出文件名以及其他信息。 我们常用…

【单调栈】代码随想录算法训练营第六十天 |84.柱状图中最大的矩形(待补充)

84.柱状图中最大的矩形 1、题目链接:. - 力扣(LeetCode) 2、文章讲解:代码随想录 3、题目: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱…

将SQL数据库转换为Mysql数据库

一、准备工作 1、SQL server安装包与已经有数据的mdf、ldf数据库文件; 2、.net Framework安装包;(用于支持SQL Server安装的组件) 3、MySql安装包;(用于目标数据库的环境安装) 4、navicat安装包…

基于SpringBoot的“家乡特色推荐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“家乡特色推荐系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 文章分享界面…

WeiPHP Notice/index接口处存在RCE漏洞

产品介绍 WeiPHP是一款基于PHP开发的开源微信公众号开发框架。它提供了丰富的功能和易于使用的接口,使开发者能够快速构建和管理微信公众号应用。WeiPHP支持自定义菜单、消息管理、用户管理、素材管理、支付接口等功能,同时还提供了插件机制和模块化开发…

【DL经典回顾】激活函数大汇总(八)(Maxout Softmin附代码和详细公式)

激活函数大汇总(八)(Maxout & Softmin附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不…

学生时期学习资源同步-1 第一学期结业考试题4

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载

PBKDF2算法:保障密码安全的利器

title: PBKDF2算法:保障密码安全的利器 date: 2024/3/14 16:40:05 updated: 2024/3/14 16:40:05 tags: PBKDF2算法密码安全性迭代盐值密钥 PBKDF2算法起源: PBKDF2(Password-Based Key Derivation Function 2)算法是一种基于密码…

如何理解闭包

闭包是编程语言中一个重要的概念,特别是在函数式编程中常常会遇到。以下是对闭包的理解: 1. 定义: 闭包是一种函数,它引用了在其定义范围之外的自由变量(非全局变量),并且这些引用的变量在函数…

pip 配置镜像加速安装

在使用pip安装Python第三方库时,默认是使用pip官网的非常慢,可通过配置国内镜像源加速下载速度,以下是如何使用国内镜像源安装Python库的两种常见方式: 临时使用镜像源安装 如果你只是想临时使用某个镜像源安装单个或几个库&…

基于UE官方像素实现的像素流部署程序

写了很多像素流部署的技术文章,但因为大部分做UE的研发人员对于前端都不太熟悉,很难里面NodeJS中的官方像素流插件的使用。为此,我花了两天时间对官方像素流程序进行大量优化,支持以下特性。 单程序,支持windows和linux,无任何其他第三方依赖,双击即可运行完成像素流部署…

string接口[小白理解篇]

作文目的 本文是为了加深对string底层函数的一点理解(请勿与底层源码混为一谈),下面从模拟与注意项出发。 一.string 功能化模拟 1.迭代器模拟 迭代器,为实现简单便理解故使用指针的方式(非说明迭代器使用该方法实现)。其中的begin、end都是为了给迭代…

LVGL移植到ARM开发板(GEC6818开发板)

LVGL移植到ARM开发板(GEC6818开发板) 一、LVGL概述 LVGL(Light and Versatile Graphics Library)是一个开源的图形用户界面库,旨在提供轻量级、可移植、灵活和易于使用的图形用户界面解决方案。 它适用于嵌入式系统…

MySQL 系统变量查看与设置(System Variables Configuration)

MySQL中有大量的系统变量控制服务器的行为,大部分的系统变量是不需要我们调整的,保持默认即可。但为了获得更高的性能和稳定性,有时需要适当对部分变量进行调整,本文总结了MySQL中系统变量的查看与设置方法。 目录 一、变量的类型…

整数序列删除指定数字,其他数顺序不变

#include <stdio.h>//整数序列删除一个数&#xff0c;其他数顺序不变 int main() {int arr[50] {0};//int arr[50] {1,2,3,4,5};int n 0;int del 0;int i 0;int j 0;scanf("%d",&n);for(i 0;i < n;i)scanf("%d",&arr[i]);scanf(&q…