MySQL InnoDB 删除 500,000 条记录拖慢整个服务器

Ons*_*nst 0 mysql linux innodb

每周都会触发一个 cronjob,从使用 InnoDB 引擎的 MySQL 表中删除大约 500,000 条记录。该表包含每周处理的网络日志数据,之后不再需要的数据将被删除。这个表有 3 个索引(没有外键),包括 time,它是一个 unix 时间戳。

从 global_viewlog 中删除时间<1354391592

问题是上周运行的这个查询需要 2 个多小时才能运行,在此期间我的整个服务器都在滞后。'iotop' 揭示了被 MySQL 引用大量写入的硬盘,服务器负载急剧增加到不健康的水平。

每次点击都会写入表格。房间里有没有我没看到的大象?即,优化这个每周查询的一些显而易见的事情?

谢谢

Eri*_*man 5

如果您定期根据时间删除旧数据,则根据同一列对表进行分区会使其速度更快。它将不同的时间段分隔到磁盘上的不同区域,因此删除只是删除整个块而不是查看单个行。

http://dev.mysql.com/doc/refman/5.5/en/partitioning.html