您好,我目前有一个包含 100 个 HASH 分区的表。由于 future 的扩展,我决定现在需要将其增加到 1000 个分区。
我是否需要从表中删除分区,然后在之后添加 1000 个分区,或者是否可以将额外的 900 个分区添加到已分区的表中?
我分区的方式是使用下面的代码。
ALTER TABLE t1
PARTITION BY HASH(venue_id)
PARTITIONS 100;
是否还有一种方法可以估算将 1000 个分区添加到我的表中需要多长时间?我将使用一种 perconas 工具来执行此操作,这将防止表锁定。 https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html
最佳答案
您无需删除分区即可重新分区。无论如何,它都会将行插入到新表中,因此您不妨一步完成。
只需 ALTER TABLE 并定义新的分区方案:
ALTER TABLE t1
PARTITION BY HASH(venue_id)
PARTITIONS 1000;
或者使用 pt-online-schema-change:
pt-online-schema-change h=myhost,D=mydatabase,t=t1
--alter "PARTITION BY HASH(venue_id) PARTITIONS 1000"
--execute
(我在那里放了换行符以避免换行,但这是一个命令。)
我忘了评论你的另一个问题,关于预测完成的 ETA。
Percona 脚本的一个优点是它可以报告进度,您可以从中得到完成的估计值。尽管在我们的环境中,我们发现它不是很准确。它有时会报告几个小时内已完成 99%。
另请记住,Percona 脚本并非 100% 没有锁定。它在运行的开始和结束时需要短暂的独占元数据锁,因为它需要创建触发器,然后重命名表并在结束时删除触发器。任何查询,即使是只读的 SELECT
,都会阻止元数据锁定。如果您在完成脚本时遇到问题,请确保您对表运行的任何查询和事务都能快速完成(否则,如果没有完成,您必须终止它们)。
关于mysql - 向已经 HASH 分区的表添加额外的 HASH 分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55336322/