在某些情况下,我们使用 MySQL 按日期分区来存储数据,保留 X 天的信息,并且每天自动进程会提前创建分区并删除旧分区(请注意这里没有存档只是删除)。数据还通过一些哈希细分为 40 个分区,以进一步优化访问。
虽然每日“更改表删除分区”查询运行数据库,但性能明显下降,并且在该数据库上中继的应用程序显示连接丢失,每秒处理的请求较少等。
我们正在为这个带有 InnoDB 的特定应用程序运行 MySQL 5.5.17,每个被删除的分区都有几百万条记录(可能超过 1000 万条)。每个分区的大小平均为 4.5GB。
在分区删除时,我没有在那个盒子上看到任何密集的 IO,所以我只能假设它与此无关。然而,CPU 平均负载从一天中那个时间的 0.5 正常上升到 8-10 左右。这持续了几分钟。
分区删除不应该是一个简单的逻辑删除吗?是否有可能我们做错了什么,或者我们可以以某种方式对其进行调整,或者这是可以预料的。
干杯