[MySQL 5.6] Innodb 新的监控表 INNODB_METRICS

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

除了Performance Schema外,在MySQL 5.6中还提供了一个新的information_schema表来监控Innodb的内部运行状态——INNODB_METRICS;该表维护了一组计数器,用户可以通过这些计数器,来监控Innodb内部运行是否健康。当前的MySQL5.6.12版本中,共有210个计数器:

mysql> select count(*) from INNODB_METRICS;

+———-+

| count(*) |

+———-+

|      210 |

+———-+

1 row in set (0.00 sec)

mysql> select count(*) from innodb_metrics where status = ‘disabled';

+———-+

| count(*) |

+———-+

|      148 |

+———-+

1 row in set (0.00 sec)

mysql> select count(*) from innodb_metrics where status = ‘enabled';

+———-+

| count(*) |

+———-+

|       62 |

+———-+

1 row in set (0.00 sec)

默认打开62个计数器

这里我们不讨论相关的代码实现,因为其实现很简单,所有的监控项,包括跟这些计数器相关的操作都在文件srv/srv0mon.cc中,独立成模块,外部我们经常看到类似如下代码的,就是插入的计数器:

buf_LRU_get_free_block:

     MONITOR_INC(MONITOR_LRU_GET_FREE_SEARCH);

如果我们自己要添加新的counter,可以往srv/srv0mon.cc中自行添加。

以下只讨论如何使用该表,以及其包含的内容。

INNODB_METRICS表包括如下列(摘自官方文档)

Column name

Description

NAME

Unique name for the counter.

SUBSYSTEM

The aspect of InnoDB that the metric applies to. See the list following the table for the corresponding module names to use with the SET GLOBAL syntax.

COUNT

Value since the counter is enabled.

MAX_COUNT

Maximum value since the counter is enabled.

MIN_COUNT

Minimum value since the counter is enabled.

AVG_COUNT

Average value since the counter is enabled.

COUNT_RESET

Counter value since it was last reset. (The _RESET fields act like the lap counter on a stopwatch: you can measure the activity during some time interval, while the cumulative figures are still available in theCOUNTMAX_COUNT, and so on fields.)

MAX_COUNT_RESET

Maximum counter value since it was last reset.

MIN_COUNT_RESET

Minimum counter value since it was last reset.

AVG_COUNT_RESET

Average counter value since it was last reset.

TIME_ENABLED

Timestamp of last start.

TIME_DISABLED

Timestamp of last stop.

TIME_ELAPSED

Elapsed time in seconds since the counter started.

TIME_RESET

Timestamp of last stop.

STATUS

Whether the counter is still running () or stopped ().

TYPE

Whether the item is a cumulative counter, or measures the current value of some resource.

COMMENT

Additional description.

例如,我们要查询DML的执行量:

mysql>  select status,  NAME, COUNT, SUBSYSTEM from INNODB_METRICS where name like ‘%dml%';

+———-+———————-+——-+———–+

| status   | NAME                 | COUNT | SUBSYSTEM |

+———-+———————-+——-+———–+

| disabled | purge_dml_delay_usec |     0 | purge     |

| enabled  | dml_reads            |   942 | dml       |

| enabled  | dml_inserts          |     0 | dml       |

| enabled  | dml_deletes          |     0 | dml       |

| enabled  | dml_updates          |   913 | dml       |

+———-+———————-+——-+———–+

5 rows in set (0.00 sec)

我们可以通过以下几个变量来控制计数器的设置:

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)

我们以AHI相关的计数器为例,默认情况下他们是关闭的

mysql> select status, name, subsystem from INNODB_METRICS where status = ‘disabled’ and subsystem like ‘%adaptive_hash_index%';

+———-+——————————————+———————+

| status   | name                                     | subsystem           |

+———-+——————————————+———————+

| disabled | adaptive_hash_searches_btree             | adaptive_hash_index |

| disabled | adaptive_hash_pages_added                | adaptive_hash_index |

| disabled | adaptive_hash_pages_removed              | adaptive_hash_index |

| disabled | adaptive_hash_rows_added                 | adaptive_hash_index |

| disabled | adaptive_hash_rows_removed               | adaptive_hash_index |

| disabled | adaptive_hash_rows_deleted_no_hash_entry | adaptive_hash_index |

| disabled | adaptive_hash_rows_updated               | adaptive_hash_index |

+———-+——————————————+———————+

