MySQL数据库监控项的示例分析

34次阅读
没有评论

共计 5880 个字符,预计需要花费 15 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 MySQL 数据库监控项的示例分析,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

监控项目
MYSQL.QPS                          
MYSQL.TPS                          
MYSQL.READS                        
MYSQL.WRITES                      
MYSQL.RWRATIO                      
MYSQL.KEY_BUFFER_READ_HITS        
MYSQL.KEY_BUFFER_WRITE_HITS        
MYSQL.QUERY_CACHE_HITS            
MYSQL.INNODB_BUFFER_READ_HITS      
MYSQL.THREAD_CACHE_HITS            
MYSQL.SLOW_QUERIES_PER_SECOND      
MYSQL.TEMP_TABLES_TO_DISK_RATIO    
MYSQL.TMP_DISK_TABLES_PER_SECOND  
MYSQL.SELECT_FULL_JOIN            
MYSQL.SELECT_FULL_JOIN_IN_ALL_SELECT
MYSQL.CONNECTIONS                  
MYSQL.CONNECTION_TIME              
MYSQL.INNODB_ROW_LOCK_CURRENT_WAITS
MYSQL.PROCESS_OF_MYSQLD            
MYSQL.HA_STATUS                    
MYSQL.SLAVE_STATUS                
MYSQL.TCP_COUNT                    
MYSQL.TCP_AVG                      
MYSQL.TCP_MAX                      
MYSQL.SLAVE_DELAYS                

一.MYSQL.QPS
定义:QPS 实际上是指 MySQL Server 过去 10 秒平均每秒执行的 Query 总量 (包括 show .select,set names,set global 等等);
计算公式:QPS=questions(当前值)-questions(10 秒前的值)/10
是否保留:是
报警阀值:视各个业务情况 (主要是 query 的复杂度) 及服务器配置设置. 大部分设置为 10000.
报警类型:大于 10000 严重. 大于 12000 灾难

二.MYSQL.TPS
定义:TPS 指每秒向 mysql sever 提交的修改 (包含 update.insert.delete.replace);
老的计算方式:
T1=Handler_commit+Handler_rollback  (均为当前值)
T2= Handler _commit+ Handler _rollback  (均为 10s 之前值)
TPS=T1-T2/10
新的计算方式:
T1= Com_insert+ Com_replace+Com_delete+Com_update  (均为当前值)
T2= Com_insert+ Com_replace+Com_delete+Com_update  (均为 10s 之前值)
TPS=T1-T2/10
是否保留:是
报警阀值:视各个业务情况及服务器配置设置. 大部分设置为 4000.
报警类型:大于 4000 严重. 大于 6000 灾难

三.MYSQL.READS
定义:READS 指每秒向 msyql sever 提交的读请求次数 (仅指 select);
计算公式:
R1=com_select+ qcache_hits  (均为当前值)
R2=com_select+ qcache_hits  (均为 10 秒前的值)
READS=R1-R2/10
是否保留:是
报警阀值:

四.MYSQL.WRITES
定义:WRITERS 指每秒向 mysql server 提交的写请求次数:
计算公式:
W1=com_insert+com_delete+com_update  (均为当前值)
W2=com_insert+com_delete+com_update  (均为 10s 之前的值)
WRITES=W1-W2/10
是否保留:不保留
去除原因:这个监控选项和 tps 重复.

五.MYSQL.RWRATIO
定义:RWRATIO 指自 mysql server 启动以来的读写比例. 注意这里不是以 10s 前后来衡量的;
计算公式:
R= com_select+ qcache_hits(均为当前值)
W= com_insert+ com_delete+ com_update+ com_replace  (均为当前值)
RWRATIO=R/W(得出值保留小数点前的值)
是否保留:不保留
去除原因:这个监控选项可以间接通过 mysql.reads 和 mysql.tps 计算出来. 无需另外设置监控项。

六.MYSQL.KEY_BUFFER_READ_HITS
定义:KEY_BUFFER_READ_HITS 指 myisam 引擎向 key buffer 读命中率的情况. 这个 buffer 用来存储 myisam 的索引 key;
计算公式:
KEY_BUFFER_READ_HITS=(1-( key_reads/ key_read_requests))*100%  (均为当前值)
(得出值保留小数点前的值)
是否保留:不建议保留
去除原因:现在只有 sso 和酒仙桥 cms 是 myisam 引擎. 后续项目全部采用 innodb. 且这两个项目会在合适时机会全部转换为 innodb。且目前这个 2 个项目数据压力稳定. 或者暂时只监控这 2 个业务. 更换引擎后在删除此监控项。

