在MySQL 5.7测试实例(非生产)上,假设我有100亿行,模式有5列,1个主键,1个唯一键和1个外键。添加新列时,哪一种执行速度更快?

  1. 运行alter table with algorithm=copy?
  2. 运行pt-online-schema-change吗?

谢谢。

1像

你好布莱恩,

感谢你在这里发帖,并成为社区的一部分。可能alter table会更快。但我做了一个假设:在桌子上的改变过程中没有明显的活动。

pt-online-schema-change慢一些,但它允许在表上进行日常活动:插入、更新和删除。

您还必须考虑对复制的可能影响,因为更改将在所有副本上进行复制。这可能导致复制延迟。

谢谢你!

鼓舞士气的

1像

嗨,鼓舞士气,

谢谢。因此,服务器根本没有任何活动,也没有设置复制。“alter table”会更快吗?为什么呢?pt-osc会有多慢?估计要慢2倍?-我不这么认为。)

我喜欢pt-online-schema-change,因为它显示了它完成的“剩余时间”,而我不知道直接修改需要多长时间才能完成(注意这是在Amazon Aurora MySQL上,所以我看不到正在创建的临时表)。因此,如果pt-osc和直接更改将完成大致相同(例如。如果直接更改提前2-3小时完成,那仍然很好),那么我想使用pt-osc代替。

谢谢,
布莱恩

1像

你好布莱恩,

很难说会有多快,但肯定会快得多。请记住,修改将在数据库服务器中进行,不会将任何数据移出服务器,而pt-osc将涉及数据库和运行pt-osc的节点之间的通信。

如果您主要关心的是时间差异,我的建议是使用较小的表执行一些测试,以比较环境中的行为。

谢谢,

鼓舞士气的

1像

@brianestrada658
正如Pep所说,原生ALTER总是更快,因为数据只是在内部移动,而pt-osc使用SQL来选择和重新插入数据。如果你只是需要添加一个新列,我建议你先升级到MySQL 8.0(供参考:5.7 EOL明年),然后你可以使用本地的ALGORITHM=INSTANT,它只需要几秒钟就可以添加一个列。

1像