数据库版本:9.3.1(不同版本数据库相关表列名可能略有不同)

数据库状态信息

数据库状态信息主要体现数据库的当前状态

1.目前客户端的连接数

postgres=# SELECT count(*) FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();

2.连接状态

postgres=# SELECT pid,waiting,current_timestamp - least(query_start,xact_start) AS runtime,substr(query,1,25) AS current_query FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();

pid  | waiting | runtime        | current_query ------+---------+-----------------+-----------------------9381  | f      | 00:01:24.425487 | select * from orders;

可以查看每个连接的pid,执行的操作,是否发生等待,根据查询,或者事务统计开始时间等等。有多少个链接查询就有多少行 所以可以用order by,limit限制查询行数

3.数据库占用空间

postgres=# select pg_size_pretty(pg_database_size('postgres'));

一个数据库数据文件对应存储在以这个数据库PID命名的文件中,通过统计所有以PID命名文件的总大小,也可以得出这个数据库占用的空间。

表占用的空间使用pg_relation_size()查询,对应的系统中的文件名和pg_class中的filenode相同,一个热点的表最好一天一统计大小,获得表的一个增长状况,来预测数据库未来可能的增长状况。根据需求提前准备空间应付数据库的增长。

4.等待事件

postgres# SELECT bl.pid AS blocked_pid, a.usename AS blocked_user, kl.pid AS blocking_pid, ka.usename AS blocking_user, a.query AS blocked_statement FROM pg_locks bl JOIN pg_stat_activity a ON a.pid = bl.pid JOIN pg_locks kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid JOIN pg_stat_activity ka ON ka.pid = kl.pid WHERE NOT bl.granted;

根据阻塞的语句的会话PID做相应处理

数据库统计信息

1.sql语句统计

实现上述统计需要安装一个pg的extension:pg_stat_statements–1.1.sql,调整postgres.conf:shared_preload_libraries = 'pg_stat_statements',就可以使用了

postgres=# SELECT calls, total_time, rows, 100.0 * shared_blks_hit /nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent,substr(query,1,25)FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;

