[1. 개요]
운영중인 MySQL 서버에서 디스크 용량이 부족할 경우 조치 할 수 있는 방법을 정리한다.
- 테이블을 DROP 하거나 TRUNCATE
- 테이블에 파티션이 설정 된 경우, 사용하지 않는 파티션을 TRUNCATE
- DELETE 쿼리 수행 후 OPTIMIZE
- 필요한 데이터만을 table dump 후 재복구
[2. DROP / TRUNCATE]
가장 단순한 방법으로 테이블 자체를 삭제하거나 데이터를 테이블에서 전부 제거하면 된다.
단, 모든 데이터가 삭제되므로 앞으로 절대 사용 할 일이 없는 테이블(혹은 백업되있는) 을 대상으로만 진행하도록 한다.
- DROP TABLE 'any_table'
- TRUNCATE TABLE 'any_table'
[3. PARTITON]
테이블 생성 시 파티션을 같이 설정한 경우, 파티션을 truncate 하여 table 의 용량을 확보 할 수 있다.
- ALTER TABLE 'any_table' TRUNCATE PARTITION 'partition_1', 'partition_2';
DROP 보다는 TRUNCATE 사용이 더 적절하다고 생각한다.
- parition 잘못 제거 시, 해당 partition 을 다시 복구하기 힘들기 때문이다.
- 순서 상 MAX Partition 전에 오는 partition 을 DROP 할 시, 해당 partition 을 복구하려면
- 그 특성 상, 테이블을 처음 부터 다시 만들어야 하기 때문이다.
[4. DELETE, OPTIMIZE]
DELETE Query 를 이용해서 테이블에서 필요없는 행을 제거하면 제거 된 행 만큼 디스크 용량이 확보 되지 않는다.
아마 성능을 위해서 DELETE 전 테이블이 점유하는 디스크를 해제하지 않고,
새로운 insert 구문 시 이 데이터를 이전에 해제하지 않은 디스크에 작성하기 때문이다.
DELETE 후 OPTIMZE 하여 테이블을 관리하는 파일의 물리적인 크기를 줄여야 한다.
- OPTIMIZE 'any_table'
단, OPTIMZE 는 기존 파일을 이용하여 만들기 때문에,
MySQL 설정 상 datadir 에서 사용 가능한 디스크가 부족한 경우 실패할 수 있다.
[5. DBDump]
용량을 확보 할 table 의 dump 를 다른 디스크에 저장하고,
현재 table 을 TRUNCATE 한 뒤,
dump 파일을 mysql 에 복구 시키도록 한다.
dump 생성 시 옵션이 좀 많음...
[6. 결론]
테이블 생성 시 가급적 파티션을 반드시 설정하는 것이 필요하다.
partition 을 truncate 하는게 성능 상이나 작업 위험성에서 가장 낫기 때문이다.
'MySQL' 카테고리의 다른 글
[mysql] UPDATE vs REPLACE (1) | 2024.04.03 |
---|---|
[작성해야 됨] mysql. 유용한 함수 (0) | 2024.02.22 |
MySQL. unique key (0) | 2023.06.22 |
MySQL, innodb_autoinc_lock_mode (0) | 2023.06.21 |
MySQL, SQL_SAFE_UPDATES (0) | 2023.06.15 |