2022-03-22_TIL

KRyun·2022년 3월 22일
0

TIL

목록 보기
21/36

1. mysql 테이블 컬럼 추가

online ddl 알고리즘

online ddl 알고리즘

  • copy
  • inplace
  • instant (mysql 8.0)

Copy

개요

  • 변경된 스키마가 적용된 임시 테이블을 생성하여 기존 테이블의 데이터를 복사한 후 테이블 이름을 변경하는 방식

  • ALGORITHM 구문 미사용시 INPLACE -> COPY 순으로 처리됨

    INPLACE 로 처리 가능한 경우 INPLACE 를 사용하고 처리 불가능시 COPY 사용

단점

  • DDL 작업 일시중지, 작업중 I/O, CPU 사용제한 메커니즘 없음

  • 작업중 롤백이 발생할 수 있으며, 롤백시 많은 비용이 소모됨

  • ALTER TABLE 작업 동안 Concurrent DML (inserts,updates,deletes) 이 차단됨

    LOCK = SHARED 일 때 Select는 가능함

  • 복제 지연이 발생 가능성 있음

Inplace

개요

  • 원본 테이블에 직접 변경작업을 적용함

  • 작업 준비(during perparation) 실행단계(executioin pahases of the operation)에서 테이블에 대한 배타적 메다 데이터 잠금(exclusive metadata lock)이 잠깐 동안 수행될 수 있다.

  • 일반적으로 Concurrent DML 을 지원함

단점

  • 지원하지 않는 DDL 구문이 있음

    지원여부 확인을 위해 ALGORITHM=INPLACE 구문을 사용해서 확인 가능

  • 테이블을 수정하는 동안 변경된 데이터량이 innodb_online_alter_log_max_size 를 초과할 경우

    online ddl 이 실패하고 변경된 데이터는 롤백된다.

    2시간 정도 돌아가다 에러나면서 롤백되면 환장한다... (경험담)

  • 장기간 실행되는 DLL 작업은 슬레이브에서 복제 지연을 유발할 수있다.

    ALTER TABLE 작업은 마스터에서 작업이 완료되면 슬레이브로 전달된다.

  • 동시성이 높은 서버의 큰 테이블에 대해 높은 I/O 사용량을 유발할 수 있다.

Instant

개요

  • mysql 8.0 에서 추가됨

  • 메타 정보만 수정하여 변경 사항 반영

    스키마 변경중에 메타 데이터 잠금을 획득하지 않으며, 테이블의 데이터 파일도 건드리지 않는다.

  • ALGORITHM 구문 미사용시 INSTANT -> INPLACE -> COPY 순으로 처리됨

단점

  • 컬럼 추가시 테이블의 마지막 열로만 추가 가능, 컬럼 위치 지정 불가

  • ROW_FORMAT=COMPRESSED 를 사용하는 테이블에는 컬럼 추가 불가

  • FULLTEXT 인덱스를 포함하는 테이블에는 컬럼 추가 불가

  • 임시 테이블에는 컬럼 추가 불가

    임시테이블은 ALGORITHM=COPY 만 지원

  • 데이터 딕셔너리 테이블 스페이스 (공유 테이블 스페이스)에 있는 테이블에는 컬럼 추가 불가

Lock

  • 테이블에 대한 동시 엑세스 수준을 조정

  • mysql은 ddl 작업시 가능한 작은 level 의 lock을 사용한다.

    더 제한적인 감금을 적용하기 위해서 LOCK 절을 지정함

  • 특정 DDL 조작에서 허용되는 lock 레벨보다 더 적은 제한 레벨 lock을 지정하면 SQL Statement는 오류와 함께 실패한다.

  • LOCK=NONE

    Concurrent query, Concurrent DML 허용

  • LOCK=SHARED

    Concurrent query 허용, Concurrent DML 불가

  • LOCK=DEFAULT

    수행 가능한 동시성 작업에 대해서 허용

  • LOCK=EXCLUSIVE

    Concurrent query 불가, Concurrent DML 불가

    빠른 시간내에 DDL 이 완료되거나, 동시 쿼리나 DML 이 없을 경우 사용

    online ddl 단계

  • Initializaton

    Storage Engine 기능, 명령문으로 지정된 작업, 사용자 지정의 ALGORITHM 및 Lock 옵션을 고려하여

    작업에 허용가능한 옵션 결정

    테이블 정의를 보호하기 위해 가능한 Shared Upgradeable Metadata Lock 을 수행

  • Execution

    명령문이 준비되고 실행됨

    Metadata Lock의 Exclusive 여부는 Initializaton 단계에서 평가된 내역에 따라 다르며, Exclusive Metadata Lock 이 필요한 경우 Alter 문을 주비하는 동안 잠깐 수행됨

  • Commit Table Definition

    테이블의 구조가 완료됨

    Metadata Lock은 테이블 정의를 커밋하기 위해 Exclusive 로 업그레이드됨

    Exclusive Metadata Lock 은 짧은 시간동안 잡힘

2. macbook pro backtick

원화 대신 백틱 사용하기

profile
신입 개발자입니다.

0개의 댓글