sql查找一个范围的值_分享一个实用sql--mysql数据库一键查找碎片程度很高的表...

概述

今天主要分享下我们怎么在mysql数据库去统计表的碎片程度?

d45846ed47a7dbf024b04045e94417ba.png

思路

这里主要会用到两个数据字典表:

information_schema.tables

information_schema.INNODB_SYS_TABLESPACES

c95413032393b4a476de999274ff2718.png
2dbf4519a0f7262077d27117ecad5204.png

结合innodb_sys_tablespaces这个数据字典的字段FILE_SIZE计算表的物理文件大小和逻辑大小。

表的大小逻辑计算为data_length+index_length=xxx,假设是AM左右,而物理文件大小是BM左右,那么碎片率大约是(B-A)/60*100%。


碎片程度比较高的表:

下面大家也可以把基数调整的稍大一些为1.1,然后以这个为基线来做统计。

SELECTt.table_schema,t.table_name,t.table_rows,t.data_length + t.index_length data_size,t.index_length index_size,t.avg_row_length,t.avg_row_length * t.table_rows logic_size,s.FILE_SIZE,TRUNCATE ( s.FILE_SIZE / ( t.data_length + t.index_length ) * 1.1 * 2, 0 ) tab_frag FROMinformation_schema.TABLES t,information_schema.INNODB_SYS_TABLESPACES s WHEREt.table_type = 'BASE TABLE' AND concat( t.table_schema, '/', t.table_name ) = s.NAME AND t.table_schema NOT IN ( 'sys', 'information_schema', 'mysql', 'test' ) -- and t.table_schema in('fsl_prod','fsl_prod_diaocha')AND s.FILE_SIZE > 102400000 AND ( t.data_length + t.index_length ) * 1.1 * 2 < s.FILE_SIZE ORDER BYs.FILE_SIZE;

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

4d8f5712980b409d62434715239e11ef.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值