为了保证数据库的安全,可用,平稳运行,除了备份和常规运维等之外,监控是不可缺少的一部分。如果数据库运行缓慢,或者出于某种原因无法响应,都有可能会遭受严重的问题。在这环中监控是必不可少的。
目前常用的监控指标查询吞吐量,查询执行性能,连接情况,缓冲池使用情况 以及资源利用率相关的指标。

在MySQL5.6的Information_Schema引入新的INNODB_METRICS,此表用来监控InnoDB运行情况,并且该表包括很多计数器。

计数器作用都有那些:

  • 来监控Innodb内部运行是否健康,是否达到负载
  • 是否业务量增加
    (经常碰到运行一年的MySQL数据库突然,性能幅度非常大。那可以通过计数了解是哪方面多了操作。)
  • 可以为未来扩容提供有利的依据
    从上诉计数器的趋势,可以得到很多有用的关键信息。

下面看下计算器都有哪些内容:

计数器统计模块和相应的子系统如下:

instance mysql 监控阈值 mysql数据监控_mysql

表结构,也比较简单:

instance mysql 监控阈值 mysql数据监控_database_02

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计算影响:无

instance mysql 监控阈值 mysql数据监控_instance mysql 监控阈值_03

也可以在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