讲师中心 微信公众号
AI工具推荐 视频效率加速

如何查看数据表的行溢出情况_表碎片统计面板分析

雨丽吖_3967

雨丽吖_3967

发布时间:2026-05-11 09:26:02

|

903人浏览过

|

来源于php中文网

原创

可通过SHOW CREATE TABLE查ROW_FORMAT是否为DYNAMIC/COMPRESSED,再结合INFORMATION_SCHEMA.INNODB_SYS_COLUMNS中MTYPE=254且PRTYPE&4096!=0判断字段是否溢出;溢出页不计入PAGE_COUNT,需通过FILE_SIZE与DATA_LENGTH差值趋势分析估算。

怎么查 innodb_page_size 和实际行是否溢出

mysql 的 innodb 表如果单行数据超过 8kb(默认 innodb_page_size=16k 时,约 80% 页面空间用于存储,即 ~12kb 可用,但 blob/text/varchar 超长字段会触发行溢出),就会把大字段值存到单独的溢出页(overflow page),只在主页面留 20 字节指针。这不是错误,但会影响查询性能和统计准确性。

关键看两点:表是否启用了 ROW_FORMAT=DYNAMIC 或 COMPRESSED(只有这两种才支持真正的行溢出);以及字段是否真的被剥离出去了。

  • SHOW CREATE TABLE `your_table` 查 ROW_FORMAT,不是 COMPACT 或 REDUNDANT
  • 执行 SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME = 'db_name/your_table',确认 ROW_FORMAT 字段值
  • 真正判断溢出:查 INFORMATION_SCHEMA.INNODB_SYS_COLUMNS 中该表的列,看 MTYPE 和 PRTYPE —— 若 MTYPE=254(即 VARCHAR)且 PRTYPE & 4096 != 0,说明该列可能被溢出存储(需结合长度判断)

用 INFORMATION_SCHEMA.INNODB_SYS_INDEXES 看碎片页数量

表碎片不等于行溢出,但溢出页多、频繁 DELETE/UPDATE 大字段,会让碎片加剧。InnoDB 不直接暴露“溢出页数”,但可通过索引页统计反推:

  • INFORMATION_SCHEMA.INNODB_SYS_INDEXES 中的 PAGE_COUNT 是该索引总页数,INNODB_SYS_TABLESPACES 中对应表空间的 FILE_SIZE / INNODB_PAGE_SIZE 是物理分配页数,二者差值越大,碎片越严重
  • 对主键索引(INDEX_ID 最小的那个)重点关注:若 PAGE_COUNT 远小于 FILE_SIZE / 16384(假设默认页大小),说明有大量未回收的溢出页或已删除但未 purge 的记录
  • 注意:PAGE_COUNT 不包含溢出页 —— 溢出页只记录在 INNODB_SYS_TABLESPACES 的 FILE_SIZE 里,但不会单独拆分统计

OPTIMIZE TABLE 能不能清理溢出行和碎片

能,但有条件。它本质是重建表(ALTER TABLE ... FORCE),会重新组织所有页,把溢出数据重写、合并,并释放空闲空间。

  • 必须是 ROW_FORMAT=DYNAMIC 或 COMPRESSED,否则 OPTIMIZE 不会移动溢出列内容
  • 执行后检查 INFORMATION_SCHEMA.TABLES.DATA_LENGTH 是否明显下降,再对比 DATA_FREE(空闲空间)是否归零或显著减少
  • 线上慎用:会锁表(除非开启 innodb_fast_alter_table=ON 且满足 ALGORITHM=INPLACE 条件),且大表耗时久;替代方案是 ALTER TABLE t ENGINE=INNODB(效果等价,但语义更明确)
  • 如果 DATA_FREE 仍很大,可能是 innodb_file_per_table=OFF,此时碎片在共享表空间里,无法通过单表优化回收

为什么 ANALYZE TABLE 不更新溢出行统计

ANALYZE TABLE 只更新索引统计(如 Cardinality)和采样估算的行数,完全不扫描溢出页,也不读取 BLOB/TEXT 实际内容长度。所以它对溢出情况“视而不见”。

  • 你看到的 AVG_ROW_LENGTH 是基于主页面字段估算的,不含溢出部分,因此通常远低于真实平均行宽
  • 想粗略估计溢出比例?用 SELECT AVG(LENGTH(blob_col)) FROM t 对比 AVG_ROW_LENGTH —— 若前者大很多,基本可判定溢出频繁
  • 真正要监控,得靠定期采集 INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES.FILE_SIZE 和 INFORMATION_SCHEMA.TABLES.DATA_LENGTH 做差值趋势分析,而不是依赖单次 ANALYZE

溢出页本身不报错、不告警,但它让 SELECT * 变慢、让缓冲池压力变大、也让 mysqldump 导出体积虚高——这些才是你该盯住的实际信号。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2213

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1359

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

795

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3052

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5148

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1159

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5411

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4742

2023.08.14

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

0

2026.10.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn