mysql - pt-online-schema-change 增加了这么多复制线程?

标签 mysql percona

前几天,我使用 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/

相关文章:

mysql - 在 powershell 中将参数传递给 mysql.exe

php - 计数未在查询中返回正确的计数

mysql - Node MySQL 使用子查询批量插入?

MySQL |更新查询以填充子项

mysql - 使用 Angular 访问数据库

mysql - Docker percona (mysql mariadb) 容器在定义卷 (-v) 后在 ubuntu 上运行后停止

mysql - 当 log_bin 关闭时删除 log-bin 文件

mysql - 我们可以考虑将 Percona 作为 MySQL Enterprise 的替代品吗?

mysqld修改pid