7 rows in set (0.00 sec)

打开计数器:

mysql> set global innodb_monitor_enable = ‘adaptive_hash_%';

Query OK, 0 rows affected (0.00 sec)

关闭计数器:

mysql> set global innodb_monitor_disable = ‘adaptive_hash_%';

Query OK, 0 rows affected (0.00 sec)

重置AHI所有列的值:

mysql> set global innodb_monitor_reset_all = “adaptive_hash_%”;

Query OK, 0 rows affected (0.00 sec)

只重置COUNTER的值:

mysql> set global innodb_monitor_reset = “adaptive_hash_%”;

Query OK, 0 rows affected (0.00 sec)

根据模块名打开:

mysql> set global innodb_monitor_enable = module_adaptive_hash;

Query OK, 0 rows affected (0.00 sec)

打开所有计数器:

mysql>  set global innodb_monitor_enable = all;

Query OK, 0 rows affected (0.00 sec)

关闭所有计数器:

mysql> set global innodb_monitor_disable =  all;

Query OK, 0 rows affected (0.00 sec)

我们既可以设置具体的某一个counter,或者通过通配符,或者通过模块名,或者all,来设置counter,配置还是相当灵活的。

模块名与subsystem的对应关系:

模块名

对应subsystem

描述

module_metadata

metadata

表级别的打开、关闭、引用次数等

module_lock

lock

锁系统相关信息,例如死锁次数, 创建/移除/请求的记录锁,包括表锁等统计信息,锁等待/持有时间等等。。

module_buffer

buffer

跟buffer pool相关的操作,

module_buf_page

buffer_page_io

buffer pool做写操作的计数

module_os

os

os层的数据读写等信息

module_trx

transaction

事务量统计,例如只读事务,写事务,回滚事务,活跃事务,事务Undo信息等。

module_purge

purge

purge操作统计,例如purge 标记删除的记录树,Purge undo日志的page数等

module_compress

compression

压缩表相关统计信息,例如压缩,解压,增加/减少padding的次数等。

module_file

file_system

只有一个counter:file_num_open_files 表示打开的文件数

module_index

index

索引分裂和合并的次数

module_adaptive_hash

adaptive_hash_index

自适应hash相关操作

module_ibuf_system

change_buffer

change buffer相关操作统计

module_srv

server

实例内部运行状态,例如bp size , page size ,master线程信息,spin 统计,读写锁信息,写double write buffer的计数

module_ddl

ddl

DDL统计

module_dml

dml

读/插入/删除/更新的次数

module_log

recovery

跟redo log相关的信息,例如reodo checkpoinr信息,flush 信息,同步/异步刷日志点,日志写入量,pending的日志请求等。。

module_icp

icp

在Innodb层的index condition pushdown的相关信息


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
41 1
|
7天前
|
监控 关系型数据库 MySQL
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
20 1
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
48 2
zabbix agent集成percona监控MySQL的插件实战案例
|
1月前
|
存储 缓存 关系型数据库
详细解析MySQL中的innodb和myisam
总之,InnoDB和MyISAM各有千秋,选择合适的存储引擎应基于对应用程序特性的深入理解,以及对性能、数据完整性和可扩展性的综合考量。随着技术发展,InnoDB因其全面的功能和日益优化的性能,逐渐成为更广泛场景下的首选。然而,在特定条件下,MyISAM依然保留其独特的价值。
102 0
|
3月前
|
监控 关系型数据库 MySQL
在Linux中,mysql的innodb如何定位锁问题?
在Linux中,mysql的innodb如何定位锁问题?
|
3月前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
70 6
|
4月前
|
存储 SQL 关系型数据库
(十三)MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?
MySQL是一款支持拔插式引擎的数据库,在开发过程中你可以根据业务特性,从支持的诸多引擎中选择一款适合的,例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole.....
|
4月前
|
Prometheus 监控 Cloud Native
Prometheus结合Consul采集多个MySQL实例的监控指标
将 Prometheus 与 Consul 结合使用,实现对多个 MySQL 实例的自动发现与监控,不仅提高了监控的效率和准确性,也为管理动态扩缩容的数据库环境提供了强大的支持。通过细致配置每一部分,业务可以获得关键的性能指标和运行健康状况的即时反馈,进而优化资源配置,提高系统的稳定性和可用性。
149 3
|
2天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
13 4
|
25天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
58 3
Mysql(4)—数据库索引
下一篇
无影云桌面