Innovating today, leading tomorrow

OpenSQL_Technical Guide
[OpenSQL] Vacuum (SQL)

[OpenSQL] Vacuum (SQL)

Vacuum

Synopsis

VACUUM [ ( option [, …] ) ] [ table_and_columns [, …] ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ table_and_columns [, …] ]

where option can be one of:

FULL [ boolean ]
FREEZE [ boolean ]
VERBOSE [ boolean ]
ANALYZE [ boolean ]
DISABLE_PAGE_SKIPPING [ boolean ]
SKIP_LOCKED [ boolean ]
INDEX_CLEANUP { AUTO | ON | OFF }
PROCESS_TOAST [ boolean ]
TRUNCATE [ boolean ]
PARALLEL integer

and table_and_columns is:

table_name [ ( column_name [, ...] ) ]

Description

vacuum 작업은 데드 튜플이 차지하는 스토리지를 회수합니다.
정상적인 PostgreSQL 운영 중 업데이트에 의해 삭제되거나 사용되지 않는 튜플은 해당 테이블에서 물리적으로 제거되지 않고 Vacuum 작업을 하기 전까지 존재하게 됩니다.

따라서 자주 업데이트되는 테이블은 주기적으로 Vacuum을 수행해야 합니다.
table_and_columns( 위 목차의 Synopsis 에서 ) 목록이 없으면 Vacuum 프로세스는 Vacuum 을 수행할 수 있는 권한을 가진 현재 유저의 현재 데이터베이스의 모든 테이블과 구체화 뷰를 처리합니다.

Vacuum Analyze 는 선택한 각 테이블에 대해 Vacuum 을 수행한 다음 Analyze 를 수행합니다.
일반 Vacuum 작업은 단순히 공간을 회수하여 재사용할 수 있도록 합니다.
해당 명령은 Exclusive Lock 을 얻지 못하므로 테이블의 일반적인 Read 및 Write 와 병렬로 동작할 수 있습니다.

그러나 대부분의 경우 테이블 내부 여분의 공간은 운영 체제에 반환되지 않고 동일한 테이블 내에서 재사용할 수 있도록 유지됩니다.
또한 Index 처리를 위해 여러 CPU를 활용할 수 있습니다.

이 기능을 Parallel Vacuum 이라고 합니다.
해당 기능을 비활성화하려면 Parallel 옵션을 사용하고 Parallel Workers 를 0 으로 지정합니다.

Vacuum Full 은 테이블의 전체 내용을 여분의 공간 없이 새 디스크 파일에 다시 작성하여 사용하지 않은 공간을 운영 체제로 반환할 수 있습니다.
해당 형식은 수행이 비교적 느리며 처리되는 동안 각 테이블에 대한 Access Exclusive Lock 이 필요합니다.

옵션 목록을 괄호로 묶으면 순서에 관계없이 작성할 수 있습니다.
괄호가 없으면 위에 표시된 순서대로 옵션을 지정해야 합니다.

