MySQL 存储问题:删除前一天的数据并每天通过 RDS MySQL 插入新记录

问题描述 投票:0回答:1

我对执行重大删除后回收存储空间有疑问。 删除的记录不会释放存储空间。我们是否必须每次都执行

optimize table tablename
查询来释放已删除的存储空间?有什么配置可以帮助我们释放存储空间吗?

我们正在使用 InnoDB 表

优化查询:https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html

sql mysql optimization amazon-rds
1个回答
0
投票

这是

PARTITIONing
的案例。

  • PARTITION BY RANGE(TO_DAYS(...))
  • 使用数据的日期时间的分区键;
  • 调整索引。
  • 设置每小时
    DROP PARTITION
    REORGANIZE PARTITION
    的脚本。

注意:我建议每小时分区,这样表中一次最多可以保存 25 小时的数据。

更多讨论:分区

DELETE
在桌子上留下可用空间;空闲空间将被后续
INSERTs
重用。如果您坚持使用非分区方法,我建议您有一个连续运行的任务,重复执行

DELETE ... 
    WHERE .. < NOW() - 24 HOUR
    LIMIT 1000`

在该键上有一个索引。更多:大删除如果您需要扫描

PRIMARY KEY
而不是使用特殊索引,它还展示了一种技术。

OPTIMIZE TABLE
可能是一个“坏主意”。它阻止了表的使用。它收回的空间很快就被占据了。我猜你当前的技术在一天和两天的数据之间波动。

在桌面上进行任何主要活动之前,请确保将

innodb_file_per_table
设置为
1
。 (这是一个合理的默认值,并且可能已经这样设置了。

我的建议是将使用的磁盘空间保持在 1.0 到 1.04 天(24-25 小时)之间。除非事情变得一团糟,否则

PARTITIONing
不会从
OPTIMIZE
中受益。连续部分删除可能需要也可能不需要
OPTIMIZE
;这取决于表结构的细节。你愿意分享吗?我可能还有其他技巧——例如在适当的情况下使用较小的“整数”。

© www.soinside.com 2019 - 2024. All rights reserved.