postgresql 监控你说了不算,谁说了算 ? (6 监控中需要考虑的问题)_数据


数据库监控,其实是一个收集指标,分析指标,最终得出系统当前状态数据的结果.同时对于关键指标正常的情况和非正常的情况,进行分析最终得出阈值,在触发阈值后开始进行报警. 另外监控还有两个用途:一是用于历史数据分析和展示,帮助我们确定系统的中长期趋势,从而帮助我们计划升级;二是在出现问题时立即采取行动.


一般一个系统监控需要监控的点:

  • CPU Usage
  • Network Usage
  • Disk Space / Disk Utilization
  • RAM Usage
  • Disk IOPS
  • Swap space usage
  • Network Errors

当然这里并不是一个DB 需要的完整的监控,仅仅是基于数据库系统中的LINUX系统的资源监控.

这里相关的监控就不在展开了. 对于POSTGRESQL 的基本监控有以下几个点

  • Buffer cache performance (cache hits vs disk reads)
  • Number of commits
  • Number of connections
  • Number of sessions
  • Checkpoints and bgwriter statistics
  • Vacuums
  • Locks
  • Replication

获得这些信息,有两种途径,

1  通过日志来进行分析

2  通过查询数据库来进行相关的数据获取


关于监控的两种方式,是需要区别的对待的, 我们可以通过以下的两种情况来对采用何种监控

着重于历史性的分析和优化方面的信息, 比较适合使用POSTGRESQL 的日志系统,由于POSTGRESQL 的日志比较完整,所以比较适合进行这方面的数据提取和验证.

另一种则是定时的对数据库中的信息进行收集,这样的数据提取的方式,主要是一方面对短时间的信息趋势进行跟踪,另一方面对触发阈值的指标进行报警.


所以两种监控对应, 目的是不同,操作方式是不同的,数据分析的方式不同,应用的场景也是不同的.


这里我们从PostgreSQL Statistics Collector 来开始PG的monitor 之旅, 类似很多其他的数据库,例如有些数据库有information_schema, perforamnce_schema, sys库, 或者 DMV 动态的监控视图,等等, PG 也有丰富的动态信息收集系统来进行数据库信息的收集工作.

这里也分两种, 一种为系统正在操作的信息, 另一种是从数据库系统开机后系统的累加信息.

Dynamic statistics views

pg_stat_activity、pg_stat_replication、pg_stat_wal_receiver或逻辑状态pg_stat_subscription、pg_stat_ssl和真空状态pg_stat_progress_vacuum的信息。

Collected statistics views

提供有关的INDEX ,序列, wal archive ,表,库,以及后端进程运行的一些信息.


下面我们就可以通过一个事例来看看获得PG当前数据库连接数的几种方式有什么不同.

ps -ef |grep postgres |wc -l

通过上面的命令可以获得访问机器的与POSTGRESQL有用的sessions ,部分监控session就是这样做的, 但实际上这样的监控有一个问题,就是答非所问.

postgresql 监控你说了不算,谁说了算 ? (6 监控中需要考虑的问题)_数据库_02

更多的监控的方法是通过

SELECT count(*) FROM pg_stat_activity;


postgresql 监控你说了不算,谁说了算 ? (6 监控中需要考虑的问题)_数据_03通过上面命令我们可以得到更精确的信息. 实际上我们还可以更加的准确.

postgresql 监控你说了不算,谁说了算 ? (6 监控中需要考虑的问题)_数据库_04

psql -U admin -p 5432 -h 192.168.198.100 -d postgres -c 'SELECT count(*) FROM pg_stat_activity WHERE NOT pid=pg_backend_pid()'

刨除自己连接的.


从上面的获得监控信息的方式来看,第三个看起来是优秀的,实际上

1  监控的参数是否有必要百分之百准确.

2  监控和性能之间有没有必然的联系

3  获得监控参数的难易程度


从上面3点来看, 上面三种监控的方式, 从监控session的数量来看,实际上是没有太多必要, 并且从上面几种监控session 数量的方式中, 第一种是不会对系统产生影响的,并且也不需要在数据库系统中建立账号信息,会引起一些不必要的安全问题. 所以到底怎么获得一个数据库的监控信息是需要考虑的.


POSTGRESQL监控中有些情况是需要安装extension  pg_stat_statements

通过pg_stat_statements 来查看相关慢查询的语句.

create extension pg_stat_statements;

alter system set shared_preload_libraries TO 'pg_stat_statements';

postgresql 监控你说了不算,谁说了算 ? (6 监控中需要考虑的问题)_数据库_05

由于篇幅原因,这里就不展开了,之前有pg_stat_statements 的介绍.