Parameters

  • FULL
    • Vacuum Full 을 수행하게 되면 많은 공간을 회수할 수 있지만, 일반 Vacuum 에 비해 수행 시간이 더 오래 걸리고 테이블을 독점적으로 잠그는 Exclusive Lock 이 필요합니다.
    • 해당 옵션은 테이블의 새로운 복사본을 작성하고 작업이 완료될 때까지 이전 복사본을 해제하지 않기 때문에 추가 디스크 공간도 필요합니다.
    • 일반적으로 해당 옵션은 테이블 내에서 상당량의 공간을 회수해야 하는 경우에만 사용해야 합니다.
  • FREEZE
    • FREEZE 를 지정하는 것은 vacuum_freeze_min_age 및 vacuum_freeze_table_age 파라미터를 0 으로 설정하여 Vacuum 을 수행하는 것과 같습니다.
    • 해당 옵션은 FULL 옵션이 지정된 경우 중복됩니다.
  • VERBOSE
    • 각 테이블에 대한 자세한 Vacuum 리포트를 출력합니다.
  • ANALYZE
    • 쿼리를 실행하는 가장 효율적인 방법을 결정하기 위해 Planner 가 사용하는 통계를 업데이트 합니다.
  • DISABLE_PAGE_SKIPPING
    • 일반적으로 VACUUM 수행은 Visibility Map 을 기반으로 페이지를 건너뜁니다. 모든 튜플이 고정된 것으로 알려진 페이지는 항상 건너뛸 수 있으며 모든 튜플이 모든 트랜잭션에 표시되는 것으로 알려진 페이지는 Aggressive Vacuum 을 수행할 때를 제외하고 건너뛸 수 있습니다. 또한 Aggressive Vacuum 을 수행하는 경우를 제외하고는 다른 세션에서 페이지 사용이 완료될 때까지 기다리지 않기 위해 일부 페이지를 건너뛸 수 있습니다. 이 옵션은 모든 페이지 건너뛰기 동작을 비활성화하며, Visibility Map 의 내용이 의심스러운 경우에만 사용하도록 되어 있으며, 이는 데이터베이스 손상을 유발하는 하드웨어 또는 소프트웨어 문제가 있는 경우에만 수행해야 합니다.
  • SKIP_LOCKED
    • Vacuum 작업을 시작할 때 Lock 을 즉시 할 수 없다면 기다리지 않도록 지정합니다. 이 옵션을 사용하더라도 Index 를 열 때 VACUUM 작업이 차단될 수 있습니다. 또한 VACUUM ANALYZE 는 파티션 및 일부 유형의 외부 테이블에서 샘플 행을 획득할 때 차단될 수 있습니다. 또한 VACUUM 작업은 일반적으로 지정된 파티션 테이블의 모든 파티션을 처리하지만 이 옵션을 사용하면 파티션 테이블에 충돌하는 잠금이 있는 경우 모든 파티션을 건너뜁니다.
  • INDEX_CLEANUP
    • 일반적으로 Vacuum 작업은 테이블에 데드 튜플이 거의 없을 때 Index Vacuum 을 건너뜁니다. 테이블의 모든 Index 를 처리하는 비용은 이러한 일이 발생할 때 데드 Index 튜플을 제거하는 이점을 크게 초과할 것으로 예상됩니다. 해당 옵션은 데드 튜플이 0 개보다 많은 경우 Vacuum 작업이 Index 를 처리하도록 강제하는데 사용할 수 있습니다. 기본 값은 AUTO 입니다. INDEX_CLEANUP 이 ON 으로 설정된 경우 Vacuum 작업은 Index 에 모든 데드 튜플을 보수적으로 제거합니다. INDEX_CLEANUP 을 OFF 로 설정하면 테이블에 데드 튜플이 많은 경우에도 Vacuum 작업이 항상 Index Vacuum 을 건너뛰도록할 수 있습니다. 해당 옵션은 Index 가 없는 테이블에는 적용되지 않으며 FULL 옵션이 사용된 경우엔 무시됩니다.
  • PROCESS_TOAST
    • Vacuum 작업이 각 관계에 해당하는 TOAST 테이블이 있는 경우 처리를 시도하도록 지정합니다. 이는 일반적으로 기본 동작입니다. 해당 옵션을 FALSE 로 설정하면 기본 관계만 Vacuum 하여 유용할 수 있습니다.
  • TRUNCATE
    • Vacuum 작업이 테이블 끝에 있는 빈 페이지를 잘라내고 잘린 페이지의 디스크 공간을 운영체제로 반환하도록 지정합니다. vacuum_truncate 옵션이 Vacuum 수행할 테이블에 대해 FALSE 로 설정되지 않은 경우 기본값입니다. 해당 옵션을 FALSE 로 설정하면 자르기에 필요한 테이블에 대한 ACCESS EXCLUSIVE LOCK 을 방지하는 데 유용할 수 있습니다. 해당 옵션은 FULL 옵션이 사용되면 무시됩니다.
  • PARALLEL
    • 백그라운드 프로세스를 사용하여 Index Vacuum 및 Index Cleanup 단계를 병렬로 수행합니다. 작업을 수행하는 데 사용되는 프로세스 수는 max_parallel_maintenance_workers 에 의해 제한된 경우 Parallel Vacuum 을 지원하는 Index 수와 같습니다. Index 크기가 min_parallel_index_scan_size 보다 큰 경우에만 Index Parallel Vacuum 이 수행될 수 있습니다. 지정된 것보다 적은 수의 프로세스 또는 프로세스가 전혀 없는 경우에도 Vacuum 이 수행될 수 있습니다. Index 당 하나의 프로세스만 사용할 수 있습니다. 따라서 테이블에 최소 2개의 Index 가 있는 경우에만 Parallel Vacuum 이 시작됩니다. 해당 옵션은 FULL 옵션과 함께 사용할 수 없습니다.

