Mysql监控数据库
监控 Mysql 进程是否存在
select 1;
返回正常证明 Mysql 实例没挂。但是可能存在并发线程多,系统不可用的问题。Mysql 提供参数 innodb_thread_concurrency 控制并发线程数,一般在 64-128 之间。如果线程满了,新事务就无限等待线程释放。但是select 1;
不会报错。
连接并发可以上千,连接本身占内存和网络,但是不占 CPU 资源。
监控线程
为了判断线程是否满了,可以定期执行select * from health;
,正常则表示线程没满,查询没问题。
更新事务会写入 binlog 和 redolog。redolog 是环形空间,永远不会满。binlog 可能用完磁盘空间。binlog 满了影响更新,但是不影响查询。update health set time = now();
执行更新,判断是否可以更新。
Mysql 指标
客户端语句可以查询连接情况,Mysql 自身的 performance_schema 库也提供统计 IO 耗时的指标。比如可以打开 redolog 和 binlog 日志,并设定阈值,超过阈值则告警。但是统计 IO 指标本身也消耗 CPU,降低业务性能。