Postgresql数据库运维统计信息

news2024/12/25 1:38:43

如果需要使用以下运维信息,需要如下几步

  • 修改postgresql.conf文件
#shared_preload_libraries = ''  # (change requires restart)

shared_preload_libraries = 'pg_stat_statements'
  • 重启数据库
  • 创建扩展
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

1. 统计信息的收集维度配置

1.1. 关键配置

  • track_activities : 收集SQL执行开始时间以及SQL语句的内容,默认打开
  • track_activity_query_size : 指定统计信息中允许存储的SQL长度,超出长度的SQL被截断,默认1024
  • track_counts : 收集数据库的活动信息(如新增的行数和删除的行数等)
  • track_io_timing : 收集IO操作的时间开销,因为需要不断的调用系统当前时间,所以某些系统中会带来极大的开销,从而带来极大的负面影响。
  • track_functions : 跟踪函数的调用次数和时间开销
  • update_process_title : 每次服务端process接收到新的SQL时更新command状态。
  • log_statement_stats (boolean) – 类似unix的getrusage()操作系统函数, 用于收集SQL语句级的资源开销统计. 包含以下3种层面的 全部. 因此配置了log_statement_stats就不需要配置以下选项.
  • log_parser_stats (boolean) – 同上, 但是只包含SQL parser部分的资源开销统计.
  • log_planner_stats (boolean) – 同上, 但是只包含SQL planner部分的资源开销统计.
  • log_executor_stats (boolean) – 同上, 但是只包含SQL executor部分的资源开销统计.

1.2 其他配置

在这里插入图片描述

字段名字段类型字段信息描述
pg_stat_get_backend_idset()setof integer当前活动后端ID号的集合(从1到活动后端数量)
pg_stat_get_backend_activity(integer)text此后端最近查询的文本
pg_stat_get_backend_activity_start(integer)timestamp with time zone最近一次查询开始的时间
pg_stat_get_backend_client_addr(integer)inet与此后端连接的客户端的IP地址
pg_stat_get_backend_client_port(integer)integer客户端用于通信的TCP端口号
pg_stat_get_backend_dbid(integer)oid此后端所连接的数据库的OID
pg_stat_get_backend_pid(integer)integer后端进程ID
pg_stat_get_backend_start (integer)timestamp with time zone此过程开始的时间
pg_stat_get_backend_userid(integer)oid登录到该后端用户的OID
pg_stat_get_backend_waiting(integer)boolean如果此后端当前正在等待锁,则为True
pg_stat_get_backend_xact_start(integer)timestamp with time zone如果此后端当前正在等待锁,则为True

2. 常用的监控数据库活动的sql

2.1. 调用次数倒序输出

select * from pg_stat_statements order by calls desc limit 1 offset 0;

在这里插入图片描述

2.2. 单次SQL执行时间倒序输出

select * from pg_stat_statements order by total_exec_time/calls desc limit 10 offset 0;

在这里插入图片描述

2.3. 按shared buffer “未命中块读” 倒序输出

select * from pg_stat_statements order by shared_blks_read desc limit 10 offset 0;

在这里插入图片描述

2.4. 获取CPU time Top20的统计结果

export PGPORT=1921 
export PGDATA=/data01/pgdata/1921/pg_root 
export LANG=en_US.utf8 
export PGHOME=/opt/pgsql 
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib 
export DATE=`date +"%Y%m%d%H%M"` 
export PATH=$PGHOME/bin:$PATH:. 
export PGHOST=$PGDATA 
export PGDATABASE=postgres 
psql -A -x -c "select row_number() over() as rn, * from (select query,' calls:'||calls||' total_exec_time_s:'||round(total_exec_time::numeric,2)||' avg_time_ms:'||round(1000*(total_exec_time::numeric/calls),2) as stats from pg_stat_statements order by total_exec_time desc limit 20) t;" >/tmp/stat_query.log 2>&1 
echo -e "$DATE avcp TOP20 query report yest"|mutt -s "$DATE avcp TOP20 query report yest" -a /tmp/stat_query.log digoal@126.com 
psql -c "select pg_stat_statements_reset()
crontab -e

1 8 * * * /home/postgres/script/report.sh

在这里插入图片描述

2.5. 查看数据库级统计信息

