我想使用 pt-online-schema-change 来改变一个大表(~100M 记录)的模式,这个工具在运行时会影响 MySql 的性能吗?
问问题
969 次
3 回答
3
根据设计,该工具不会对性能产生显着影响。首先,让我们回顾一下该工具的作用:
- 将触发器附加到当前表,以将所有更新、删除和插入复制到新表。
- 以块的形式复制现有数据,按密钥分区
第一部分将使所有写入翻倍,并且没有办法解决这个问题。第二部分是批处理操作,可能会锁定当前表并消耗大量 IO。
幸运的是,第二部分被分成了块,并且pt-online-schema-change
非常聪明地确定了块有多大以及块之间等待了多长时间:
- 它检查块之间的从属复制,如果滞后太大则暂停。它能够递归地检查奴隶。
- 它检查负载(通常通过运行线程的数量来衡量)并在运行的查询过多时暂停(这意味着锁争用或高 CPU/IO 使用率)。如果负载非常高,它甚至可以中止。
- 它配置InnoDB 锁设置,使其最有可能成为任何锁争用的受害者,因此生产查询将顺利运行。
- 默认情况下,块大小会动态更改以保持其运行时一致,使用之前块运行时的加权平均值。
- 太大的块(例如由于具有相同键的大量行)将被跳过。
因此,您的服务器可能只会受到副本的轻微影响。但当然,不能保证,如果可能,您应该在数据库的暂存版本上运行该工具。如果出现问题,您可以安全地中止该工具,而不会丢失数据。
于 2014-05-25T11:37:54.853 回答
1
在线模式更改非常激烈,同时对原始表的所有插入/更新/删除操作都加倍(该工具添加了触发器,因此这些操作在新副本上重复),并且原始表的每一行都被逐个复制超过。
如果您担心这可能对您的数据库产生什么影响,请查看文档:http ://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html
有几种方法可以让工具自行调节,包括检查线程数、复制延迟以及修改每个块的大小/每个块需要多长时间。
于 2014-01-17T17:47:59.897 回答
0
它会在磁盘上读取和写入内容,消耗内存并使用 CPU,所以是的,它会在运行时影响性能。不然怎么可能?
于 2011-12-08T11:42:46.530 回答