数据库监控
数据库监控
⼀、数据库监控介绍
1、对什么进⾏监控
(1) 对数据库服务可⽤性进⾏监控
数据库进程或是端⼝存在并不意味着数据库就是可⽤的;
通过⽹络连接到数据库并且确定数据库是可以对外提供服务的。
(2) 对数据库性能进⾏监控
QPS和TPS;
并发线程数量;
对Innodb阻塞和死锁进⾏监控。如何评价一个网页的设计
(3) 对主从复制进⾏监控
主从复制链路状态的监控;
sql杀手蠕虫病毒发作的特征是主从复制延迟的监控;
定期的确认主从复制的数据是否⼀致。
(4) 对服务器资源的监控
磁盘空间;CPU的使⽤情况;内存的使⽤情况;Swap分区的使⽤情况;⽹络IO的使⽤情况 服务器磁盘空间⼤并不意味着MySQL数据库服务能使⽤的空间就⾜够⼤;
⽆论是数据⽬录还是⽇志⽬录的磁盘空间被占满,都会出现MySQL⽆法对外服务的情况。⼆、数据库可⽤性监控
1、如何确认数据库是否可以通过⽹络连接
⼀:通过⽹络连接数据库时,程序建⽴数据库连接,还要通过⼀些防⽕墙等硬件设备,或者像iptable这种软件过滤之后才能连接到数据库。这其中呢,就可能存在⼀些限制,⽽造成程序⽆法连接到服务器的情况。
⼆、MySQL的TCP/IP连接存在可能被占满的情况
通常使⽤以下⼏种⽅式中的⼀种:
⽅式⼀:mysqladmin -umonitor_user -p -h ping
⽅式⼆:telnet ip db_port
vlookup函数练习表格⽅式三:使⽤程序通过⽹络建⽴数据库连接
2、如何确认数据库是否可读写
⽅式⼀:检查数据库的read_only参数是否为off
⽅式⼆:建⽴监控表并对表中数据进⾏读写操作
⽅式三:执⾏简单的查询 select @@version
3、如何监控数据库的连接数
可以连接到MySQL的线程数是有限制的,有很多因素都会造成数据库的连接数突然的增长(出现阻塞、像Memcahe这样的缓存失效都可能造成数据库连接数的暴增)。
获取数据库允许的最⼤连接数:
show variables like 'max_connections';
获取数据库当前的连接数:
mysql无法连接到服务器show global status like 'Threads_connected';
判断是否需要报警:
Threads_connected / max_connections > 0.8
三、数据库性能监控
记录性能监控过程中所采集到的数据库的状态
1、数据库可⽤性监控
js特效网页设计show global status:可以列出MySQL服务器运⾏各种状态值。
(1) 如何计算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)
(2) 如何监控数据库的并发请求数量
数据库系统的性能会随着并发处理请求数量的增加⽽下降。
show global status like 'Threads_running';
并发处理的数量通常会远⼩于同⼀时间连接到数据库的线程的数量。数据库出现⼤量阻塞的时候,可能会造成数据库并发请求数量的突增。
(3) 如何监控Innodb的阻塞
_mysql_thread_id AS '被阻塞线程', b.trx_query AS '被阻塞SQL', c.trx_mysql_thread_id AS '阻塞线程',
<_query AS '阻塞SQL',(UNIX_TIMESTAMP()-UNIX__started)) AS '阻塞时间'
FROM information_schema.INNODB_LOCK_WAITS a
JOIN information_schema.INNODB_TRX b questing_trx__id
JOIN information_schema.INNODB_TRX c ON a.blocking_trx__id
WHERE (UNIX_TIMESTAMP()-UNIX__started)) > 60
实例:
打开两个终端分别连接上数据库;
终端⼀:
a. 查看session的连接号:
select connection_id();
b. 将Innodb锁的⾃动超时时间改为180秒:
set global innodb_lock_wait_timeout=180;
c. 查询t表数据:
select * from t;
d. 开启事物:
begin;
e. 为t表开启排查锁:
select * from t for update;
终端⼆:
a. 查看session的连接号:
select connection_id();
b. 开启事物:
网页素材及网站架构制作begin;
c. 为t表开启排查锁:
select * from t for update;
在MySQL可视化⼯具中查询阻塞信息:
四、MySQL主从复制监控
1、如何监控主从复制链路的状态
2、如何监控主从复制延迟
show slave status;
Seconds_Behind_Master: 主从之间延迟的秒数,根据同步到从服务器上的主服务器的binlog和已经在从服务器上重新执⾏过的binlog⽇志之间的时间差来决定的。存在很多种情况都会造成数据的不准确,例如当⽹络存在问题的时候,主服务器还有⼤量的bionlog没同步到从服务器上,同时同步到从服务器上的binlog都已经被重⽤完了,在这种情况下,主从之间是存在很⼤的延迟的。
为了更加准确的反应延迟,我们需要使⽤使⽤多线程的程序同时对于主从服务器的状态来进⾏检查:
主服务器上:
show master status \G;
主上的⼆进制⽇志⽂件名和偏移量:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论