본문 바로가기

MySQL

MySQL. 테이블 용량 관리

[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