mysql如何查看存储引擎统计信息_mysql status变量监控

2次阅读

mysql 8.0+ 默认存储引擎由 default_storage_engine 变量控制,执行 SHOW VARIABLES LIKE ‘default_storage_engine’ 可查;某表实际引擎应以 SHOW table STATUS 结果中的 Engine 字段为准,而非建表语句或 information_schema 缓存值。

mysql如何查看存储引擎统计信息_mysql status变量监控

查看 MySQL 默认存储引擎用哪个变量

MySQL 8.0+ 的默认存储引擎由 default_storage_engine 系统变量控制,不是过时的 storage_engine —— 后者在 5.7 后已弃用,查出来可能为空或报错。直接执行:

SHOW VARIABLES LIKE 'default_storage_engine';

如果返回 ValueInnoDB,说明新建表不显式指定引擎时就用它;如果是 MyISAM,那得小心——事务、外键、行锁全没。

查某张表实际用了什么引擎,别只信建表语句

SHOW CREATE TABLE 看的是建表时写的 DDL,但引擎可能被后续 ALTER TABLE ... ENGINE= 改过,也可能因版本升级/复制同步出错而“悄悄降级”。更可靠的现场快照是:

SHOW TABLE STATUS LIKE 'user_order';

注意输出中的 Engine 字段——这才是当前真实生效的引擎。常见坑:

  • 复制从库上某张表显示 ENGINE=InnoDB,但 RowsNULL,可能是表损坏或未加载元数据
  • information_schema.TABLES 查询时,TABLE_SCHEMA 必须严格匹配数据库名(区分大小写取决于系统配置)

批量查一个库所有表的引擎类型,用 INFORMATION_SCHEMA 最稳

想一眼看清 shop_db 下哪些表还在用 MyISAM(比如为兼容老备份脚本),直接查系统库最可靠:

SELECT TABLE_NAME, ENGINE, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'shop_db' ORDER BY ENGINE;

  • TABLE_ROWS 是估算值,InnoDB 下不准,MyISAM 下才接近真实
  • 如果查询卡住或超时,可能是 information_schema 表被大表元数据阻塞,可加 /*+ MAX_EXECUTION_TIME(5000) */ 限流(MySQL 5.7.8+)
  • 别用 SHOW TABLE STATUS FROM shop_db 替代——它在库大、表多时性能差,且不支持 WHERE 过滤

status 变量里没有“存储引擎统计”,别被名字误导

SHOW STATUS 查的是运行时状态计数器(如 Com_selectInnodb_rows_inserted),**不包含引擎分布统计**。有人搜 “mysql engine status” 误以为有类似 Innodb_engine_status 的指标,其实没有。真要监控引擎使用情况,得靠:

  • 定期采样 information_schema.TABLES 并存档对比
  • performance_schema.table_io_waits_summary_by_table 看各引擎表的 I/O 压力(需开启相关 consumers)
  • 慢日志里 Rows_examined 高但 ENGINEMyISAM?赶紧查是否缺索引或锁表了

真正容易被忽略的是:引擎变更后,information_schema 的缓存可能延迟刷新,刚 ALTER 完立刻查,偶尔会看到旧值。

text=ZqhQzanResources