计算MySQL浪费了多少磁盘空间
时间:2019-10-21
本文章向大家介绍计算MySQL浪费了多少磁盘空间,主要包括计算MySQL浪费了多少磁盘空间使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
背景
最近我的订阅里推送了一篇歪果仁的文章。我看了一下文章觉得文章不好,然后看了一下作者,居然是印度人。因为之前乘坐深圳地铁,被印度人抢占过座位,所以专门写一篇文章来吐槽一下他的文章。(没有恶意,纯娱乐)
他的文章地址如下,有兴趣的同学请自备梯子:
https://thedataguy.in/mysql-calculate-how-much-disk-space-you-wasted/
他是一名云和数据库的架构师,擅长sql server、postgresql、my sql、mongodb、cassandra、cosmosdb
吐槽一,shell写得不好
我修改了一下他的shell,比他的看起来要好一些。
connect="mysql -uroot -proot -S /tmp/mysql3307.sock"
DB='test'
MYSQL_DATA_DIR=`mysql -uroot -proot -S /tmp/mysql3307.sock -NBe 'select @@datadir' 2>/dev/null`
TABLES=`ls -l $MYSQL_DATA_DIR/$DB/ | grep ibd | awk -F' ' '{print $9}' | sed -e 's/\.ibd//g'`
for x in `echo $TABLES`
do
TB=$x
SQL="SELECT data_length+index_length FROM information_schema.tables"
SQL="${SQL} WHERE table_schema='${DB}' AND table_name='${TB}'"
TBLSIZE_OPER=`ls -l $MYSQL_DATA_DIR/${DB}/${TB}.ibd | awk -F' ' '{print $5}'`
TBLSIZE_INFO=`$connect -ANe"${SQL}" 2>/dev/null`
TBLSIZE_FRAG=$(($TBLSIZE_OPER - $TBLSIZE_INFO))
TBLSIZE_FRAG_GB=$(($TBLSIZE_FRAG / 1073741824))
echo ${TB} ${TBLSIZE_FRAG_GB}
done
吐槽二,统计不精确
他用的是以GB为单位的。GB实在太不精确了,而且也不四舍五入一下。。
潜台词: 0.99G 也会被当做 0G
吐槽三,可以直接用SQL
他说他在dba stackexchange上搜索类似的问题时,发现了Rolando的出色脚本,然后做了修改。我想说,这个问题明明不需要用shell解决,可以直接用SQL解决。
正确做法
用SQL就可以解决:
#碎片
#总碎片(GB)
select sum(data_free)/1024/1024/1024 data_free from information_schema.tables where data_free > 0 ;
#实例里每张表碎片大小(字节)
select table_schema,table_name,data_free from information_schema.tables where data_free > 0 ;
#综合使用案例
select table_schema,table_name,table_rows,data_length,index_length,data_length+index_length,
concat(round((data_length+index_length)/1024/1024,2),'MB')
data, concat(round(data_free/1024/1024,2),'MB') data_free from information_schema.tables where table_schema = 'test';
吐槽四,标题党
作者题目就是"计算MySQL浪费了多少磁盘空间",其实他只是计算MySQL数据库的表的碎片化程度,还有一种浪费磁盘空间的问题,就是undolog被撑大的问题,作者没有说。如果想梳理,还能说出其他浪费磁盘空间的情况呢。
当然,我也是标题党,因为我的文章标题是"计算MySQL浪费了多少磁盘空间",我最后只是一篇吐槽的娱乐文章。
原文地址:https://www.cnblogs.com/fander/p/11714669.html
- Java Socket Timeout总结
- 求一个数组中子数组的最大和算法(Java实现)
- JDBC批量提交SQL的几点问题解答
- 工具推荐: 汽车CAN总线分析框架CANToolz
- Windows下jps, jconsole无法查看本地java进程问题解决
- DateFormat 线程不安全
- zip文件操作导致JVM crash
- 如何搭建你自己的“深度学习”机器?
- MySQL INSERT INTO...ON DUPLICATE KEY UPDATE的使用
- 通过Java代码来模拟乘法器
- INET_ATON()函数在MySQL5.6版本和5.7版本的差异
- Linux主机之间ssh免密登录配置
- 远控木马Posion Ivy开始肆虐缅甸和其它亚洲国家
- Slf4j+Logback配置文件变量使用小记
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- error: PyThreadState {aka struct _ts} has no member named exc_type
- Python创建目录文件夹
- python 按顺序读文件夹下面的文件
- python剪切文件
- 一个hashCode问题的追问,差点让我陷入无底洞
- 【JAVA基础&高级】 面向对象篇
- MySQL-InnoDb行格式与数据页结构 Krains 2020-08-08
- 《自然语言处理实战入门》 ---- 第4课 :中文分词原理及相关组件简介 之 汉语分词领域主要分词算法、组件、服务(上)...
- MySQL索引 Krains 2020-08-09
- 「查缺补漏」巩固你的Redis知识体系
- MySQL事务 Krains 2020-08-09
- Linux本地提权漏洞复现与检测思路
- 内容安全策略( CSP )
- [译] 优化 React APP 的 10 种方法
- 如何免登陆观看b站大会员番剧