Parameters Values

  • boolean
    • 선택한 옵션을 적용하거나 적용하지 않을지 지정합니다.
    • 옵션을 활성화하려면 TRUE, ON 또는 1 을 사용합니다.
    • 옵션을 비활성화하려면 FALSE, OFF 또는 0 을 사용합니다.
    • 생략된 경우 TRUE 로 간주됩니다.
  • integer
    • 선택한 옵션에 정수 값을 지정합니다.
  • table_name
    • Vacuum 을 수행할 특정 테이블 또는 구체화 뷰의 이름을 지정합니다.
    • 지정된 테이블이 파티션 테이블인 경우 모든 하위 파티션들에 Vacuum 수행합니다.
  • column_name
    • Analyze 수행할 특정 컬럼의 이름을 지정합니다.
    • 모든 컬럼에 대한 기본값입니다.
    • 컬럼이 지정되면 ANALYZE 옵션도 지정해야 합니다.

Note

  • 테이블에 Vacuum 수행하려면 일반적으로 테이블의 소유자 또는 슈퍼유저여야 합니다. 그러나 데이터베이스 소유자는 공유 카탈로그를 제외한 데이터베이스의 모든 테이블을 Vacuum 할 수 있습니다. Vacuum 수행은 호출 사용자가 Vacuum 에 대한 권한이 없는 모든 테이블을 건너뜁니다. Vacuum 은 트랜잭션 블록 내에서 실행할 수 없습니다.
  • GIN 인덱스가 있는 테이블의 경우 VACUUM 은 보류 중인 인덱스 항목을 기본 GIN 인덱스 구조의 적절한 위치로 이동하여 보류 중인 인덱스 삽입을 완료합니다.
  • 데드 튜플을 제거하기 위해 모든 데이터베이스를 정기적으로 Vacuum 을 수행하는 것이 좋습니다. PostgreSQL에는 Vacuum 유지 관리를 자동화할 수 있는 “autovacuum” 기능이 포함되어 있습니다.
  • FULL 옵션은 일상적인 사용에는 권장되지 않지만 특별한 경우에 유용할 수 있습니다. 예를 들어 테이블에서 대부분의 행을 삭제하거나 업데이트한 경우 테이블을 물리적으로 축소하여 디스크 공간을 덜 차지하고 더 빠른 테이블 스캔을 허용하려는 경우를 들 수 있습니다. VACUUM FULL 은 일반적으로 일반 VACUUM 수행보다 더 테이블을 축소합니다.
  • PARALLEL 옵션은 오직 Vacuum 목적으로만 사용됩니다. ANALYZE 옵션과 함께 이 옵션을 지정하면 ANALYZE에 영향을 주지 않습니다.
  • VACUUM 작업은 I/O 트래픽을 크게 증가시켜 다른 활성 세션의 성능을 저하시킬 수 있습니다. 그러므로 Cost-base Vacuum Delay 기능을 사용하는 것이 좋습니다. Prallel Vacuum 의 경우 각 프로세스는 해당 프로세스가 수행한 작업에 비례하여 쉬게 됩니다.
  • FULL 옵션 없이 VACUUM을 실행하는 각 백엔드는 pg_stat_progress_vacuum 뷰에서 진행 상황을 리포트합니다. VACUUM FULL을 실행하는 백엔드는 pg_stat_progress_cluster 뷰에서 진행 상황을 리포트합니다.

지금까지 ‘PostgreSQL Vacuum (SQL)’에 관해 알아보았습니다

‘PostgreSQL의 Replication’을 바로 이어서 확인해보세요!

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •