mysql释放空间
Database 2025/10/21 10:34:51 点击:不统计
http://%77%77%77%2E%66%6F%72%61%73%70%2E%63%6E
mysql在存储大量数据后,进行删除数据,mysql 占用了大量的存储空间,不释放空间,怎么让mysql 释放空间。
这里以8.0.33 版本为例
1. 首先确定表是独立的配置,在my.conf 中配置,确保开启单表独立表空间:
innodb_file_per_table = 1
2. 查看表有多少空间可以释放
SELECT
table_schema,
table_name,
ROUND((data_length + index_length) / 1024 / 1024, 2) AS total_mb,
ROUND(data_free / 1024 / 1024, 2) AS free_mb
FROM information_schema.tables
WHERE table_schema = '[DbName]' AND table_name = '[TableName]'; 3. 优化mysql释放空间 的两种方式:
(1)优化表:间会生成临时文件,确保有足够磁盘空间(至少等于原表大小)
OPTIMIZE TABLE [TableName];
这个会直接优化表,不会重建。目前测试不一定立即释放,第三天查看释放的空间。
(2)重建表:通过 强制复制重建表结构 的方式完全释放空间
ALTER TABLE amazon_advertised_product_reports_sd ENGINE=InnoDB, ALGORITHM=COPY;
会有表阻塞,效果立刻显示。
4. 对比:
| 对比项目 | OPTIMIZE TABLE | ALTER TABLE ... ENGINE=InnoDB, ALGORITHM=COPY |
| 主要目的 | 优化表、回收空间、更新统计信息 | 重建表,释放空间 |
| 实际行为 | 可能使用 INPLACE 或 COPY 方式 | 强制使用 COPY 方式 |
| 锁类型 | 多数情况下仅轻微锁表,支持在线 | 全程读锁,最后阶段短暂写锁 |
| 磁盘空间需求 | 约等于表大小 | 略大于表大小 |
| 释放空间效果 | 有时不彻底(尤其 INPLACE 模式) | 彻底释放 .ibd 空间 |
| 对统计信息的影响 | 自动更新统计信息 | 重建后需要手动 ANALYZE |
| 可控性 | 自动判断优化算法 | 明确指定 COPY,重建最彻底 |
转www.载for网站制作学习asp必.cn究
·上一篇:mysql 同步检查错误常用sql >> ·下一篇:网站制作学习网