如数据库的 事务提交次数, 回滚次数, 未命中数据块读, 命中读, 行的统计信息(扫描, 输出,插入,更新,删除), 临时文件, 死锁, IOTIME等统计信息.

select tup_returned,tup_fetched from pg_stat_database where datname ='generalquery_frame';

在这里插入图片描述

字段名字段类型字段信息描述
datidid数据库OID
datanamename数据库Name
numbackendsinteger当前连接到此数据库的后端数量。这是该视图中唯一返回反映当前状态的值的列;所有其他列返回自上次重置以来的累积值
xact_commitbigint此数据库中已提交的事务数
xact_rollbackbigint此数据库中已回滚的事务数
blks_readbigint在此数据库中读取的磁盘块数目
blks_hitbigint磁盘块已经在缓冲缓存中被发现的次数,因此不需要读取(这只包括在PostgreSQL缓冲区中的命中)缓存,而不是操作系统的文件系统缓存)
tup_returnedbigint在此数据库中查询返回的行数
tup_fetchedbigint在此数据库中查询获取的行数
tup_insertedbigint查询在此数据库中插入的行数
tup_updatedbigint此数据库中查询更新的行数
tup_deletedbigint查询在此数据库中删除的行数
conflictsbigint由于与此数据库中的恢复冲突而取消的查询数。冲突只发生在备用服务器上;参见pa_stat_database_conflicts获取细节。)
temp_filesbigint查询在此数据库中创建的临时文件数。所有临时文件都会被计算在内,而不管临时文件是为什么创建的(例如:排序或散列),而不考虑日志临时文件的设置。
temp_bytesbigint在此数据库中查询写入临时文件的数据总量。所有临时文件都会被计算在内,而不管临时文件的原因是什么创建,而不考虑日志临时文件设置。
deadlocksbigint在此数据库中检测到的死锁数目
blk_read_timedouble precision后端在此数据库中读取数据文件块所花费的时间,以毫秒为单位
blk_write_timedouble precision后端在此数据库中写入数据文件块所花费的时间,以毫秒为单位
stats_resettimestamp_with这些统计数据最后重置的时间

2.6. 查看表级统计信息

区分全表扫描和索引扫描的次数和输出的行, 以及DML的行数, 评估的当前活动行数和垃圾行数

在这里插入图片描述

字段名字段类型字段信息描述
relidid数据库OID
schemanamename该表所在的模式名称
relnamename该表的名称
heap_blks_readbigint从该表中读取的磁盘块数量
heap_blks_hitbigint该表中的缓冲区命中数
idx_blks_readbigint从该表的所有索引中读取的磁盘块数
idx_blks_hitbigint该表上所有索引中的缓冲区命中数
toast_blks_readbigint从该表的TOAST表中读取的磁盘块数量(如果有的话)
toast_blks_hitbigint该表的TOAST表中的缓冲区命中次数(如果有的话)
tidx_blks_readbigint从该表的TOAST表索引中读取的磁盘块数量(如果有的话)
tidx_blks_hitbigint该表的TOAST表索引中的缓冲区命中数(如果有的话)

2.7. 查看索引级统计信息

在这里插入图片描述

字段名字段类型字段信息描述
relidoid索引表的OID
indexrelidoid该索引的OID
schemanamename此索引所在的模式的名称
relnamename此索引的表名
indexrelnamename该索引的名称
idx_scanbigint在该索引上启动的索引扫描次数
idx_tup_readbigint扫描该索引返回的索引条目数
idx_tup_fetchbigint使用该索引进行简单索引扫描获取的活动表行数

2.8. 表的IO级统计信息

如heap主存储的块读(区分未命中shared buffer和命中shared buffer的统计)

在这里插入图片描述

字段名字段类型字段信息描述
relidoid表的OID
schemanamename该表所在的模式名称
relnamename该表的名称
heap_blks_readbigint从该表中读取的磁盘块数量
heap_blks_hitbigint该表中的缓冲区命中数
idx_blks_readbigint从该表的所有索引中读取的磁盘块数
idx_blks_hitbigint该表上所有索引中的缓冲区命中数
toast_blks_readbigint从该表的TOAST表中读取的磁盘块数量(如果有的话)
toast_blks_hitbigint该表的TOAST表中的缓冲区命中次数(如果有的话)
tidx_blks_readbigint从该表的TOAST表索引中读取的磁盘块数量(如果有的话)
tidx_blks_hitbigint该表的TOAST表索引中的缓冲区命中数(如果有的话)

