前几天,我使用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中的文档,但找不到任何相关信息 关于多线程复制的选项。
我这次更改的表是非常频繁访问的,但我认为只要有一个复制线程就不会出现问题。
任何人都可以给我一些帮助,谢谢!
答案 0 :(得分:0)
REPLACE语句由pt-online-schema-change创建的触发器运行。
pt-online-schema-change只运行一个线程。但是触发器可能会被原始表上执行INSERT / UPDATE / DELETE的许多其他客户端线程执行。
pt-online-schema-change不是免费改变表的神奇方式。它有成本。该表的每次更新都会成为两次更新。
听起来您的服务器无法处理运行pt-online-schema-change的额外负载,而您的流量正在针对原始表运行更新。服务器无法像客户端一样快地执行这些更新。所以他们落后并排队。
您可以升级到功能更强大的服务器。更多CPU内核和更快的I / O系统可能会有所帮助。但那将是非常昂贵的。
更简单的解决方案是将您的表格更改安排在流量较轻的较晚时间。