性能监控

性能监控

数据库性能视图

PostgreSQL数据库针对性能和当前状态提供了很多统计视图,这些视图都是以pg_stat开头的。是否产生这些统计数据,由几个参数决定:

*track_counts:是否收集表和索引上的统计信息,默认为on

*track_functions:可以取"none"、"pl"和"all",如果是"pl"则只收集PL/PgSQL写的函数的统计信息;"all"表示收集所有类型的函数,包括C语言和SQL写的函数。默认为"none"

*track_activities:是否收集当前正在执行的SQL。默认为on

*track_io_timing:是否收集I/O的时间信息。默认为off,即不收集。因为收集可能会导致某些平台上的性能瓶颈,默认track_io_timing参数是关闭的,所以“读数据块的总时间”和“写数据块的总时间”这两项没有数据。若打开这个配置项,在一些平台上可能会导致性能问题,可以通过PostgreSQL提供的pg_test_timing工具来测试是否有此问题

 

最常用的视图为pg_stat_activity,该视图可以查询出当前正在运行的SQL,

pg_stat_activity还能显示客户端的IP地址、端口、执行SQL的开始时间、事务的开始时间等信息

 

PostgreSQL提供了以下各个对象级别的统计信息视图:

*pg_stat_database

*pg_stat_all_tables

*pg_stat_sys_tables

*pg_stat_user_tables

*pg_stat_all_indexes

*pg_stat_sys_indexes

*pg_stat_user_indexes

 

pg_stat_database显示以下信息:

*各个数据库相关的活跃服务器进程数

*已提交的事务总数

*已回滚的事务总数

*已读取的磁盘块总数

*缓冲区命中的总数

*行插入、行读取、行删除的总数

*死锁发生的次数

*读数据块的总时间

*写数据块的总时间

 

pg_stat_all_tables、pg_stat_sys_tables、pg_stat_user_tables这三张视图的内容相似,只是pg_stat_all_tables显示的是所有表的统计信息,而pg_stat_sys_tables只显示系统表的统计信息, pg_stat_user_tables只显示用户表统计信息。这三张视图中包含的信息:

*顺序扫描的总数

*顺序扫描抓取的活数据行(liverow)的数目

*索引扫描的总数(属于该表的所有索引)

*索引扫描抓取的活数据行的数目

*插入的总行数、更新总行数、删除的总行数、HOT(Heap Only Tuple)更新的总行数

*上次手动vacuum该表的时间,上次由autovacuum自动清理该表的时间

*上次手动analyze该表的时间,上次由autovacuum自动analyze该表的时间

*vacuum的次数(不包括vacuum full)

*autovacuum的次数

*analyze的次数

*由autovacuum自动analyze此表的次数

 

pg_stat_user_functions对数据库内函数的调用次数及其他信息进行统计的视图:

*每个函数的调用次数

*执行每个函数花费的总时间

*执行函数时它自身花费的总时间,不包括它调用其他函数花费的时间

 

以下各个对象上发生I/O情况的统计视图:

*pg_statio_all_tables

*pg_statio_sys_tables

*pg_statio_user_tables

*pg_statio_all_indexes

*pg_statio_sys_indexes

*pg_statio_user_indexes

*pg_statio_all_sequences

*pg_statio_sys_sequences

*pg_statio_user_sequences

这些视图统计了这个对象上数据块的读取总数、缓存区命中的总数,如果是表,还提供了该表上所有索引的磁盘块读取总数、所有索引的缓冲区命中总数、辅助TOAST表(如果存在)上的磁盘块读取总数、辅助TOAST表(如果存在)上的缓冲区命中总数、TOAST表中索引的磁盘块读取总数、TOAST表中索引的缓冲区命中总数

这一系列pg_statio_视图在判断缓冲区效果时特别有用,可以统计出各个数据库缓冲区的命中率

 

这些视图中记录的信息都是自数据库启动后的统计信息,也就是说是一个累积值,这与Oracle数据库中的统计视图是一样的。如果想看某一段时间内的统计数据,还需要写一个程序或借助一些工具,在开始时间统计一次数据,结束时间再统计一次数据,两次数据进行相减才能算出这段时间内的统计数据。Oracle数据库提供了statspack的工具,PostgreSQL数据库中也有类似工具叫pgstatspack

 

Linux监控

top---查看全局信息,如CPU占用率、load情况、内存使用情况、topN的进程等

iostat---查看磁盘读写IOPS、读写吞吐量、读写相应时间及I/O利用率

await包括了在队列中等待的时间,

svctm指把I/O发送到磁盘上花了多少时间,不包括在I/O队列中的时间,普通硬盘通常不应该超过20ms

%util表示I/O利用率,I/O利用率与IOPS之间没有线性关系

vmstat---查看内存情况

swap大类中的si和so,如果这两项有大于0的数值,说明发生了swap交换,系统内存不足。

bi和bo可以看成当前IO的情况

sar---查看各种信息,最常见的是查看网络的流量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值