前几天,我使用 pt-online-schema-change 向表中添加列和索引,该表大约有 100 万行,.ibd 文件大小约为 5G 字节。
我尝试了几次,每次都出现错误,表示进程因以下原因而中止 达到临界负载(即threads_running = 60,我总是使用它并且以前从未失败过)
我使用显示完整进程列表发现了一些奇怪的事情:那里有很多复制线程,例如:
REPLACE INTO `db`.`_some_table_new` ...
运行很长时间(数十秒和数百秒)并且处于“更新”状态。
据我所知,pt-online-schema-change 仅使用一个复制线程,并且我多次使用此工具,每次我只能观察到一个线程分块和复制,但这次一切都改变了,有很多复制线程堵在那里。
我在percona.com上搜索了文档,没有找到任何关于 关于多线程复制的选项。
我这次修改的表访问非常频繁,但我认为只要有一个复制线程就不会造成问题。
谁能给我一些帮助,谢谢!
最佳答案
REPLACE 语句由 pt-online-schema-change 创建的触发器运行。
pt-online-schema-change 仅运行一个线程。但是触发器可能由在原始表上执行 INSERT/UPDATE/DELETE 的许多其他客户端线程执行。
pt-online-schema-change 并不是免费修改表的神奇方法。它是有成本的。该表的每次更新都会变成两次更新。
听起来您的服务器无法处理运行 pt-online-schema-change 的额外负载,而您的原始表运行更新的流量很大。服务器无法像客户端执行这些更新一样快地继续执行这些更新。所以他们落后了并排队。
您可以升级到更强大的服务器。更多的 CPU 核心和更快的 I/O 系统可能会有所帮助。但这会非常昂贵。
更简单的解决方案是将表格更改安排在稍后流量较少的时间。
关于mysql - pt-online-schema-change 增加了这么多复制线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45760329/