0
点赞
收藏
分享

微信扫一扫

MySQL性能调优之磁盘空间

萍儿的小确幸 2022-04-29 阅读 39

删库跑路必备目录

前言

在数据库运维过程中会遇到磁盘空间占用过大情况,这个时候就需要对空间进行扩容或者优化磁盘空间了。
在这里插入图片描述

导致空间不足情况及优化方案

索引太多

大字段导致空间不足

空闲表空间太多导致空间不足

可以通过命令show table status like ‘<表名>’;
在这里插入图片描述

查看表上空闲的空间,如果空闲空间过多,可以执行命令optimize table ‘<表名>’ ;整理表空间。
InnoDB类型的表是无法使用optimize table命令的。强行使用会返回如下结果:
在这里插入图片描述

MySQL5.7已经推荐对于InnoDB的table使用

临时表空间过大导致空间不足

日志过大(Binlog日志、Slow日志、Error日志)

定时自动清理Binlog日志

手动删除Binlog日志

Slow日志清理

Error日志清理

大表清理

select table_schema,table_name,
concat(round((data_length+index_length)/1024/1024/1024,2),'G') as tablesize_gb,
table_rows from information_schema.tables
order by tablesize_gb desc limit 5;

常规表数据清理

扩展

报错处理

未开启二进制文件会报错

查看二进制开启状态

打开mysql 的配置文件my.ini
在mysqld配置项下面加

二进制日志 Binary Log

二进制日志有两个最重要的使用场景:

MySQL删除数据的方式

从执行速度上来说

DELETE

TRUNCATE

执行后立即生效,无法找回

DROP

属于数据库DDL定义语言,同Truncate;
Drop table Tablename
执行后立即生效,无法找回

OPTIMIZE TABLE

OPTIMIZE TABLE通过制作原来的表的一个临时副本来工作
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] …
如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有 VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新利用未使用的空间,并整理数据文件的碎片。

对于MyISAM表,OPTIMIZE TABLE按如下方式操作:

OPTIMIZE

举报

相关推荐

0 条评论