前几天,我使用pt-online-schema-change向一个表中添加了一个列和索引,该表大约有100万行,.ibd文件大小约为5G字节。
我尝试了几次,每次我得到一个错误,说进程由于达到临界负载而中止(这是threads_running=60,我总是使用它,以前从未失败过)
我在使用show full process list时发现了一些奇怪的东西:有很多复制线程,比如:
REPLACE INTO `db`.`_some_table_new` ...运行了很长时间(数十秒和数百秒),并且处于“更新”状态。
因为我知道pt-online-schema-change只使用了一个复制线程,并且我多次使用这个工具,每次我只能观察到一个线程的分块和复制,但这次一切都改变了,有很多复制线程阻塞在那里。
我在percona.com中搜索了文档,但没有找到有关多线程复制选项的任何信息。
我这次修改的表被访问得非常频繁,但我认为只要有一个复制线程,这就不会造成问题。
有人能帮我一下吗,谢谢!
发布于 2017-08-19 01:38:51
REPLACE语句由pt-online-schema-change创建的触发器运行。
pt-online-schema-change只运行一个线程。但触发器可能由许多其他在原始表上执行插入/更新/删除操作的客户端线程执行。
pt-online-schema-change不是免费执行alter table的神奇方法。这是有代价的。对该表的每次更新都会变成两次更新。
这听起来像是您的服务器无法处理运行pt-online-schema-change的额外负载,而您有大量的流量在原始表上运行更新。服务器不能像客户端执行这些更新一样快地执行这些更新。因此,他们落在后面,排队等候。
您可以升级到功能更强大的服务器。更多的CPU核心和更快的I/O系统可能会有所帮助。但这将是非常昂贵的。
更简单的解决方案是将表更改安排到流量较少的较晚时间。
https://stackoverflow.com/questions/45760329
复制相似问题