为了保证数据库的安全,可用,平稳运行,除了备份和常规运维等之外,监控是不可缺少的一部分。如果数据库运行缓慢,或者出于某种原因无法响应,都有可能会遭受严重的问题。在这环中监控是必不可少的。
目前常用的监控指标查询吞吐量,查询执行性能,连接情况,缓冲池使用情况 以及资源利用率相关的指标。
在MySQL5.6的Information_Schema引入新的INNODB_METRICS,此表用来监控InnoDB运行情况,并且该表包括很多计数器。
计数器作用都有那些:
- 来监控Innodb内部运行是否健康,是否达到负载
- 是否业务量增加
(经常碰到运行一年的MySQL数据库突然,性能幅度非常大。那可以通过计数了解是哪方面多了操作。) - 可以为未来扩容提供有利的依据
从上诉计数器的趋势,可以得到很多有用的关键信息。
下面看下计算器都有哪些内容:
计数器统计模块和相应的子系统如下:
表结构,也比较简单:
mysql > SELECT STATUS ,COUNT(*) FROM information_schema.INNODB_METRICS GROUP BY status WITH ROLLUP;
+----------+----------+
| STATUS | COUNT(*) |
+----------+----------+
| disabled | 240 |
| enabled | 74 |
| NULL | 314 |
+----------+----------+
每个监视器代表InnoDB源代码中的一个点,它被检测来收集计数器信息。每个计数器可以启动、停止和复位。还可以使用一组计数器的公共模块名为它们执行这些操作。
开启、关闭、重置计数器的参数,主要有以下几个
mysql > SHOW VARIABLES LIKE '%monitor%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_monitor_disable | |
| innodb_monitor_enable | |
| innodb_monitor_reset | |
| innodb_monitor_reset_all | |
+--------------------------+-------+
4 rows in set (0.00 sec)
#开启
mysql > SET GLOBAL innodb_monitor_enable = 'metadata_%';
#关闭
mysql > SET GLOBAL innodb_monitor_disable = 'metadata_%';
#重置所有metadata的所有值:
mysql > SET GLOBAL innodb_monitor_reset_all = 'metadata_%';
#打开与关闭所有计数器
mysql> SET GLOBAL innodb_monitor_disable = all;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL innodb_monitor_enable = all;
Query OK, 0 rows affected (0.00 sec)
备注:innodb_monitor_reset是当前状态,如需要清空所有指标 就需要
先innodb_monitor_disable 之后 SET GLOBAL innodb_monitor_reset_all。在计数器和global status值不变。global_status和 INNODB_METRICS表 之间存在一些信息重复, 但metrics视图消除了这些信息。
计数器对STATUS计算影响:无
也可以在my.cnf进行配置:用逗号分隔计数器和模块名
[mysqld]
innodb_monitor_enable = module_recovery,metadata_table_handles_opened,metadata_table_handles_closed
有意思的指标
监控还有这些东东,是否对MySQL运行了解更进一步,比如以下指标,能帮助定位问题。
- index_page_splits
- adaptive_hash_searches
- innodb_rwlock_s_spin_waits
- ddl_background_drop_tables