在MySQL 5.7测试实例(非生产)上,假设我有100亿行,模式有5列,1个主键,1个唯一键和1个外键。添加新列时,哪一种执行速度更快?
- 运行alter table with algorithm=copy?
- 运行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像