如何在 MySQL 上模拟长 运行 alter query

How to simulate long running alter query on MySQL

我有一个系统,我想测试它执行 Alter 查询。我正在寻找一种方法来模拟长 运行 Alter 查询,我可以测试“恐慌”、“资源使用”、“并发性”……当它是 运行 时.

有什么方法可以模拟长运行 Alter 查询吗?

我正在使用 gh-ost 进行更改执行。

下面是我想测试长运行 ALTER TABLE:

时所做的事情
  1. 创建 table。

  2. 用几百万行随机数据填充它,直到它大到足以让 ALTER TABLE 花费几分钟。需要多少行取决于您计算机的速度。

  3. 运行 ALTER TABLE就可以了。

我还没有找到更好的解决方案,我从 2001 年就开始使用 MySQL。

这里有一个无需客户端应用程序或脚本即可填充大量行的技巧:

mysql> create table mytable (id int auto_increment primary key, t text);
Query OK, 0 rows affected (0.05 sec)

mysql> insert into mytable (t) select repeat(sha1(rand()), 255) from dual;
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into mytable (t) select repeat(sha1(rand()), 255) from mytable;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into mytable (t) select repeat(sha1(rand()), 255) from mytable;
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into mytable (t) select repeat(sha1(rand()), 255) from mytable;
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> insert into mytable (t) select repeat(sha1(rand()), 255) from mytable;
Query OK, 8 rows affected (0.03 sec)
Records: 8  Duplicates: 0  Warnings: 0

mysql> insert into mytable (t) select repeat(sha1(rand()), 255) from mytable;
Query OK, 16 rows affected (0.03 sec)
Records: 16  Duplicates: 0  Warnings: 0

现在我有 32 行 (16+8+4+2+1+1)。我可以根据需要多次继续相同的查询,每次都会使 table 的大小加倍。没多久我就有了table几千兆 尺寸。