监控数据库活动

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 监控数据库活动的更多相关文章

  1. SQLite vs MySQL vs PostgreSQL:关系型数据库比较

    自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...

  2. 分布式监控系统Zabbix3.2监控数据库的连接数

    在 分布式监控系统Zabbix3.2跳坑指南 和 分布式监控系统Zabbix3.2给异常添加邮件报警 已经介绍了如何安装以及报警.此篇通过介绍监控数据库的3306端口连接数来了解如何监控其它端口和配置 ...

  3. Spring Boot + Druid 监控数据库(三)

    Druid可以做什么?  1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助. 2) 替换DBC ...

  4. postgresql查看数据库占用的物理存储空间大小

    1.手动查看: 查看数据库postgres的oid postgres=# SELECT oid from pg_database where datname='postgres'; oid------ ...

  5. spring配置druid连接池和监控数据库访问性能

    Druid连接池及监控在spring配置如下: <bean id="dataSource" class="com.alibaba.druid.pool.DruidD ...

  6. 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)

    原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...

  7. Canal的简单使用(监控数据库数据的变化)

    原文:https://www.cnblogs.com/java-spring/p/8930740.html canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据,用于实际工作中,比 ...

  8. postmaster - PostgreSQL多用户数据库服务器

    SYNOPSIS postmaster [ -A 0 | 1] [ -B nbuffers] [ -c name=value] [ -d debug-level] [ -D datadir] [ -F ...

  9. 监控数据库SqlServer

    监控数据库的连接数select COUNT( * ) from master.dbo.sysprocesses select COUNT( * ) from master.dbo.sysprocess ...

随机推荐

  1. vi编辑器快捷键使用详解

    文本编辑器是所有计算机系统中最常用的一种工具.UNIX下的编辑器有ex,sed和vi等,其中,使用最为广泛的是vi,而vi命令繁多,论坛里好像这方面的总结不多,以下稍做总结,以资共享!渴望更正和补充! ...

  2. shell中嵌套执行expect命令实例(利用expect实现自动登录)

    expect是 #!/bin/bashpasswd='123456'/usr/bin/expect <<EOFset time 30spawn ssh root@192.168.76.10 ...

  3. 关于图片上传与下载(Java)

    图片的上传 package com.upload; import java.io.IOException;import java.io.PrintWriter; import javax.servle ...

  4. 搭建TXManager分布式事务协调者

    事务分组id 缓存到redis 需要配置连接到自己的 redis地址 启动后:

  5. spark总结5 RDD

    创建RDD 有两种方式 1 通过hdfs支持的文件系统创建 RDD, RDD里面没有真正要计算的数据,只记录了一下元数据 2 从过scala集合或者数组以并行化的方式创建RDD collect 把结果 ...

  6. java应用线上CPU过高问题排查

    1.top 命令,查看占用CPU最高的PID.ps aux|grep PID 进一步确定tomcat进程出现问题.2.ps -mp pid -o THREAD,tid,time显示线程列表3.prin ...

  7. Qt 自定义PushButton

    http://blog.csdn.net/zddblog/article/details/11116191 功能:鼠标弹起并在按键区域内时,按键响应.并实现normal.hover.pressed效果 ...

  8. jquery 之 Deferred 使用

    Deferred是jquery的promise接口的实现.他是非同步操作的通用接口,可以看作是完成一个任务之后再执行另外一个任务. 观察者模式是开发中经常使用的模式,这个模式由两个主要部分组成:主题和 ...

  9. 理解collate Chinese_PRC_CI_AS

    我们在create table时经常会碰到这样的语句,例如:password nvarchar(10)collate chinese_prc_ci_as null,那它到底是什么意思呢?不妨看看下面: ...

  10. spring: 使用Aspectj代理EnabelAspectjAutoProxy

    使用JavaConfig的话,可以在配置类的类级别上通过使用EnableAspectJ-AutoProxy注解启用自动代理功能. package ch2.test; import org.aspect ...