2

在某些情况下,我们使用 MySQL 按日期分区来存储数据,保留 X 天的信息,并且每天自动进程会提前创建分区并删除旧分区(请注意这里没有存档只是删除)。数据还通过一些哈希细分为 40 个分区,以进一步优化访问。

虽然每日“更改表删除分区”查询运行数据库,但性能明显下降,并且在该数据库上中继的应用程序显示连接丢失,每秒处理的请求较少等。

我们正在为这个带有 InnoDB 的特定应用程序运行 MySQL 5.5.17,每个被删除的分区都有几百万条记录(可能超过 1000 万条)。每个分区的大小平均为 4.5GB。

在分区删除时,我没有在那个盒子上看到任何密集的 IO,所以我只能假设它与此无关。然而,CPU 平均负载从一天中那个时间的 0.5 正常上升到 8-10 左右。这持续了几分钟。

分区删除不应该是一个简单的逻辑删除吗?是否有可能我们做错了什么,或者我们可以以某种方式对其进行调整,或者这是可以预料的。

干杯

4

1 回答 1

0

我意识到这是一个老问题,但没有答案,所以我会试一试。

如果您的文件系统是 ext3,删除文件可能需要一些时间。XFS 和 ext4 会快得多

从 MySQL 的角度来看,你可以做的一个加快速度的技巧是创建一个到分区文件的硬链接(而不是符号链接)。然后,DROP PARTITION 将简单地减少文件上的引用计数,这几乎是即时的。您可以让他们删除您对文件所做的链接。这仍然需要一些时间,但 MySQL 不会看到它。

于 2012-11-20T01:43:04.477 回答