mysql 5.7.x版本查看某张表、库的大小 思路方案说明

举报
刘大猫 发表于 2024/11/03 20:00:48 2024/11/03
【摘要】 mysql 5.7.x版本查看某张表、库的大小 思路方案说明

image.png

@[TOC]

摘要

==本人项目使用场景:==预统计某表总大小+表今日新增大小,其中今日新增每10s刷新一次,想要的效果是表不断怼数据情况下,今日新增展示功能能动态滚动,及做到近实时查询当下表大小。
本文MYSQL版本==5.7.x==,本文提供两种解决方案查询某张表大小,并对每种方案使用限制条件及场景进行解析说明
如果MYSQL版本为==8.x==版本,则查看解决方案(本人没验证过,不清楚是否可行,需自己实践验证):https://blog.csdn.net/londa/article/details/90480266

(推荐)第一种方案:查询information_schema.TABLES的字段DATA_LENGTH

information_schema为系统表,其中TABLES表作为视图可以查看库表字段等等信息,但是它是只读的,不能进行更新、删除和插入等操作,也不能加触发器,因为它们实际只是一个视图,不是基本表,没有关联的文件。
具体案例可百度或者查看举例地址:https://www.cnblogs.com/Knight7971/p/9963299.html

使用场景

查询表大小对实时性要求不高情况下可使用,因为DATA_LENGTH字段不都是实时触发更新,表的引擎不同更新状况不同,表引擎为MYISAM会动态实时更新,表引擎为INNODB则定期更新,据说更新条件为达到表大小10%插入量才会触发更新DATA_LENGTH字段。
具体可查看官网:https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/information-schema-tables-table.html
image.png

优点:网上大多案例都是查询系统表的字段DATA_LENGTH去计算大小

缺点:DATA_LENGTH不都是实时更新的,由表引擎决定,同时DATA_LENGTH是压缩后的字节大小(及大小经过压缩后计算得到DATA_LENGTH)

第二种方案:查询information_schema.INNODB_SYS_TABLESPACES的字段FILE_SIZE

本方案参考文档:https://zhuanlan.zhihu.com/p/147269069

使用场景

网上说该方案是针对表引擎为INNODB情况下实时更新并获取表大小,该方案弥补了第一种方案表大小无法做到实时更新的场景,但是FILE_SIZE字段记录的是==未经压缩==的表大小,上面的DATA_LENGTH是==经过压缩后==的表大小,这样存在的问题就是,当表数据比较大的时候两者值会有很大的大小差距,所以要考虑清楚用哪个。
具体可查看官网:https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/information-schema-innodb-sys-tablespaces-table.html
image.png

优点:针对表引擎为INNODB情况下能够实时更新并获取表大小

缺点:FILE_SIZE字段值大小为未经过压缩的表大小

(不推荐)第三种方案:禁用 innodb_stats_persistent=OFF 并启用 innodb_stats_on_metadata=ON

该方案参考文档:https://blog.csdn.net/csd753111111/article/details/100428647

网上方案网上说:
image.png

==mysql命令为:show global variables like ‘%stats%’;==
结果为:
image.png

==要修改某个属性可使用命令:set global innodb_stats_on_metadata=off;==
说明:这种方案弊端较大,使用需谨慎。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。