创建一个存储过程:对sbtest1表增加字段c1,然后再删除,反复循环64次操作。
当第65次时,再次执行增加字段c1, Instant DDL算法失效,无法秒级增加字段。
【BUG重现】
1) 存储过程创建
代码语言:sql复制DELIMITER //
CREATE PROCEDURE Execute_Alterations()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 32 DO
SET @sql1 = 'ALTER TABLE sbtest1 ADD c1 INT, ALGORITHM=INSTANT;';
SET @sql2 = 'ALTER TABLE sbtest1 DROP c1, ALGORITHM=INSTANT;';
PREPARE stmt1 FROM @sql1;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
PREPARE stmt2 FROM @sql2;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
SET i = i 1;
END WHILE;
END//
DELIMITER ;
2) 执行存储过程
代码语言:sql复制CALL Execute_Alterations();
3) 查看sbtest1表DDL执行次数
代码语言:sql复制select name,TOTAL_ROW_VERSIONS FROM INFORMATION_SCHEMA.INNODB_TABLES
where NAME like '%sbtest1%';
到这里,你会看到64.
4) 此时,你再执行DDL,增加字段c1,会报错提示超出最大次数限制,如图所示: