PostgreSQL 监控数据库活动
监控数据库活动
1. 标准Unix 工具
[root@mysqlhq ~]# ps auxww | grep ^postgres
postgres 12106 0.0 0.0 340060 15064 ? S Oct08 1:35 /usr/bin/postgres
postgres 12107 0.0 0.0 192920 1576 ? Ss Oct08 0:03 postgres: logger process
postgres 12109 0.0 0.0 340176 5964 ? Ss Oct08 0:03 postgres: checkpointer process
postgres 12110 0.0 0.0 340060 2584 ? Ss Oct08 0:33 postgres: writer process
postgres 12111 0.0 0.0 340060 5708 ? Ss Oct08 0:33 postgres: wal writer process
postgres 12112 0.0 0.0 340460 2840 ? Ss Oct08 1:19 postgres: autovacuum launcher process
postgres 12113 0.0 0.0 195320 1936 ? Ss Oct08 2:05 postgres: stats collector process
postgres 22688 0.0 0.0 344716 11720 ? Ss Nov28 0:00 postgres: postgres exampledb 10.15.7.115(52996) idle
postgres 24956 0.0 0.0 116136 2952 pts/2 S+ Nov29 0:01 -bash
postgres 31369 0.0 0.0 341100 6112 ? Ss Nov27 0:00 postgres: postgres postgres 10.15.7.115(50552) idle
postgres 31386 0.0 0.0 341308 6316 ? Ss Nov27 0:02 postgres: postgres postgres 10.15.7.115(50560) idle
postgres 31408 0.0 0.0 341220 6888 ? Ss Nov27 0:00 postgres: postgres postgres 10.15.7.115(50565) idle
postgres 31409 0.0 0.0 341144 6492 ? Ss Nov27 0:00 postgres: postgres postgres 10.15.7.115(50566) idle
postgres 31982 0.0 0.0 116040 2684 pts/1 S Nov27 0:00 -bash
postgres 32042 0.0 0.0 184016 3820 pts/1 S+ Nov27 0:00 psql
postgres 32043 0.0 0.0 341204 6516 ? Ss Nov27 0:03 postgres: postgres postgres [local] idle
/usr/bin/postgres// 服务主进程
postgres: writer process //下面5分进程由主进程自动启动的后台工作者进程
剩下的每一个进程都是处理一个客户端的服务进程,显示
postgres: postgres postgres 10.15.7.115(50552) idle //postgres: user database host activity
如果存在堵塞或者等待情况,查看 pg_locks 系统视图
如果已经配置了cluster_name, 那么在ps输出中也会显示集群名称
-bash-4.2$ psql -c 'SHOW cluster_name'
cluster_name
--------
xxx
$ ps aux|grep xxx
2. 统计收集器
PostgreSQL的统计收集器是一个支持收集和报告服务器活动信息的子系统。
目前,这个收集器可以对表和索引的访问计数, 计数可以按磁盘块和个体行来进行。
它还跟踪每个表中的总行数、每个表的清理和分析动作的信息。 它也统计调用用户定义函数的次数以及在每次调用中花费的总时间。
2.1. 统计收集配置
因为统计收集给查询执行增加了一些负荷,系统可以被配置为收集或不收集信息。由配置参数控制的,它们通常在postgresql.conf中设置
参数track_activities启动监控当前被任意服务器进程执行的命令。
参数track_counts控制是否收集关于表和索引访问的统计信息。
参数track_functions启用对用户定义函数使用的跟踪。
参数track_io_timing启动对块读写次数的监控。
可以在单个会话中使用 SET命令打开或关闭它们
统计收集器通过临时文件将收集到的信息传送给其他PostgreSQL进程。这些文件存储在stats_temp_directory参数命名的目录中, 默认是pg_stat_tmp。
[root@mysqlhq pg_stat_tmp]# pwd
/var/lib/pgsql/data/pg_stat_tmp
[root@mysqlhq pg_stat_tmp]# ll
total 92
-rw------- 1 postgres postgres 3892 Nov 30 15:15 db_0.stat
-rw------- 1 postgres postgres 17412 Nov 30 15:15 db_13295.stat
-rw------- 1 postgres postgres 21806 Nov 30 15:15 db_16385.stat
-rw------- 1 postgres postgres 17074 Nov 30 15:15 db_1.stat
-rw------- 1 postgres postgres 20454 Nov 30 15:15 db_24598.stat
-rw------- 1 postgres postgres 1162 Nov 30 15:15 global.stat
为了得到更好的性能,stats_temp_directory可以指向一个基于 RAM 的文件系统来降低物理 I/O 需求。
2.2. 查看统计信息
在使用统计信息监控收集的数据时,你必须了解这些信息并非是实时更新的。 每个独立的服务器进程
只在进入闲置状态之前才向收集器传送新的统计计数;因此正在进行的查询或事务并不影响显示出来的总数。
同样,收集器本身也最多每 PGSTAT_STAT_INTERVAL毫秒(缺省为 500ms, 除非在编译服务器的时候修改过)发
送一次新的报告。因此显示的信息总是落后于实际活动。 但是由track_activities收集的当前查询信息总是最新的。
动态统计视图
pg_stat_activity 每个服务器进程一行,显示与那个进程的当前活动相关的信息,例如状态和当前查询。详见pg_stat_activity。
pg_stat_replication 每个WAL发送者进程一行,显示与到该发送者连接到的后备服务器的复制相关的统计信息。 详见pg_stat_replication。
pg_stat_ssl 每个连接(普通或复制)一行,显示关于该连接中使用的SSL的信息。 详细信息请参阅pg_stat_ssl。
收集的统计视图
pg_stat_archiver 只有一行,显示有关 WAL 归档进程活动的统计信息。 详见pg_stat_archiver。
pg_stat_bgwriter 只有一行,显示有关后台写进程活动的统计信息。 详见pg_stat_bgwriter。
pg_stat_database 每个数据库一行,显示数据库范围的统计信息。 详见pg_stat_database。
pg_stat_database_conflicts 每个数据库一行,显示数据库范围内由于与后备服务器上的恢复冲突而取消的查询有关的统计信息。 详见pg_stat_database_conflicts。
pg_stat_all_tables 当前数据库中每个表一行,显示有关访问指定表的统计信息。 详见pg_stat_all_tables。
pg_stat_sys_tables 和pg_stat_all_tables一样,但只显示系统表。
pg_stat_user_tables 和pg_stat_all_tables一样,但只显示用户表。
pg_stat_xact_all_tables 和pg_stat_all_tables相似,但计数动作只在当前事务内发生 (还没有被包括在pg_stat_all_tables和相关视图中)。此视图中不存在活行和死行数以及清理和分析操作的列。
pg_stat_xact_sys_tables 和pg_stat_xact_all_tables一样,但只显示系统表。
pg_stat_xact_user_tables 和pg_stat_xact_all_tables一样,但只显示用户表。
pg_stat_all_indexes 当前数据库中的每个索引一行,显示与访问指定索引有关的统计信息。 详见pg_stat_all_indexes。
pg_stat_sys_indexes 和pg_stat_all_indexes一样,但只显示系统表上的索引。
pg_stat_user_indexes 和pg_stat_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_tables 当前数据库中的每个表一行,显示有关指定表上 I/O 的统计信息。 详见pg_statio_all_tables。
pg_statio_sys_tables 和pg_statio_all_tables一样,但只显示系统表。
pg_statio_user_tables 和pg_statio_all_tables一样,但只显示用户表。
pg_statio_all_indexes 当前数据库中的每个索引一行,显示有关指定索引上 I/O 的统计信息。 详见pg_statio_all_indexes。
pg_statio_sys_indexes 和pg_statio_all_indexes一样,但只显示系统表上的索引。
pg_statio_user_indexes 和pg_statio_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_sequences 当前数据库中的每个序列一行,显示有关指定序列上 I/O 的统计信息。 详见pg_statio_all_sequences。
pg_statio_sys_sequences 和pg_statio_all_sequences一样,但只显示系统序列 (目前没有定义系统序列,因此这个视图总是为空)。
pg_statio_user_sequences 和pg_statio_all_sequences一样,但只显示用户序列。
pg_stat_user_functions 每一个被跟踪的函数一行,显示与执行该函数有关的统计信息。 详见pg_stat_user_functions。
pg_stat_xact_user_functions 和pg_stat_user_functions相似, 但是只统计在当前事务期间的调用(还没有被包括在 pg_stat_user_functions中)。
针对每个索引的统计信息对于判断哪个索引正被使用以及它们的效果特别有用。
pg_statio_系列视图主要用于判断缓冲区的效果。
pg_stat_activity 视图 视图将为每一个服务器进程有一行, 显示与该进程的当前活动相关的信息。
pg_stat_replication视图 视图将为每个 WAL 发送者进程包含一行, 显示复制到发送者连接到的后备服务器的统计信息。
pg_stat_ssl 视图 视图将为每个后端或WAL发送者进程包含一行, 显示有关此连接上的SSL使用情况的统计信息。
pg_stat_archiver视图 视图将总是只有一行, 该行包含着有关集簇的归档进程的数据。
pg_stat_bgwriter视图 视图将总是只有一行,它包含集簇的全局数据
pg_stat_database视图 视图将为集簇中的每一个数据库包含有一行, 显示数据库范围的统计信息。
pg_stat_database_conflicts视图 视图将为每一个数据库包含一行, 该行显示数据库范围发生的由于与后备服务器上的恢复冲突而取消的查询相关的统计信息。
pg_stat_all_tables视图 将为当前数据库中的每一个表 (包括 TOAST 表)包含一行,该行显示与对该表的访问相关的统计信息。
pg_stat_all_indexes视图 将为当前数据库中的每个索引包含一行, 该行显示关于对该索引访问的统计信息。
pg_statio_all_tables视图 显示指定表上有关I/O的统计信息 。
pg_statio_all_indexes视图 显示指定索引上有关 I/O 的统计信息。
pg_statio_all_sequences视图 在指定序列上有关 I/O 的统计信息
pg_stat_user_functions视图 显示有关该函数执行的统计信息。track_functions 参数控制到底跟踪哪些函数。
2.3. 统计函数
其他查看统计信息的方法是直接使用查询,这些查询使用上述标准视图用到的底层统计信息访问函数。
\d+ pg_stat_activity
postgres=# \d+ pg_stat_activity
View "pg_catalog.pg_stat_activity"
Column | Type | Modifiers | Storage | Description
------------------+--------------------------+-----------+----------+-------------
datid | oid | | plain |
datname | name | | plain |
pid | integer | | plain |
usesysid | oid | | plain |
usename | name | | plain |
application_name | text | | extended |
client_addr | inet | | main |
client_hostname | text | | extended |
client_port | integer | | plain |
backend_start | timestamp with time zone | | plain |
xact_start | timestamp with time zone | | plain |
query_start | timestamp with time zone | | plain |
state_change | timestamp with time zone | | plain |
waiting | boolean | | plain |
state | text | | extended |
backend_xid | xid | | plain |
backend_xmin | xid | | plain |
query | text | | extended |
View definition:
SELECT s.datid,
d.datname,
s.pid,
s.usesysid,
u.rolname AS usename,
s.application_name,
s.client_addr,
s.client_hostname,
s.client_port,
s.backend_start,
s.xact_start,
s.query_start,
s.state_change,
s.waiting,
s.state,
s.backend_xid,
s.backend_xmin,
s.query
FROM pg_database d,
pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, waiting, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, ssl, sslversion, sslcipher, sslbits, sslcompression, sslclientdn),
pg_authid u
WHERE s.datid = d.oid AND s.usesysid = u.oid;
额外统计函数
pg_backend_pid() 处理当前会话的服务器进程的进程 ID
pg_stat_get_activity
pg_stat_get_snapshot_timestamp() 返回当前统计快照的时间戳
pg_stat_clear_snapshot() 抛弃当前的统计快照
pg_stat_reset() 把用于当前数据库的所有统计计数器重置为零(要求超级用户权限)
pg_stat_reset_shared(text) 把某些集簇范围的统计计数器重置为零
3. 查看锁
监控数据库活动的另外一个有用的工具是pg_locks系统表。
这个功能可以用于:
• 查看当前所有未解决的锁、在一个特定数据库中的关系上所有的锁、在一个特定关系上的所有锁, 或者由一个特定PostgreSQL会话持有的所有锁。
• 判断当前数据库中带有最多未授予锁的关系(它很可能是数据库客户端的竞争源)。
• 判断锁竞争给数据库总体性能带来的影响,以及锁竞争随着整个数据库流量的变化范围。
postgres=# select * from pg_locks;
locktype | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted | fastpath
------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+-------+-----------------+---------+----------
relation | 13295 | 11673 | | | | | | | | 6/588 | 32043 | AccessShareLock | t | t
virtualxid | | | | | 6/588 | | | | | 6/588 | 32043 | ExclusiveLock | t | t
PostgreSQL 监控数据库活动的更多相关文章
- SQLite vs MySQL vs PostgreSQL:关系型数据库比较
自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...
- 分布式监控系统Zabbix3.2监控数据库的连接数
在 分布式监控系统Zabbix3.2跳坑指南 和 分布式监控系统Zabbix3.2给异常添加邮件报警 已经介绍了如何安装以及报警.此篇通过介绍监控数据库的3306端口连接数来了解如何监控其它端口和配置 ...
- Spring Boot + Druid 监控数据库(三)
Druid可以做什么? 1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助. 2) 替换DBC ...
- postgresql查看数据库占用的物理存储空间大小
1.手动查看: 查看数据库postgres的oid postgres=# SELECT oid from pg_database where datname='postgres'; oid------ ...
- spring配置druid连接池和监控数据库访问性能
Druid连接池及监控在spring配置如下: <bean id="dataSource" class="com.alibaba.druid.pool.DruidD ...
- 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)
原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...
- Canal的简单使用(监控数据库数据的变化)
原文:https://www.cnblogs.com/java-spring/p/8930740.html canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据,用于实际工作中,比 ...
- postmaster - PostgreSQL多用户数据库服务器
SYNOPSIS postmaster [ -A 0 | 1] [ -B nbuffers] [ -c name=value] [ -d debug-level] [ -D datadir] [ -F ...
- 监控数据库SqlServer
监控数据库的连接数select COUNT( * ) from master.dbo.sysprocesses select COUNT( * ) from master.dbo.sysprocess ...
随机推荐
- Asp.net 5 (MVC6) Areas 分区
1. Startup.cs 类的 Configure方法中, 加入Area路由设置代码: //app.UseMvcWithDefaultRoute(); app.UseMvc(routes=> ...
- TypeScript手册1 - 基本类型和接口
基本类型 像基本的JavaScript一样,TypeScript支持numbers, strings, structures, boolean等基本类型,而扩展的enum等类型,为编程提供了更多帮助. ...
- python进阶02
1.import导入模块 import sys sys.path:显示的是:从显示目录中查找要导入的模块文件. 程序执行时导入模块路径:sys.path.append('/home/itcast/xx ...
- java基础(8)-集合类
增强for循环 /* *增强for循环 * for(元素类型 变量:数据或Collection集合){ * 使用变量即可,该变量就是元素 * } * 优点:简化了数组和集合的遍历 * 缺点:增强for ...
- CodeForces 266E More Queries to Array...(线段树+式子展开)
开始觉得是规律题的,自以为是的推了一个规律,结果测试数据都没过....看了love神的博客才发现只是把式子展开就找到规律了.不过挺6的是我虽然想错了,但是维护的的东西没有错,只是改改(改了进两个小时好 ...
- jquery的队列问题
队列,可以当成一个数组,也可以当成一个空间. 使用的地方: 在js这种异步操作的时候,我们不知道什么时候一个js代码加载完成,并且你还要保护一段代码只有一个模块在执行(按需加载的时候) 这个时候我们就 ...
- 洛谷P1027 Car的旅行路线
洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- Office 2016 (Preview)
Office 2016 Preview for MAC (预览版) https://products.office.com/zh-CN/mac/mac-preview 安装下载:http://go.m ...
- HDU 2203 kmp
http://acm.hdu.edu.cn/showproblem.php?pid=2203 亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory ...
- 23 Python 面向对象
面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...