gpt4 book ai didi

MySQL 回收磁盘空间,使用 OPTIMIZE 表

转载 作者:行者123 更新时间:2023-11-29 22:24:06 25 4
gpt4 key购买 nike

我需要你的建议。需要以最短的停机时间回收实时服务器上的磁盘空间。我们正在使用:

mysql -- 5.5
innodb table per file -- on

是一个巨大的表(70%插入/30%删除——这意味着有时我们从这个表中删除行),这个表被“drop table”命令删除,正如我们所期望的,mysql没有释放磁盘空间给操作系统,但现在我们需要释放可用空间。 OPTIMIZE 命令是可能的方式 - 但现在我们不能 100% 确定磁盘上是否有足够的可用空间来执行此命令,因为以前的表很大。但在mysql文档中写道:

You can run OPTIMIZE TABLE to compact or recreate a file-per-table tablespace. When you run an OPTIMIZE TABLE, InnoDB creates a new .ibd file with a temporary name, using only the space required to store actual data. When the optimization is complete, InnoDB removes the old .ibd file and replaces it with the new one.

我强调了文档中令人困惑的时刻,这是否意味着“OPTIMIZE Drops_table;”将仅使用真正需要的数据的空间,对于这种情况,如果我们提前删除表,就没有实际数据?

最佳答案

如果表是在 innodb_file_per_tableOFF创建的,则该表将写入 ibdata1,并且DROP TABLE 不会将空间返回给操作系统。

如果它已ON,那么就会有一个.ibd 文件。您在DROP之前看到过该文件吗?它还存在吗? (它不应该仍然存在。)

DROP删除.ibd文件时,在等待操作系统实际释放数据时会出现轻微的延迟(取决于操作系统)。 du 和/或 df 反射(reflect)了这种滞后。

OPTIMIZE TABLE 会将表复制到 tmpdir (我认为),然后删除旧表并玩 RENAME 游戏。这需要额外的空间——足以容纳表的完整副本。假设您确实有一个 .ibd 文件,它将创建另一个 .ibd 文件(带有临时名称)和随机文件。如果 tmpdir 指向不同的“文件系统”,则随机播放将涉及副本,而不仅仅是移动。

如果我没有充分解释事情,请提供更多详细信息 - 您提出的实际命令、相关表的大小、.ibd 是否存在等。

关于MySQL 回收磁盘空间,使用 OPTIMIZE 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30424283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com