七.MYSQL.KEY_BUFFER_WRITE_HITS
  定义:KEY_BUFFER_WRITE_HIT 指 myisam 引擎向 key buffer 写入命中率的情况;
计算公式:
KEY_BUFFER_WRITE_HIT =(1-(key_writes/key_write_requests))*100 (均为当前值)
(得出值保留小数点前的值).
是否保留:不建议保留
去除原因:这个监控项只能体现 myisam 的命中率.myisam 在未来项目中将会被淘汰. 另外也没有必要专门监控 mysiam 的 write 命中情况. 关注 key buffer 的总体命中情况. 更有意义。

八.MYSQL.QUERY_CACHE_HITS
定义:QUERY_CACHE_HITS 指查询缓存的命中率情况. 值越高代表 query cache 作用越大. 从而降低引擎压力. 在 mysql server 层返回用户结果;
计算公式:
QUERY_CACHE_HITS =qcache_hits/(qcache_hits+ qcache_inserts) *100% (均为的当前值)
(得出值保留小数点前的值).
是否保留:不建议保留
去除原因:线上关键业务的修改量都比较大. 而且操作 query cache 是一个 global lock. 导致 经常发生 sql 停留在 Waiting for query cache lock 和失效 query cache 的状态。另外. 一个业务如果超过 95% 的 sql 是 select. 才建议打开 query cache。

九.MYSQL.INNODB_BUFFER_READ_HITS
定义:INNODB_BUFFER_READ_HITS. 极为重要的一个状态值. 反应 innodb 引擎所需数据在内存中的命中的情况。
计算公式:
INNODB_BUFFER_READ_HITS=(1-(innodb_buffer_pool_reads/innodb_buffer_pool_read_requests))*100%  (均为当前值)(得出值保留小数点前的值).
是否保留:保留
报警阀值:小于 95%
报警类型:小于 95% 警告

十.MYSQL.THREAD_CACHE_HITS
定义:THREAD_CACHE_HITS=(1-( threads_created/ connections))*100%  (均为当前值)
(得出值保留小数点前的值).
是否保留:保留
报警阀值:小于 90%
报警类型:小于 90% 警告

十一.MYSQL.SLOW_QUERIES_PER_SECOND
定义:SLOW_QUERIES_PER_SECOND 指每过去 10 秒平均每秒产生的 slow log 的总量;
计算公式:
SLOW_QUERIES_PER_SECOND = Slow_queries(当前值)- Slow_queries(10 秒之前的值)/10
是否保留:保留
报警阀值:
报警类型:

十二.MYSQL.TEMP_TABLES_TO_DISK_RATIO
定义:TEMP_TABLES_TO_DISK_RATIO 指在硬盘上创建临时表的几率, 越小越好. 代表临时表都创建在内存中。
计算公式:
TEMP_TABLES_TO_DISK_RATIO=(created_tmp_disk_tables/ created_tmp_tables)*100%
(均为当前值)(得出值保留小数点前的值).
是否保留:不建议保留
去除原因:了解 sql 性能是否存在问题. 不应该仅关注这个比率. 一条性能很差的 sql 产生磁盘临时表对性能的影响可能比 100 条产生内存临时表的 sql 大很多。应该积极关注慢查询中那些执行时间非常长 sql。

十三.MYSQL.TMP_DISK_TABLES_PER_SECOND
定义:TMP_DISK_TABLES_PER_SECOND 指过去 10 秒内每秒创建磁盘临时表的数量;
计算公式:
TMP_DISK_TABLES_PER_SECOND=created_tmp_disk_tables(当前值)-created_tmp_disk_tables(10 秒之前的值)/10
是否保留:建议保留
报警阀值:
报警类型: 

十四.MYSQL.SELECT_FULL_JOIN
  定义:SELECT_FULL_JOIN 指每秒执行 full join 的总量. 这个参数一般发生在 join 过程中没有使用索引的情况;
