myungseokang / blog

:kr: 궁금한 게 있으시다면 이슈를 남겨주세요 :D
https://blog.myungseokang.space/
MIT License
9 stars 1 forks source link

pt-online-schema-change 1년 사용 후기 (절망편) #19

Open utterances-bot opened 2 years ago

utterances-bot commented 2 years ago

pt-online-schema-change 1년 사용 후기 (절망편) – Myungseo Kang

Review of pt-online-schema-change in last year (despair part)

https://blog.myungseokang.dev/posts/pt-osc-review/

bmh8993 commented 2 years ago

안녕하세요. 글 잘 보고 있습니다. 명서님의 글을 읽고 일단 pt-online-schema-change를 사용해보려고 하고 있습니다!

궁금한 점이 있는데요.

  1. 블루/그린 혹은 다른 배포 방식으로 배포가 완료되는 시점과 마이그레이션이 완료되는 시점이 다를텐데 이런 문제는 어떻게 해결하고 계신가요?
  2. pt-online-schema-change를 사용하면서, alert table 쿼리가 실패한 경험은 없으셨나요? 관련해서 대응은 어떻게 하셨나요?
  3. 2번과 관련된 질문인데요! 혹시 마이그레이션 버전관리는 어떻게 하셨나요? 더불어 롤백같은 처리도.. 어떻게 하셨는지 궁금하네요
myungseokang commented 2 years ago

@bmh8993 안녕하세요. 비록 1년 가까이 지난 시점이지만 잘 보고 계셨다니, 감사합니다.

  1. 블루/그린 배포와 같이 타이밍에 의존하는 로직의 배포를 하지 않습니다. 작업을 분명히 작게 쪼갤 수 있을 것 같아요. 특정 컬럼을 추가한 뒤에, 해당 컬럼에 값을 채우는 로직을 배포하고, 해당 로직이 다 배포된 이후에 이전 row 들에 대해 마이그레이션 한 뒤에 해당 컬럼을 사용하는 로직을 배포해볼 수 있겠네요!
  2. 실패한 적이 있습니다. 정확한 원인 파악이 어렵더라구요. metadata table lock 을 오래 잡고 있었던 걸로 파악했었는데, 그 이후로 나아가지 못하고 그 뒤로는 MySQL 내 Online DDL 이라는 기술을 사용했습니다.
  3. Django 라는 Framework 를 썼는데, django 내에서 마이그레이션에 대한 버전 관리를 할 수 있었고 Online DDL 이나 pt-osc 처럼 별도로 실행하는 경우에는 django 에서 마이그레이션을 동일하게 생성하고 적용만 따로 했었습니다. 롤백도 django 내 마이그레이션에서 rollback 시 수행할 작업을 정의할 수 있어서 그렇게 진행했습니다.