calls  | total_time | rows | hit_percent          | substr -------+------------+------+----------------------+---------------------------1      | 23.104    | 17  | 99.4974874371859296  | SELECT n.nspname as Sche1      | 21.808    | 2    |                      | select * from pg_stat_sta2      | 5.391      | 2    |                      | SELECT name FROM (SELECT3      | 3.307      | 57  | 100.0000000000000000 | SELECT pg_catalog.quote_i4      | 1.318      | 19  | 100.0000000000000000 | SELECT calls, total_time,

上述查询是按照查询的执行时间来排序的,可以定位执行比较慢的sql,也可以用来查出常用sql,以及sql共享内存的命中率等信息

2.表的共享内存的利用情况统计

实现上述统计需要安装一个pg的extension:pg_buffercache–1.0.sql

postgres=# SELECT c.relname, count(*) AS buffers FROM pg_buffercache b INNER JOIN pg_class c ON b.relfilenode = pg_relation_filenode(c.oid) AND b.reldatabase IN (0, (SELECT oid FROM pg_database WHERE datname = current_database())) GROUP BY c.relname ORDER BY 2 DESC LIMIT 5;

relname                        | buffers --------------------------------+---------pg_proc                        | 28pg_attribute                    | 23pg_operator                    | 14pg_proc_proname_args_nsp_index  | 10pg_class                        | 9

表在共享内存中占用的块数,用来查看表是不是在内存中,buffers的单位是数据块,默认8K,如果计算大小等于表的大小,说明全表的数据都在缓存中,这时的查询速度是很快的

3.对一个表执行操作的统计

实现统计对一个表操作的偏重,insert,update,delete的比率

postgres=# update products set price=11.00 where prod_id=30;UPDATE 1postgres=# delete from products where prod_id=30;DELETE 1postgres=# SELECT relname,cast(n_tup_ins AS numeric) / (n_tup_ins + n_tup_upd + n_tup_del) AS ins_pct,cast(n_tup_upd AS numeric) / (n_tup_ins + n_tup_upd + n_tup_del) AS upd_pct, cast(n_tup_del AS numeric) / (n_tup_ins + n_tup_upd + n_tup_del) AS del_pct FROM pg_stat_user_tables where relname='products';

relname  | ins_pct                | upd_pct                | del_pct ----------+------------------------+------------------------+------------------------products  | 0.00000000000000000000 | 0.50000000000000000000 | 0.50000000000000000000

4.表的IO和索引的IO

表的IO主要涉及查询的时候查询的逻辑块和物理块,归到底也是命中率的问题,当然最简单的思维方式,一张表存在内存中的内容越多,相应的查询速度越快。相关视图:pg_stat_user_tables

相对于表的大小来说,索引占用的空间要小的多,所以常用的表,可以让其索引一直存在内存中,很多时候保持索引的一个高命中率是非常必要的。相关视图: pg_stat_user_indexes

postgres# SELECT indexrelname,cast(idx_blks_hit as numeric) / (idx_blks_hit + idx_blks_read) AS hit_pct,

idx_blks_hit,idx_blks_read FROM pg_statio_user_indexes WHERE (idx_blks_hit + idx_blks_read)>0 ORDER BY hit_pct;

5.buffer background 和 checkpoint

涉及检查点写和后台写的比率问题,检查点的集中数据写入会对数据库IO的性能有很大的提升,但相应的需要部分空间存储脏数据,而且一旦数据库崩溃,内存中未被写入磁盘的脏数据越多,数据库恢复时间也就越长,这是一个数据库的平衡问题,相关问题在调优文档中做深入研究。 相关视图:pg_stat_bgwriter

postgres=# SELECT(100 * checkpoints_req) / (checkpoints_timed + checkpoints_req) AS checkpoints_req_pct,

pg_size_pretty(buffers_checkpoint * block_size / (checkpoints_timed + checkpoints_req)) AS avg_checkpoint_write,

pg_size_pretty(block_size * (buffers_checkpoint + buffers_clean + buffers_backend)) AS total_written,100 * buffers_checkpoint / (buffers_checkpoint + buffers_clean + buffers_backend) AS checkpoint_write_pct,100 * buffers_backend / (buffers_checkpoint + buffers_clean + buffers_backend) AS backend_write_pct,*FROM pg_stat_bgwriter,(SELECT cast(current_setting('block_size') AS integer) AS block_size) AS bs;

系统监控信息

介绍一些关于数据库需要查看的系统状态信息

1.数据库基本状态信息

# ps -ef | grep postgres# netstat -altunp | grep 5432# pg_controdata

pg_controdata命令和psql同在postgres的bin目录下,系统命令下查询到最全面的数据库快照信息

2.top动态信息配合其他命令使用(截取相关行)

# top -u postgresCpu(s): 1.7%us, 1.0%sy, 0.0%ni, 97.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 2051164k total, 1476536k used, 574628k free, 239624k buffers

Swap: 2097144k total, 0k used, 2097144k free, 768676k cached

PID  USER    PR NI VIRT RES SHR  S %CPU %MEM TIME+ COMMAND

11172 postgres 20 0 709m 34m 33m  S 0.0  1.7 0:00.79 postgres

9380  postgres 20 0 167m 5284 2272 S 0.0  0.3 0:00.05 psql

11178 postgres 20 0 709m 5168 4408 S 0.0  0.3 0:00.01 postgres

11179 postgres 20 0 709m 4656 3920 S 0.0  0.2 0:00.01 postgres

# freetotal used free shared buffers cached

Mem: 2051164 1476032 575132 0 239624 768676

-/+ buffers/cache: 467732 1583432

Swap: 2097144 0 2097144

# iotop -u postgresTotal DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s

11175 be/4 postgres 0.00 B/s 0.00 B/s 0.00 % 0.00 % postgres: logger process

11181 be/4 postgres 0.00 B/s 0.00 B/s 0.00 % 0.00 % postgres: autovacuum launcher process

11178 be/4 postgres 0.00 B/s 0.00 B/s 0.00 % 0.00 % postgres: checkpointer process

11180 be/4 postgres 0.00 B/s 0.00 B/s 0.00 % 0.00 % postgres: wal writer process

11182 be/4 postgres 0.00 B/s 0.00 B/s 0.00 % 0.00 % postgres: stats collector process

11179 be/4 postgres 0.00 B/s 0.00 B/s 0.00 % 0.00 % postgres: writer process

简单分析下top命令,用top可以分析出系统的当前总体的负载状况,如上例,总体负载率很低,在io等待率高的时候可以使用iotop来定位io具体的进程,top中的VIRT RES 可以看出进程希望获取的内存,和占用系统内存的数量,可以根据来判定系统内存的分配情况,内存的值也关联到一些参数的设定,如postgres在发生检查点之前checkpointer process进程会消耗比较大的物理内存,直到检查点发生后,占用的内存才会被释放掉,所以在设置检查点时间的时候也要将内存的占用考虑进去。

free总体的表现内存的使用情况,buffers和cached在应用申请内存的时候会被系统释放掉,所以应用实际可以使用的内存是free的值加上buffers和cached的。

3.sar做辅助分析

sar类似于快照的方式来保存系统过去的信息

# sar03:40:01 PM CPU %user %nice %system %iowait %steal %idle

03:50:01 PM all 1.56  0.00  0.68    0.10    0.00  97.67

04:00:02 PM all 1.91  0.00  0.63    0.05    0.00  97.41

Average:    all 1.07  0.04  1.95    2.65    0.00  94.29

# sar -r12:40:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit

12:50:01 PM 567124    1484040  72.35    237596    755720  1426740  34.39

01:10:01 PM 567256    1483908  72.34    237600    755720  1426740  34.39

01:20:01 PM 567132    1484032  72.35    237600    755724  1426740  34.39

Average:    742177    1308987  63.82    195809    669444  1390037  33.51

这些统计信息可以对照性能问题,查看当时的系统状态。

监控mysql的pr,数据库监控指标操作手册相关推荐

  1. Linux Zabbix——zabbix可视化、监控模板配置、自定义监控参数、自动发现监控下设备、数据库监控、企业proxy分布式监控搭建配置...

    Zabbix可视化.监控模板配置.自定义监控参数.自动发现监控下设备.数据库监控.proxy分布式监控搭建配置- 文章篇幅较长,可以选择目录查看感兴趣的模块. 1.Zabbix可视化 1. 简介 企业 ...

  2. zabbix监控mysql的原理_zabbix监控mysql数据库性能实现

    Zabbix对于主机监控通常有多种方式: 例如 Trapper.Agent.SNMP.ICMP等. Trapper工作原理: 被监控主机根据用户设定的时间间隔定期将数据push到Zabbix Serv ...

  3. zabbix监控mysql日志告警_zabbix监控mysql以及报警(二)终

    Zabbix部署 监控数据库 报警服务(二) 终 接着zabbix(一)接着部署 配置过一段时间后,观察下监控图效果出来了没 zabbix3.0 server已自带mysql的模板了,只需配置好age ...

  4. 天兔监控 oracle,lepus天兔数据库监控系统搭建记录

    一.开场白 去年的锅,今年才接.时间都耗在了各种业务测试上,上周刚刚把锅甩了,赶紧把以前没完成的事做完. 二.lepus简介 简洁.直观.强大的开源数据库监控系统,MySQL/Oracle/Mongo ...

  5. like mysql 相反_Mysql数据库的常用操作

    你这么优秀,一定只想把"柠檬班"置顶 ▲ 本文由柠檬班Python10期VIP学员Boy原创. 本文主要介绍mysql数据库的查询操作,捎带脚增删改操作. ·增 · insert  ...

  6. 监控mysql的pr_zabbix之监控MySQL

    #:先配置MySQL的主从 #:安装Percona Monitoring Plugins (地址:https://www.percona.com/downloads/)#:我安在从库,监控哪个就安哪个 ...

  7. flex连接mysql,flex对数据库(sqlite)的操作

    (一)本章主要总结关系数据库引擎(sqlite),同步和异步执行模式,创建数据库和表 Adobe AIR 包括一个基于 SQL 的关系数据库引擎(sqlite),该引擎在运行时中运行,数据以本地方式存 ...

  8. Open-Falcon 监控系统监控 MySQL/Redis/MongoDB 状态监控

    背景: Open-Falcon 是小米运维部开源的一款互联网企业级监控系统解决方案,具体的安装和使用说明请见官网:http://open-falcon.org/,是一款比较全的监控.而且提供各种API ...

  9. zabbix监控mysql的原理_zabbix监控mysql主从

    说明: 部署了个mysql从数据库,需要时时监控这个从数据库的主从状态.原理的话,是通过从mysql上的zabbix执行show slave status获取 Slave_IO_Running|Sla ...

最新文章

  1. linux centos使用xrdp远程界面登陆
  2. 10、计算机图形学——几何介绍(曲面的分类以及示例)
  3. C++学习笔记-----永远不要在派生类中改变虚函数的默认参数值
  4. TCP Fast Open知识
  5. 软件定义数据中心—Windows Server SDDC技术与实践
  6. 关于WinCE6.0补丁包的一点说明
  7. [转贴]Silverlight Socket 实现收发信息
  8. Chrome 可移动绿色版
  9. python主要功能_Python主要功能
  10. 【框架设计】泛型的应用
  11. Atitit 常见概念与技术 dom及其解析 目录 1.1. Dom概念(文档对象模型(Document Object Model))是什么 1 1.1.1. 节点 2 1.1.2. Node 层次
  12. 西门子V20变频器Modbus通信的配置和报文
  13. CTF —— 网络安全大赛
  14. iOS中storyboard故事板使用Segue跳转界面、传值
  15. [ESP32/ESP8266专题笔记-5] ESP8266开发板-Micropython-串口控制继电器
  16. 在淘宝里,他们总结的一些前端Tips
  17. 微信公众h5页面如何在pc端调试
  18. girlfriend 生气心情不好怎么解决?
  19. 《国风·豳(bin)风·七月》
  20. oracle 10g R2数据库的安装部署

热门文章

  1. 数组名和指针的区别和联系、数组名取地址a
  2. NFT协议标准梳理:除了ERC721和ERC1155,还有哪些?
  3. node.js安装步骤
  4. Keil的安装及使用
  5. APP——功耗测试(耗电测试)——adb命令简单获取分析
  6. read和fread有什么区别
  7. SSL安全证书生成及概念解释
  8. linux系统中uboot的基本原理与实现方法
  9. 二级题库(C语言)------ 第二套题
  10. 用UltraISO制作镜像以RAW格式写入到U盘后,无法识别的解决办法