[MySQL] Online DDL

Ericamoyed·2022년 3월 24일
0

개발한장

목록 보기
13/22
post-thumbnail

별건 아니고 DB 작업하다가 문득 예전에 찾아봤던건데 기억도 안나고 호기심이 다시 들어서 찾아보고 이번엔 안까먹으려고 기록해두는거.
MySQL 5.7에서
Add Column 하는데
online DDL 안쓰고 gh-ost 를 쓴다 (옛날에는 percona 썼던걸로 기억)
그래서 왜쓰지? 왜 online DDL 안쓰지? 하고 찾아본 기록.

결론은 online DDL 알고리즘 COPY 방식 아니고 IN-PLACE라 추가하려는 컬럼이 AI 아니면 Concurrent DML 지원해서 괜찮긴 한데 (COPY는 Concurrent DML 미지원, SELECT만 가능)

  • 중간에 속도 조절 안되고
  • 롤백되면 골치아프고
  • 메타락 잠깐 잡힐수도 있고
  • 뭐 등등..

여튼 일시정지같은게 안되고, 완료되면 지혼자 갑자기 메타락 잡고 이런 이래저래 건들 때문에 gh-ost 같이 중간에 일시정지도 되고 복제 속도도 유동적으로 조절할 수 있는 툴을 쓰는거란다.
아. 그리고 나는 in-place면 리빌드테이블이 안되는건가? 했는데, 두개는 별개의 필드로
add column의 경우에는 in-place이면서 리빌드테이블이 된다고 한다.
즉 I/O나 CPU 사용량이 어마어마할 수 있다는거. (그만큼 롤백되면 골치아프겠지)
아 그리고 in-place 신기한거 하나 더는, 마스터 작업이 완료된 다음에 slave로 전파하는 방식이란다. 읭? 그러면 마스터에만 컬럼이 있고, slave에는 컬럼이 없는 순간이 있다는건가? 순간적으로라도 그럴수 있다는건가

근데 신기한게, gh-ost 보니까 알고리즘이 in-place보다는 copy에 가깝다. 얘도 결국 gh-ost 내부에 temp table에 컬럼이 추가된 원본 테이블 복제하고, 다 되면 rename 치는 방식.

결론은 MySQL 8 은 instant add column이 가능해서 8로 업데이트하면 툴 안써도 될까? 싶었는데 얘도 한계가 있는데 젤 끝 컬럼 추가만 instant로 가능하고 before이나 after 써서 중간에 컬럼추가 하고싶으면 결국 테이블 리빌드가 필요해서 in-place로 동작한다고 한다. 근데 젤 끝 컬럼추가는 테이블 리빌드도 안한다고 표기되있는게 신기. 컬럼추간데 어케 리빌드 안하는거지.

여튼 담엔 기억하자구 >ㅁ<

참고문서

profile
꿈많은 개발자, 일상 기록을 곁들인

0개의 댓글