【MySQL】mysql optimize table

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 维护mysql 对表空间的回收策略是只拓展,不回收。对表执行delete之后,表空间是不回收的,空闲的空间可以被insert 继续使用,通常执行truncate,重新逻辑导出,再导入或者执行optimize table 三种都可以重新使用未使用的表空间。
维护mysql 对表空间的回收策略是只拓展,不回收。对表执行delete之后,表空间是不回收的,空闲的空间可以被insert 继续使用,通常执行truncate,重新逻辑导出,再导入或者执行optimize table 三种都可以重新使用未使用的表空间。
本文介绍一下optimize table OPTIMIZE TABLE可以重新利用未使用的空间,并整理数据文件的碎片。
1 演示回收空间
删除之前:
[root@rac1 test]# ll tab.ibd
-rw-rw---- 1 mysql mysql 150994944 10-16 22:15 tab.ibd
对表进行删除操作:
root@rac1 : test 21:12:00> optimize table tab;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
删除之后:
[root@rac1 test]# ll tab.ibd
-rw-rw---- 1 mysql mysql 98304 10-16 22:15 tab.ibd
显然 ibd文件经过optimize之后 明显的减小了。

2 使用范围
OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。

对于MyISAM表,OPTIMIZE TABLE按如下方式操作:
1.如果表已经删除或分解了行,则修复表。
2.如果未对索引页进行分类,则进行分类。
3.如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。
对于BDB表,OPTIMIZE TABLE目前被映射到ANALYZE TABLE上。
对于InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE上,这会重建表。重建操作能更新索引统计数据并释放成簇索引中的未使用的空间。


3 对于 M-S,M-M 架构的数据库
如果不想把optimize table 写入从数据库,可以执行
OPTIMIZE NO_WRITE_TO_BINLOG TABLE 
这样命令就不会写入binglog 并且不被从库执行。

4 遇到的问题
如果在使用optimize的时候遇到如下错误:
root@rac1 : test 22:10:22> optimize table tab;
+----------+----------+----------+-------------------------------------------------------------------+
| Table    | Op       | Msg_type | Msg_text                                                          |
+----------+----------+----------+-------------------------------------------------------------------+
| test.tab | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.tab | optimize | status   | OK                                                                |
+----------+----------+----------+-------------------------------------------------------------------+
2 rows in set (29.88 sec)
使用--skip-new或--safe-mode选项可以启动mysqld。通过启动mysqld,您可以使OPTIMIZE TABLE对其它表类型起作用。
注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
关系型数据库 MySQL
【mysql】快速使用mysql exists 语法
【mysql】快速使用mysql exists 语法
47 1
|
4月前
|
SQL Oracle 关系型数据库
MySQL必知必会:MySQL中的Schema与DataBase
MySQL必知必会:MySQL中的Schema与DataBase
|
7月前
|
SQL 存储 关系型数据库
浅谈MySQL的sql_mode
今天我们来分享一下MySQL的SQL mode , 这也是我们比较容易忽略的一点,我们在一开始安装数据库的时候其实就要先考虑要保留哪些SQL mode,去除哪些,合理的配置能够减少很多不必要的麻烦。
94 0
|
5月前
|
关系型数据库 MySQL Shell
Mysql The table is full
Mysql The table is full
|
6月前
|
索引
MySQL--索引
MySQL--索引
|
10月前
|
关系型数据库 MySQL
【MySQL】MySQL的7种join
在上一篇文章中,我们建了两张表:tbl_dept,tbl_emp,并向这两张表插入了一些数据,在这篇文章中,我们借用前面的两张表,研究MySQL的join。
|
关系型数据库 MySQL 索引
MySQL ALTER命令
MySQL ALTER命令
|
存储 关系型数据库 MySQL
MySQL的Schema是什么?
MySQL的Schema是什么?
440 0
MySQL的Schema是什么?

热门文章

最新文章