2.9. 索引的IO级统计信息

索引的块读(区分未命中shared buffer和命中shared buffer的统计)

在这里插入图片描述

字段名字段类型字段信息描述
relidoid索引表的OID
indexrelidoidOID of this index
schemanamename该索引的OID
relnamename此索引的表名
indexrelnamename该索引的名称
idx_blks_readbigint从该索引读取的磁盘块数目
idx_blks_hitbigint这个索引中的缓冲区命中数

2.10. 序列的IO级统计信息

序列的块读(区分未命中shared buffer和命中shared buffer的统计)

在这里插入图片描述

字段名字段类型字段信息描述
relidoid序列的OID
schemanamename此序列所在的模式名称
relnamename这个序列的名称
blks_readbigint从这个序列中读取的磁盘块的数目
blks_hitbigint这个序列中缓冲区命中的次数

2.11. , 函数的统计信息

调用次数, 总的时间开销.
必须要先打开track_functions参数.

在这里插入图片描述

字段名字段类型字段信息描述
funcidoid函数的OID
schemanamename此函数所在的模式名称
funcnamename此函数的名称
callsbigint这个函数被调用的次数
total timedouble precision在这个函数和它调用的所有其他函数中花费的总时间,以毫秒为单位
self_timedouble precision在这个函数本身中花费的总时间,不包括它调用的其他函数,以毫秒为单位

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

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

相关文章

java: Internal error in the mapping processor: java.lang.NullPointerException