计算公式:
SELECT_FULL_JOIN= Select_full_join(当前值)- Select_full_join(10 秒之前的值)/10
是否保留:不建议保留
去除原因:并不是没有利用索引的 join 性能就很差. 对于不合理的 sql. 如果带来性能影响. 可以打开慢查询根据进行调优.full join 可能只是其中一个原因。一些小表的 full join 对性能冲击很小。

十五.MYSQL.SELECT_FULL_JOIN_IN_ALL_SELECT
定义:SELECT_FULL_JOIN_IN_ALL_SELECT 指过去 10 秒钟里面.full join 占总 select 的比例;
计算公式:
S1= select_full_join(当前值)- select_full_join(10 秒之前的值)
S2= com_select(当前值)- com_select(10 秒之前的值)
SELECT_FULL_JOIN_IN_ALL_SELECT=s1/s2*100%(得出值保留小数点前的值).
是否保留:不建议保留
去除原因:理由同上  

十六.MYSQL.CONNECTIONS  
定义:CONNECTIONS 指自 mysql server 启动以来一共产生的连接数. 这个值不能反映当前连接数. 建议用 Threads_connected 来衡量;
新的计算方式:CONNECTIONS= Threads_connected(当前值)
是否保留:保留
报警阀值:800
报警类型:大于 800 严重. 大于 1500 灾难  

十七.MYSQL.CONNECTION_TIME
定义: 从 mysql server 所在服务器上发送一个简单的查询所需要的时间。
是否保留:不建议保留
去除原因:tcp_average 比此参数更具参考价值. 因为这个 time 是朝服务器本身发送请求. 而 tcp average 关注的是应用 ip 向 db server 统计出来的时间。

十八.MYSQL.INNODB_ROW_LOCK_CURRENT_WAITS(新增)
定义:INNODB_ROW_LOCK_CURRENT_WAITS. 因为公司大部分引擎都是 innodb. 所以有必要监控 innodb 行锁的等待情况. 状态值反应了过去 10 秒有几个 sql 处于等待 row lock 的状态。
计算公式:INNODB_ROW_LOCK_CURRENT_WAITS= Innodb_row_lock_current_waits(当前值)
是否保留:保留
报警阀值:无
报警类型:无

十九.MYSQL.PROCESS_OF_MYSQLD
定义:process_of_mysqld 用来监控 mysqld 的进程数. 如果返回 0. 表示 mysqld 进程挂掉。
是否保留:保留
报警阀值:为 0 则报警
报警类型:灾难

二十.MYSQL.HA_STATUS
定义:ha_status 用来监控 MHA 进程是否存在. 如果返回 0. 表示由于 MHA 的切换导致 MHA 自动退出. 或者 MHA 服务没有启动。
是否保留:保留
报警阀值:为 0 则报警
报警类型:严重

二十一.MYSQL.SLAVE_STATUS
定义:mysql.slave_status 用来监控 slave 的 io thread 和 sql thread. 如果任意一个线程的状态为 no. 则返回 0. 否则返回 1。
是否保留:保留
报警阀值:为 0 则报警
报警类型:严重

二十二:MYSQL.TCP_COUNT
定义:利用 percona 的 tcprstat 从底层探测平均每秒发送到 mysql server 的请求数. 而不是在 mysql server 的内部进行统计。
是否保留:不建议保留
去除原因:这个监控的结果和 qps 的数目一致. 重复监控

二十三:MYSQL.TCP_AVG
定义:每秒内发送到 mysql server 所有请求的平均响应时间. 此值大. 表明 mysql server 异常. 对请求做出响应的时间过长。单位为微妙。
是否保留:保留
报警阀值:无
报警类型:无

二十四:MYSQL.TCP_MAX
定义:过去一秒内. 发送到 mysql server 所有请求中响应时间最长的请求所花费的时间。单位为微妙。
是否保留:保留
报警阀值:无
报警类型:无

二十一.MYSQL.SLAVE_DELAYS
定义:mysql.slave_delay 用来监控 slave 的 sql thread 同步 master 是否有延迟. 如果有. 返回延迟的秒数. 如果没有延迟. 返回空
是否保留:保留
报警阀值:1200
报警类型:大于 1200 严重. 大于 3600 灾难

关于“MySQL 数据库监控项的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计5880字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)