1)主机健康监控:网络通信、软硬件错误、磁盘空间、内存使用
2)mysql健康监控: 服务端口(telnet尝试连接)、mysqld和mysqld_safe进程、errorlog和复制状态
3)主机性能监控:系统load值、cpu使用率、
磁盘IO量(vmstat+iostat),iops,每秒吞吐量
iostat rMB/s+wMB/s吞吐量很低 util很高表示随机IO很重
r/s+w/s代表iops
swap进出量(free获取系统总swap情况和vmstat实时获取swap)、网络流量
4)mysql性能监控:
4-1)qps每秒查询量
QPS = Questions(or Queries) / Seconds
获取所需状态变量值:
SHOW /*!50000 GLOBAL */ STATUS LIKE 'Questions'
SHOW /*!50000 GLOBAL */ STATUS LIKE 'Queries'
4-2)tps每秒事务量
TPS = (Com_commit + Com_rollback) / Seconds
4-3)Key Buffer 命中率(分读写):
key_buffer_read_hits = (1 - Key_reads / Key_read_requests) * 100%
key_buffer_write_hits= (1 - Key_writes / Key_write_requests) * 100%
4-4)Innodb Buffer 命中率:
innodb_buffer_read_hits=(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100%
4-5)Query Cache 命中率:
Query_cache_hits= (Qcache_hits / (Qcache_hits + Qcache_inserts)) * 100%
4-6)Table Cache 状态量:Table Cache 的当前状态量可以帮助我们判断系统参数table_open_cache 的设置是否合理。如果状态变量Open_tables 与Opened_tables 之间的比率过低,则代表Table Cache 设置过小,个人认为该值处于80% 左右比较合适。
4-7)Thread Cache 命中率(正常要达到90%以上):
Thread_cache_hits = (1 - Threads_created / Connections) * 100%
4-8)锁定状态:当Table_locks_waited 与Table_locks_immediate 的比值较大,则说明我们的表锁造成的阻塞比较严重,可能需要调整Query 语句,或者更改存储引擎,亦或者需要调整业务逻辑。
Innodb_row_lock_waits 较大,则说明Innodb 的行锁也比较严重,且影响了其他线程的正常处理。同样需要查找出原因并解决。造成Innodb 行锁严重的原因可能是Query 语句所利用的索引不够合理(Innodb 行锁是基于索引来锁定的),造成间隙锁过大。也可能是系统本身处理能力有限,则需要从其他方面(如硬件设备)来考虑解决。
4-9)复制延时量
4-10)Tmp table 状况
如果是Created_tmp_disk_tables 与Created_tmp_tables 的比率过高,如超过10%,则我们需要考虑是否tmp_table_size 这个系统参数所设置的足够大
4-11)Binlog Cache 使用状况:Binlog Cache 用于存放还未写入磁盘的Binlog 信息。如果Binlog_cache_disk_use 值不为0,则说明Binlog Cache 大小可能不够,
建议增加binlog_cache_size 系统参数大小。
4-12)Innodb_log_waits 量:Innodb_log_waits 状态变量直接反应出Innodb Log Buffer 空间不足造成等待的次数。
当该值达到每秒1 次时就该增加系统参数innodb_log_buffer_size 的值