启动java项目出错,其他人工程没有问题,别着急。 java: Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifestUrl(DefaultVersionInformation.j…

微信如何养号?

目前导致微信封号的几点原因如下: 1.使用虚拟定位软件,进行附近人任务,频繁的切换ip,极易被判定微信被盗,对其封号 2.频发的群发骚扰消息,朋友圈发送过于频繁,给别人造成骚扰及其投诉 3.和微信好友聊天涉…

Python接口自动化测试 ---Allure报告使用详解

这一节主要是记录allure的内容以及用法,怎么让他生成一个完整的想要的报告。 allure生成的报告和其他五花八门的报告对比了一下,它的可读性是最好、最直观的。这不仅仅是我想要的效果,也是很多小伙伴想要的结果,毕竟这是给领导看…

JSON详细教程

😊JSON详细教程 🚩JSON简介☃️JSON语法规则🔊JSON和JavaScript对象的区别 ☃️JSON数据类型字符串🔊数字🔊布尔值🔊数组🔊对象🔊Null ☃️JSON对象🔊访问JSON对象的值&a…

Linux脚本sed命令

目录 一. sed命令定义 二. sed命令选项 三. sed语法选项 四. 案例解释 1. 打印奇数或偶数行 2. 打印固定行数 3. 打印包含字符的行 4. 打印特定字符首尾行 5. 删除固定行数 6. 删除特定字符行 7. 插入在固定行中 8. 替换规定行数 9. 使用变量 10. 多点编辑 11. 分…

研究前沿|NAR:一个综合性的植物代谢组数据库

引言 2023年10月,华中农业大学小麦改良创新团队陈伟教授课题组在Nucleic Acids Research发表题为“PMhub 1.0: a comprehensive plant metabolome database”的文章,系统介绍了他们开发的植物代谢分析网站(PMhub)的功能与价值。P…

【AICFD案例教程】水冷板散热分析

AICFD是由天洑软件自主研发的通用智能热流体仿真软件,用于高效解决能源动力、船舶海洋、电子设备和车辆运载等领域复杂的流动和传热问题。软件涵盖了从建模、仿真到结果处理完整仿真分析流程,帮助工业企业建立设计、仿真和优化相结合的一体化流程&#x…

基于SpringBoot的手机官方商城系统

基于SpringBoot的手机官方商城系统 摘要:随着电子商务的发展,网上购物已成为人们普遍的购物方式。与此同时,网上支付也得到了迅速的发展,大有赶超传统支付的趋势。在今天这个信息化程度高、生活节奏快的现代社会,传统…

强化学习Q-Learning算法和简单迷宫代码

使用到的符号: agent 代理 reward 奖励 state(s) 状态 action(a) 行为 R reward 矩阵 Q 矩阵:表示从经验中学到的知识 episode:表示 初始→目标 一整个流程 贝尔曼方程(迭代公式): Q ( s , a ) ← Q ( s …

网络割接,用VRRP替换HSRP,你得这么割才行!

组网需求 如图3-11所示,C6500作为核心层设备上行连接出口路由器NE40E-X3,下行连接接入层设备CE6800。C6500上配置HSRP实现冗余备份网关,同时在二层网络部署MSTP破除环路。 总体思路 HSRP为CISCO私有协议,CE系列交换机&#xff08…

RabbitMQ之延迟消息

文章目录 前言一、死信交换机二、延迟消息死信交换机实现延迟消息图解流程 DelayExchange插件实现延迟消息安装插件声明延迟交换机发送延迟消息 总结 前言 死信交换机、延迟消息 一、死信交换机 当一个队列中的消息满足下列情况之一时,可以成为死信(dea…

微信小程序推送服务号消息(一)【Go+微信小程序+微信服务号+微信开放平台】

一、需求场景 业务需要给微信小程序用户在某些场景推送微信服务号消息,例如:订单即将超时,电子合同签约超时等; 二、开发准备 1、开通微信服务号 入口:微信公众平台 1.1 在服务号中获取推送消息所需的配置信息&#…

头插法巧解任意链表区间反转

题目链接:https://leetcode.cn/problems/reverse-linked-list-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150 头节点插入法,设置一个虚拟节点,不断循环到要反转的前面一个位置,哪怕是1也能包含进去。接着反…

Python UUID 完全指南

更多资料获取 📚 个人网站:ipengtao.com UUID(Universally Unique Identifier,通用唯一标识符)是一种全局唯一标识符生成方式,用于创建独一无二的标识符。Python的 uuid 模块提供了多种方法用于生成各种类…

四丶openlayer之瓦片地图

瓦片地图源于一种大地图解决方案,针对一整块非常大的地图进行切片,分成很多相同大小的小块地图,在用户访问的时候,再一块一块小地图加载,拼接在一起,从而还原成一整块大的地图。这样做的优点在于&#xff0…

【算法】FFT-1(递归实现)(不包括IFFT)

FFT 多项式多项式乘法复数及运算导数泰勒公式及展开式欧拉公式单位根 FFTCode IFFT 多项式 我们从课本中可以知道,一个 n − 1 n-1 n−1 次的多项式可以写成 a 0 a 1 x a 2 x 2 a 3 x 3 ⋯ a n − 1 x n − 1 a_{0}a_{1}xa_{2}x^2a_{3}x^3\dotsa_{n-1}x^{n-…

从 0 搭建 Vite 3 + Vue 3 Js版 前端工程化项目

之前分享过一篇vue3+ts+vite构建工程化项目的文章,针对小的开发团队追求开发速度,不想使用ts想继续使用js,所以就记录一下从0搭建一个vite+vue3+js的前端项目,做记录分享。 技术栈 Vite 3 - 构建工具 Vue 3 Vue Router - 官方路由管理器 Pinia - Vue Store你也可以选择vue…

2023年【G2电站锅炉司炉】考试试卷及G2电站锅炉司炉模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 G2电站锅炉司炉考试试卷是安全生产模拟考试一点通生成的,G2电站锅炉司炉证模拟考试题库是根据G2电站锅炉司炉最新版教材汇编出G2电站锅炉司炉仿真模拟考试。2023年【G2电站锅炉司炉】考试试卷及G2电站锅炉…

Unity 接入TapADN播放广告时闪退 LZ4JavaSafeCompressor

通过跟踪安卓日志,发现报如下错误 Didnt find class "com.tapadn.lz4.LZ4JavaSafeCompressor" 解决方案: 去掉Minify这边的勾选,再打包即可。

香港优才计划是什么意思?一文详解2023年最新政策!

香港优才计划是什么意思?一文详解2023年最新政策! 目前香港优才计划申请火热,但是还是有很多新手不太了解这个项目,跟风申请绝对不是什么好事,先了解清楚再考虑也是对自己对家人的一种交代。这篇文章就再来科普下。 优…