ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PostgreSQL VACUUM
    개발 2022. 2. 17. 20:20

    PostgreSQL 에서 delete를 이용해서 삭제를 수행하는 경우 DB 데이터 상에서는 지워지지만 스토리지 상에서는 바로 삭제하진 않는다. 삭제된 자료를 다른 트랜잭션 상에서 사용하고 있다면 그 자료가 지워져선 안되기 때문이다. 그런데 더이상 사용하지 않는 자료가 스토리지 상에 계속 남아 있다면 불필요한 공간을 차지하게 되는 문제가 생긴다.

     

    PostgreSQL 에서는 VACUUM 이라는 명령어를 통해 위와 같은 상황을 관리할 수 있는 기능을 제공한다. 영어단어 '청소기를 돌리다'는 의미와 비슷하게 VACUUM 명령어도 데이터베이스 상에 먼지처럼 남겨진 데이터를 정리할 수 있는 기능을 제공한다.

     

    VACUUM 명령어는 크게 두가지로 분리할 수 있다.

     

    VACUUM 

     

    테이블과 인덱스에서 삭제된 자료(old version row, dead row)를 정리하고 그 자리를 다른 자료가 저장될 수 있는 빈 공간으로 표시하는 작업이다. VACUUM 작업 완료후 추가한 데이터는 빈 공간으로 표시된 곳에도 넣을 수 있어 공간 절약을 할 수 있다. 그러나 물리적인 디스크 공간을 확보하는 것은 아니다. 명령어를 완료한 뒤에도 테이블이 차지하는 물리적 디스크 공간은 그대로다. 만약 테이블의 모든 자료를 삭제한 경우처럼 특수한 상황에만 디스크 공간을 확보가 가능하다.

     

    운영상황에서 사용할 수 있는 명령어다. insert, delete, update, select 작업이 이뤄질 때 같이 사용할 수 있다. 단 alter table 과는 사용할 수 없다.

     

    vacuum {table name}
    vacuum analzye {table name}

     

    VACUUM FULL

     

    물리적인 여유 공간을 확보 할 수 있는 명령어다. 해당 테이블에 유효한 자료만 따로 모아 새로운 파일에 저장하는 방식이기 때문에 삭제나 수정으로 생긴 빈공간을 정리해 디스크 공간도 확보하게 된다. 단 이 작업은 시간이 꽤 소요되며 이 작업을 할 수 있는 여유 공간이 충분해야하며 다른 작업과 함께 사용할 수는 없다. VACUUM FULL을 실행하면 다른 쿼리들은 모두 막히게 된다.

     

    운영중인 서비스에서 사용해야 한다면 트래픽이 거의 없는 밤 시간에 서버 점검표시를 켜고 사용하도록 하자.

     

    AUTOVACUUM

     

    PostgreSQL 에서는 AUTOVACUUM 이라는 데몬이 있으며 기본적으로 사용하길 권장한다. 데이터의 변경이 많은 경우(추가, 변경, 삭제) 자동으로 테이블에 대해서 ANALYZE와 VACUUM 명령을 실행해 공간을 효율적으로 사용할 수 있게 해준다.

    '개발' 카테고리의 다른 글

    golang 장단점 분석 (vs JAVA)  (0) 2022.03.10
    Flutter - Row, Column, Flexible, Expanded  (0) 2022.03.01
    PostgreSQL VACUUM  (0) 2022.02.17
    go - goroutine  (0) 2022.02.03

    댓글 0

Designed by Tistory.