在 MySql table 中存储每周数据并删除过去几周的数据的最佳做法是什么?
What is best practice for storing weekly data in MySql table and deleting data from past weeks?
一些数据是在单个 MySql table 中收集的。一周后,这些数据就过时了。计划命令每周从 table 中删除旧数据。但这会导致删除期间的性能瓶颈,因为 table 被锁定。我一直在寻找分区的方向 - 至少有 2 个 tables:一个 table 用于当前一周,另一个用于过去一周。所以我可以删除过去一周的完整 table。这是一个好的选择吗?还有其他选择吗?
我至少可以推荐两个选项:
使用table分区。删除分区就像删除 table,无论分区中的行数如何,它都非常快。但是分区有限制,所以要仔细阅读文档。通常阻止分区使用的是它如何要求分区键是 table 的每个唯一键的一部分:https://dev.mysql.com/doc/refman/8.0/en/partitioning-limitations-partitioning-keys-unique-keys.html
使用pt-archiver。这将删除小组中的行,因此每个组需要很短的时间。它可能比执行单个 DELETE 需要更长的时间,但没关系,因为它一次只锁定一个组,而不是整个 table.
一些数据是在单个 MySql table 中收集的。一周后,这些数据就过时了。计划命令每周从 table 中删除旧数据。但这会导致删除期间的性能瓶颈,因为 table 被锁定。我一直在寻找分区的方向 - 至少有 2 个 tables:一个 table 用于当前一周,另一个用于过去一周。所以我可以删除过去一周的完整 table。这是一个好的选择吗?还有其他选择吗?
我至少可以推荐两个选项:
使用table分区。删除分区就像删除 table,无论分区中的行数如何,它都非常快。但是分区有限制,所以要仔细阅读文档。通常阻止分区使用的是它如何要求分区键是 table 的每个唯一键的一部分:https://dev.mysql.com/doc/refman/8.0/en/partitioning-limitations-partitioning-keys-unique-keys.html
使用pt-archiver。这将删除小组中的行,因此每个组需要很短的时间。它可能比执行单个 DELETE 需要更长的时间,但没关系,因为它一次只锁定一个组,而不是整个 table.