강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

moti0님의 프로필 이미지
moti0

작성한 질문수

Real MySQL 시즌 1 - Part 1

Ep.01 CHAR vs VARCHAR

1강. delete marking된 데이터의 정리 주기는 어느 정도인가요?

해결된 질문

작성

·

183

0

안녕하세요. 좋은 강의 감사드립니다.

강의 내용 중, VARCHAR타입 컬럼에 더 긴 문자열로 UPDATE 작업 시 이전 공간은 delete marking 된다고 하셨습니다.

PostgreSQL의 경우에도 비슷한 매커니즘을 사용하기 때문에 VACUUM을 사용해 단편화 문제를 해결하는 것으로 알고 있고, 찾아보니 OPTIMIZE TABLE문을 통해 비슷한 작업을 할 수 있는 것 같습니다.

PostgreSQL의 경우에는 VACUUM을 주기적으로 수동으로 해줘야 한다고 알고 있습니다만 MySQL의 경우에는 OPTIMIZE TABLE을 수동으로 해줄 필요가 있는지, 있다면 어느 정도 주기가 좋은지 궁금합니다.

답변 2

1

이성욱님의 프로필 이미지
이성욱
지식공유자

안녕하세요.

 

PostgreSQL 서버와는 달리, MySQL 서버는 데이터 페이지 공간이 부족해지는 시점에 페이지 단위로 Record Reorganize 작업을 하게 됩니다. 그래서 이 작업을 명시적으로 실행할 수 있는 방법은 optimize table 명령밖에 없는데,,, 이 작업을 굳이 명시적으로 하실 필요는 그렇게 많지 않습니다.

 

감사합니다.

moti0님의 프로필 이미지
moti0
질문자

답변 감사합니다!

 

확실히 페이지 단위로 자동으로 reorganize가 일어난다면 vacuum처럼 전체적으로 reorganize 작업이 들어가는 것 보다 명시적으로 실행할 필요가 없어 보입니다.

 

그럼 수동으로 실행하는 경우는 배치 작업으로 대량 update가 일어났을 때 optimize table을 수행해 강제로 reorganize작업을 우선하도록 할 때 정도일까요?

이성욱님의 프로필 이미지
이성욱
지식공유자

MySQL 서버에서, 대량으로 UPDATE가 발생하고 난 이후 INSERT / UPDATE / DELETE가 거의 일어나지 않고 정적으로만 사용된다라고 하면, 말씀하신 것처럼 Rebuild를 해주는 것이 좋은데,

그렇지 않고 계속 데이터 변경이 발생한다면, 말씀하신 형태는 지속 가능하기 어려움이 있어 보어요. 지금까지 Fragmentation을 매우 적극적인 방법(주기적인 optimize table)으로 정리했던 적은 거의 없었습니다. 이 작업을 위해서 주기적으로 서비스를 멈추는 점검을 걸 수도 없고요.

Fragmentation으로 인한 성능 저하가 확실히 두드러지지 않는다면, optimize table은 고민하지 않아도 되지 싶습니다. 제가 요 챕터에서 말씀드린 관점은 INSERT/UPDATE/DELETE 문장 자체의 실행 성능(레코드를 다른 위치로 복사한다거나 하는..)이지, 결과적으로 발생한 Fragmentation을 어떻게 제거할지는 주요 관점은 아니었습니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. moti0님 반갑습니다!

VARCHAR 열을 포함한 테이블에서 삭제 마킹된 데이터에 대한 정리 주기와 관련해 좋은 질문 주셨습니다. MySQL에서는 OPTIMIZE TABLE 명령어를 사용하여 데이터 페이지를 정리하고, 삭제 마킹된 공간을 최적화할 수 있습니다. PostgreSQL의 VACUUM과 개념은 비슷하지만, MySQL은 다른 GC(garbage collection)나 자동화된 정리 메커니즘이 없으므로 수동으로 조정이 필요합니다.

  • 정리 주기: OPTIMIZE TABLE은 수동으로 수행되도록 설정되어 있으며, 주기적으로 실행하는 것이 좋습니다. 일반적으로 테이블의 사용량과 데이터 업데이트 빈도에 따라 다르지만, 한 달에 한 번에서 몇 달에 한 번 정도 실행하는 것이 권장될 수 있습니다. 다만, 매우 빈번한 업데이트가 있는 경우에는 주기를 더 짧게 설정할 수도 있습니다.

  • 운영 환경 고려: 운영 중인 환경에서는 이 작업이 테이블 활성화에 영향을 미칠 수 있으므로, 사용량이 적은 시간대에 실행하는 것이 좋습니다.

  • 자동화: 백업 정책과 연계하여 정기적으로 OPTIMIZE TABLE 스크립트를 작성해두어 주기적으로 정리할 수 있도록 자동화할 수도 있습니다.

이 링크들에서 더 많은 정보를 참고하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

moti0님의 프로필 이미지
moti0

작성한 질문수

질문하기