서버관리 삽질 기록

MySQL에서 대량의 row 삭제 후 최적화

ForceCore 2025. 1. 14. 10:38

나는 MySQL 내부 작동 원리는 잘 모르겠다. 어떤 식으로 되는지 정확히는 모르겠지만 대량의 row를 삭제 (이동...) 후에는 index나, 디스크 사용량이 여전히 미반영임. lazy-deletion에 가깝게 구현된 듯 하다. 이럴 때 compaction을 하려면

 

OPTIMIZE TABLE your_table_name;

 

명령어를 쓰면 된다.

1. 디스크 공간 회수

2. index 재구성

3. Data file defragment

 

mysql 버전마다 다른데 이 작업은 MySQL 5.6.17 이후부터는 online 작업이라서 다른 클라이언트들이 테이블에 읽고 쓰는 작업을 optimize작업이 진행중인 도중에 수행할 수 있다.