监控数据库活动

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. MongoDB快速入门(一)

    MongoDB是一个跨平台,面向文档的数据库,提供高性能,高可用性和易于扩展.MongoDB是工作在集合和文档上一种概念. 数据数 数据库是一个集合的物理容器.每个数据库获取其自己设定在文件系统上的文 ...

  2. What's the difference between using “let” and “var” to declare a variable in JavaScript?

    https://stackoverflow.com/questions/762011/whats-the-difference-between-using-let-and-var-to-declare ...

  3. 【codevs1069】关押罪犯[noip2010](并查集)

    题目描述 Description S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极 不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨 ...

  4. mac下查看占用端口的进程及杀死进程

    mac lsof -i :9000 kill -9 716

  5. 简介web服务器的工作原理

    一 什么是web服务器,应用服务器和web容器? 对于web服务器与应用服务器:“在过去它们是有区别的,但是这两个不同的分类慢慢地合并了,而如今在大多在情况下和使用中可以把它们看成一个整体.” 但是当 ...

  6. 【转】nodejs mysql 链接数据库集群

    1.建立数据库连接:createConnection(Object)方法      该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database.与php中 ...

  7. Spring初学之bean的生命周期

    实体Bean: Car.java: package spring.beans.cycle; public class Car { private String name; private int pr ...

  8. BZOJ3242/UOJ126 [Noi2013]快餐店

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  9. 利用matplotlib中imshow()函数绘图

    matplotlib  是Python最著名的2D绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.通过简单的绘图 ...

  10. MVC 成功创建了数据库,但是数据库对象创建失败[此引用关系将导致不允许的周期性引用]

    model 类的属性写错了 错误写法: public  province { public  int provinceId; public string Name; }   public  City ...