-. Instant add column 이란?

기존 INPLACE 등의 방식에서 대용량 테이블에 add column default value 수행은

full scan 등을 유발하여 처리가 오래걸릴 뿐만 아니라 Master <-> slave 간 replication LAG 이 발생하기 때문에 데이터 동기화에도 문제가 생김

이를 해결하고자 나온 것이 INSTANT algorithm 으로 mysql 8.0 / MariaDB 10.3.x 버전에서 default 로 사용됨

원리는 ORACLE에서 LOB 데이터를 테이블 segment 처럼 따로 저장하는 것과 같이

instant add column으로 생성된 컬럼을 테이블과 따로 저장하고 meta data 만 연결시켜주는 방식

 

-. Instant algorithm 사용 시

 

mysql> show create table sbtest.sbtest1\G;
*************************** 1. row ***************************
       Table: sbtest1
Create Table: CREATE TABLE "sbtest1" (
  "id" int(11) NOT NULL AUTO_INCREMENT,
  "k" int(11) NOT NULL DEFAULT 0,
  "c" char(120) COLLATE utf8_bin NOT NULL DEFAULT '',
  "pad" char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  PRIMARY KEY ("id"),
  KEY "k_1" ("k")
) ENGINE=InnoDB AUTO_INCREMENT=10000001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
1 row in set (0.00 sec)

=> 테스트용 테이블 생성

 
mysql> alter table sbtest.sbtest1 add column instant int default 0, algorithm=INSTANT;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select count(*) from sbtest.sbtest1 where instant=0;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (33.84 sec)
=> 천만건에 대해 default value add column 이 바로 수행됨
 
mysql> SELECT * FROM  information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column';
+-----------------------------+----------------+
| VARIABLE_NAME               | VARIABLE_VALUE |
+-----------------------------+----------------+
| INNODB_INSTANT_ALTER_COLUMN | 1              |
+-----------------------------+----------------+
1 row in set (0.00 sec)
=> instant column 의 갯수로 mysql 8.0 에서는 각각 테이블과 instant column들의 정보를 조회할 수 있으나 mariadb 에서는 관련 정보가 한정됨
 
        Seconds_Behind_Master: 0 
=> slave 에서 show slave status 조회시 replication lag 도 없이 동기화 됨 확인

 

-. 기존 INPLACE 방식으로 수행시

 
mysql> alter table sbtest.sbtest1 add column non_instant int default 0, algorithm=inplace;
Query OK, 0 rows affected (51.34 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
        Seconds_Behind_Master: 739
=> 수행도 오래걸리고 replication lag 발생 확인