⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/weixin_38477351/article/details/89931442 「诗雨时」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

前面介绍了 企业级监控概述及发展、企业监控运维、常见运维工具等相关的知识点,今天我将详细的为大家介绍企业数据库监控相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发朋友圈支持一波!!!

对什么进行监控

对数据库服务可用性进行监控

  • 数据库进程或是端口存在并不意味着数据库就是可用的;
  • 通过网络连接到数据库并且确定数据库是可以对外提供服务的。

对数据库性能进行监控

  • QPS和TPS;
  • 并发线程数量;
  • 对Innodb阻塞和死锁进行监控。

对主从复制进行监控

  • 主从复制链路状态的监控;
  • 主从复制延迟的监控;
  • 定期的确认主从复制的数据是否一致。

对服务器资源的监控

  • 磁盘空间;CPU的使用情况;内存的使用情况;Swap分区的使用情况;网络IO的使用情况。
  • 服务器磁盘空间大并不意味着MySQL数据库服务能使用的空间就足够大;
  • 无论是数据目录还是日志目录的磁盘空间被占满,都会出现MySQL无法对外服务的情况。

数据库可用性监控

如何确认数据库是否可以通过网络连接

通过网络连接数据库时,程序建立数据库连接,还要通过一些防火墙等硬件设备,或者像iptable这种软件过滤之后才能连接到数据库。这其中呢,就可能存在一些限制,而造成程序无法连接到服务器的情况。

MySQL的TCP/IP连接存在可能被占满的情况。

通常使用以下几种方式中的一种:

  • 方式一:mysqladmin -umonitor_user -p -h ping
  • 方式二:telnet ip db_port
  • 方式三:使用程序通过网络建立数据库连接。

如何确认数据库是否可读写

  • 方式一:检查数据库的read_only参数是否为off。
  • 方式二:建立监控表并对表中数据进行读写操作。
  • 方式三:执行简单的查询 select @@version。

如何监控数据库的连接数

可以连接到MySQL的线程数是有限制的,有很多因素都会造成数据库的连接数突然的增长(出现阻塞、像Memcahe这样的缓存失效都可能造成数据库连接数的暴增)。

获取数据库允许的最大连接数:

show variables like 'max_connections';

获取数据库当前的连接数:

show global status like 'Threads_connected';

判断是否需要报警:

Threads_connected / max_connections > 0.8

数据库性能监控

记录性能监控过程中所采集到的数据库的状态。

数据库可用性监控

show global status可以列出MySQL服务器运行各种状态值。

如何计算QPS和TPS
QPS:每秒钟数据库所执行的查询的数量(包括了数据库所处理的所有请求)。

QPS = (Queries2 - Queries1) / (Uptime_since_flush_status2 - Uptime_since_flush_status1) # 两次采样的差值 / 两次采样的时间间隔

TPS:每秒钟所处理的事物的数量,也就是每秒钟所处理的UPDATE、DELETE、INSERT这样的请求的数量。从定义上可以看出TPS实际上是OPS的一个子集。

TPS = ((Com_insert2 + Com_update2 + Com_delete2) - (Com_insert1 + Com_update1 + Com_delete1)) / (Uptime_since_flush_status2 - Uptime_since_flush_status1)

如何监控数据库的并发请求数量

数据库系统的性能会随着并发处理请求数量的增加而下降。

show global status like 'Threads_running';

并发处理的数量通常会远小于同一时间连接到数据库的线程的数量。数据库出现大量阻塞的时候,可能会造成数据库并发请求数量的突增。

如何监控Innodb的阻塞

SELECT b.trx_mysql_thread_id AS '被阻塞线程', b.trx_query AS '被阻塞SQL', c.trx_mysql_thread_id AS '阻塞线程', 
c.trx_query AS '阻塞SQL',(UNIX_TIMESTAMP()-UNIX_TIMESTAMP(c.trx_started)) AS '阻塞时间'
FROM information_schema.INNODB_LOCK_WAITS a
JOIN information_schema.INNODB_TRX b ON a.requesting_trx_id=b.trx_id
JOIN information_schema.INNODB_TRX c ON a.blocking_trx_id=c.trx_id
WHERE (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(c.trx_started)) > 60
实例:

打开两个终端分别连接上数据库;

终端一:

#查看session的连接号:
select connection_id();

#将Innodb锁的自动超时时间改为180秒:
set global innodb_lock_wait_timeout=180;

#查询t表数据:
select * from t;

#开启事物:
begin;

#为t表开启排查锁:
select * from t for update;

终端二:

#查看session的连接号:
select connection_id();

#开启事物:
begin;

#为t表开启排查锁:
select * from t for update;

在MySQL可视化工具中查询阻塞信息:

MySQL主从复制监控

如何监控主从复制链路的状态

如何监控主从复制延迟
show slave status;

Seconds_Behind_Master: 主从之间延迟的秒数,根据同步到从服务器上的主服务器的binlog和已经在从服务器上重新执行过的binlog日志之间的时间差来决定的。存在很多种情况都会造成数据的不准确,例如当网络存在问题的时候,主服务器还有大量的bionlog没同步到从服务器上,同时同步到从服务器上的binlog都已经被重用完了,在这种情况下,主从之间是存在很大的延迟的。

为了更加准确的反应延迟,我们需要使用使用多线程的程序同时对于主从服务器的状态来进行检查:

主服务器上:

show master status \G;

主上的二进制日志文件名和偏移量:

从服务器上:

show slave status \G

从主上已经传输到从上的主上的二进制日志文件名和偏移量:

已经传输完成的主上二进制日志的名字和偏移量:

当每次修复完主从复制,都要检查主从复制数据的一致性。

如何验证主从复制的数据是否一致
pt-table-checksum u=dba,p='PassWord' --databases mysql --replicate test.checksums

在主服务器数据库运行即可,它会主动发现主库下所有从库信息,对所有从库指定的数据库数据进行检测。

u:数据库账号用户名 
p:数据库账号密码
databases:要检查的数据库的名字
replicate:指定在test库下创建checksums表,并且将数据写入到这张检测表中

创建账户SQL:

GRANT SELECT, PROCESS, SUPER, REPLICATION, SLAVE ON *.* TO 'dba'@'ip' IDENTIFIED BY ''PassWord;
文章目录
  1. 1. 对什么进行监控
    1. 1.0.1. 对数据库服务可用性进行监控
    2. 1.0.2. 对数据库性能进行监控
    3. 1.0.3. 对主从复制进行监控
    4. 1.0.4. 对服务器资源的监控
  • 2. 数据库可用性监控
    1. 2.0.1. 如何确认数据库是否可以通过网络连接
    2. 2.0.2. 如何确认数据库是否可读写
    3. 2.0.3. 如何监控数据库的连接数
  • 3. 数据库性能监控
    1. 3.0.1. 数据库可用性监控
      1. 3.0.1.0.1. 如何计算QPS和TPS
  • 3.0.2. 如何监控数据库的并发请求数量
  • 3.0.3. 如何监控Innodb的阻塞
    1. 3.0.3.0.1. 实例:
  • 4. MySQL主从复制监控
    1. 4.0.0.0.1. 如何监控主从复制链路的状态
    2. 4.0.0.0.2. 如何监控主从复制延迟
    3. 4.0.0.0.3. 如何验证主从复制的数据是否一致