Postgresql数据库运维统计信息

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

  • 修改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 -e1 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.hqwc.cn/news/229322.html

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

相关文章

AcWing 2816. 判断子序列

文章目录 AcWing 2816. 判断子序列我的思路CODE 欣赏大神代码给点思考 AcWing 2816. 判断子序列 题目链接:https://www.acwing.com/activity/content/problem/content/2981/ 我的思路 直接硬套模版,把两个指针两层循环写上如果匹配,记录数组…

苹果手机怎么卸载微信?记得掌握这两种方法!

微信是一款社交应用程序,在聊天过程中,我们会经常发送和接收各种形式的信息。随着时间的推移,微信缓存的文件会越来越多,占用的存储空间也会逐渐增加。 卸载微信可以释放手机内存,提高手机的运行速度。那么&#xff0…

Python 分解IP段获取所有IP(子网掩码)

需求 192.168.1.0/24,192.168.2.1-192.168.2.254,192.168.3.3 IP段格式已 "," 分割,获取所有IP 注意 1. 判断 IP 是否合规 2. 去除多余的字符,例如空格、换行符 3. 去重 代码 import re import ipaddressdef isIP(ip):p re.compile(^((…

基于若依的ruoyi-nbcio流程管理系统增加流程节点配置(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 上一节把数据库与相关基础数据字典准备好,下面就来实现相应的功能,目前先针对自定义…

问答社区运营的核心是什么?

问答社区是用户在平台上获得信息的一种方式,一般问答社区适用于医疗行业,法律行业等专业领域的行业,可以划分为知识型分享社区的一种,用户提供提问,邀请回答,选择最佳回复,设置问题围观&#xf…

《微信小程序开发从入门到实战》学习三十六

4.2 云开发JSON数据库 4.2.6 云开发JSON数据库 在集合对象上调用add方法可以在集和中可以插入一条记录,代码如下: db.collection(testOne).add({ // 在JSON数据库的testOne集合中增加一个记录 data:{ name: "write paper" }, // 插入数据成功…

力扣2.两数相加

题目描述 把题读懂后,这道题存在两个需要解决的问题:1.进位问题;2.两个链表长度不一 代码 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//创建新链表的伪指针,指向链表的头结点ListNode prev n…

选择更灵活的设计工具:SOLIDWORKS 软件网络版与单机版的比较

随着科技的飞速发展,工程设计领域对于高效、灵活的设计工具需求日益增加。SOLIDWORKS 作为一款广受欢迎的三维设计软件,提供了网络版和单机版两种选择。在本文中,我们将深入探讨这两个版本的区别,并为您详细介绍它们的价格差异。 …

如何通过Portal实现消息集成

在数字化时代浪潮下,信息的流通与交互已变得至关重要,不论是在企业内部日常协作,还是与外部客户的紧密沟通,信息的快速、准确、实时传递都成为了确保业务顺畅进行的关键因素、决策精准的核心要素。 为了满足这种日益增长的需求&a…

超实用电脑技巧分享,快速提高工作效率!

“我是个刚开始学习使用电脑的新手,想问问大家有什么比较好用的电脑使用技巧可以推荐一下吗?非常感谢!” 在使用电脑时,如果我们适当掌握一些技巧,可以有效提高效率。那么,今天小编就给大家分享一些常见的电…

类 —— 友元、常/静态成员函数

类 类的大小 和结构体大小求法一致。但需注意,普通空类也会占用 1 字节大小,因为普通空类可以实例化对象。 而 抽象空类占 4 字节(32 位机中),因为抽象空类中含有虚指针(含有虚函数的非抽象空类同理&am…

leetcode:455. 分发饼干

一、题目 原题链接:455. 分发饼干 - 力扣(LeetCode) 函数原型:int findContentChildren(int* g, int gSize, int* s, int sSize) 二、思路 将胃口数组和饼干尺寸数组降序排序 遍历两个数组,从胃口数组中找到符合饼干尺…