innodb引擎mysql存储优化

思路:
1) 清理不需要的数据
2) 考虑将大表迁移至tidb

1.查找大表:

SELECT 
TABLE_NAME,
data_free,
index_length,
concat(round(sum(data_length/1024/1024/1024),2),'GB') as dl
FROM `TABLES` 
GROUP BY TABLE_NAME
having sum(data_length/1024/1024/1024)>2
ORDER BY DATA_LENGTH DESC

《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,推荐分库分表操作 ,那么这里就把大于2G的表作为大容量表处理。

2.删除binlog
在查找大表的时候发现表占用存储并不是很大
转而看日志情况,binlog占用磁盘空间最大
binlog其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句,并以"事务"的形式保存在磁盘中;

3.清理表空洞

删除过期数据之后,发现磁盘空间占用并没有减少,原来是innodb引擎的mysql库,用delete table where语句删除数据后 并不会回收碎片空间,而是有新数据之后,如果能存入该空间就会存进该空间,否则磁盘空间永远不会减少。

-- 列出所有已经产生碎片的表 ('information_schema', 'mysql'这两个库是mysql自带的库)
select 
table_schema db, 
table_name,
 data_free, 
 engine,
 table_rows,
 data_length+index_length length 
 
from 
information_schema.tables   

where 
table_schema not in ('information_schema', 'mysql') and data_free > 0

ORDER BY data_free desc 
;

处理表碎片

alter table gd_channel_app_retention engine=innodb;

note:这个语句处理碎片空间其实是先复制现有数据表 然后删除旧的数据表 。如果这个表占用空间巨大,还是直接迁移数据吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值