【BUG重现】让MySQL 8.0 Instant DDL算法在第65次时失效

2024-04-25 15:53:28 浏览数 (1)

创建一个存储过程:对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,会报错提示超出最大次数限制,如图所示:

0 人点赞