mysql 5.6 이상에서 varchar size를 변경할 때 아래 조건일 경우 table lock 없이 변경할 수 있다.
varchar 컬럼의 byte가 0~255 안에서는 lock없이 변경가능.
varchar 컬럼의 byte가 256~65535(max size) 안에서는 lock없이 변경가능.
여기서 단위가 byte라는것이 중요하며, utf8mb4는 4byte이기 때문에 테이블의 케릭터셋을 확인하여 alter로 변경하면 된다.
예를 들어 utf8mb4 테이블의 varchar(32) 컬럼의 길이를 변경하려면 lock 없이 변경할 수 있는 최대 길이는 63이다.(255 / 4)
alter table tbl_name MODIFY col varchar(63);
lock 걸릴지 두렵다면 아래와 같이 algorithm을 inplace로 지정해주자. DDL이 online 상에서 변경되지 못할 경우 에러난다.
alter table tbl_name ALGORITHM=INPLACE MODIFY col varchar(63);
위 내용은 길이 한정 내용이고 NOT NULL을 NULLABLE로 변경할 경우 당연히 lock이 발생함.
댓글 없음:
댓글 쓰기