mysql - 向已经 HASH 分区的表添加额外的 HASH 分区
问题描述
嗨,我目前有一个包含 100 个 HASH 分区的表。由于未来的扩展,我决定现在需要将其增加到 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
,都会阻塞元数据锁。如果您在完成脚本时遇到问题,请确保您对表运行的任何查询和事务快速完成(否则,如果没有,您必须终止它们)。
推荐阅读
- java - 如何在 Android Java 上的共享首选项中保存状态?
- wordpress - 如何发布模板以使其显示在 wordpress 的特定页面上
- ios - 它不像按钮那样用作单元格
- optimization - cvxpy如何判断模型的类型
- python - 如何将 k.variable、addweights 转换为 pytorch 代码
- scala - 使用 UDF 更新数据框中的 Seq[UDT] 列,但无法将 GenericRowWithSchema 类型的错误转换为 UDT
- firebase - 如果我从 Firebase 存储中删除一些文件,会对结算产生什么影响?
- postgresql-10 - 使用 gMSA(组托管服务帐户)启动数据库时 PostgreSQL 数据库启动失败。如何解决它?
- openshift - 由于 SSL 证书错误,超出了 HTTPS 连接池条目
- google-sheets - 带有公式的 Google 表格复选框