DB & AWS Knowledge
Vacuum 목적 및 종류 본문
이 페이지에서는 Vacuum 의 목적과 종류, 기타 파라미터에 대해서 다룬다.
참고자료 및 사진출처
https://www.postgresql.org/docs/9.4/sql-vacuum.html)
https://www.slideshare.net/masahikosawada98/inside-vacuum?from_action=save
아래의 내용을 확인 전 아래의 페이지를 먼저 숙지하고 오면 좋다.
2021.04.16 - [PostgreSQL/아키텍처 및 내부 구조] - PostgreSQL / PPAS DB Age
Vacuum 목적
Vacuum 은 크게 2가지의 목적을 가진다.
- DML 로 인하여 사용된 데이터 블록을 다시 사용 할 수 있도록 회수 및 단편화 제거 (Garbage Collect)
- Transaction ID 회수
Vacuum 유형
Vacuum 은 크게 일반 Vacuum 과 Vacuum Full 로 나뉜다.
일반 Vacuum 은 update, delete 로 인하여 갱신이 되어서 더이상 사용되지 않는 블록 및 트랜잭션 ID 를 회수하나 단편화로 발생한 블록들까지 회수 및 정리 하진 않는다. Vacuum Full 은 위의 Vacuum 에 단편화 블록까지 정리한다. 단, 이 기능은 대상 테이블 전체를 Lock 하므로 주의가 필요하다.
추가로 Analyze 명령어를 쓰면 테이블 통계수치도 갱신을 해준다.
이를 위의 Vacuum 종류에 근거하여 수동 Vacuum 및 Autovacuum 을 수행 및 설정 할 수 있다.
- 수동 Vacuum
말 그대로 유저가 명령어를 통하여 수행하는 작업이다.
- autovacuum
autovacuum 프로세스는 위의 Vacuum + Analyze 를 같이 정기적으로 자동 수행 해 주는 프로세스다.
postgresql.cnf 에서 이에 대한 설정, 주기등을 조절 할 수 있다. 이와 관련된 대표적인 파라미터는 아래와 같다.
vacuum_freeze_min_age
PostgreSQL 은 약 40억개의 트랜잭션을 배정 할 수 있는데 이미 배정되어 보관이 필요한 영역과 차후 새로 배정받을 영역을 절반씩으로 나누는 기준인 FrozenXID 를 설정하게 된다. Vacuum 이 이 기능을 수행하는데, 해당 파라미터를 통하여 얼마나 트랜잭션들을 보관하고 남은 트랜잭션을 배정할 트랜잭션으로 남길지 설정 할 수 있다.
작을 수록 더 많은 진행 예정인 트랜잭션을 배정 할 수 있고, 클 수록 더 많은 트랜잭션을 보관 할 수 있다.
vacuum_freeze_table_age
테이블 단위로 특정 age 에 도달하면 이를 FrozenXID 로 기준을 삼아 테이블 vacuum 을 수행한다. 기본값은 12버전 기준 1억 5천이다.
autovacuum
autovacuum 을 on off 설정하는 파라미터다.
autovacuum_max_workers (integer)
autovacuum 은 프로세스로써 복수개로 작동되도록 설정 할 수 있다. 몇개의 프로세스를 사용 할 지 설정하는 값이다.
autovacuum_freeze_max_age (integer)
수동으로 vacuum 을 수행하지 않더라도 설정 값 이상으로 age 가 상승하면 자동으로 vacuum 이 수행되게 하는 파라미터다.
그외의 기타 파라미터는 아래의 링크를 확인한다.
postgresql.kr/docs/9.4/runtime-config-client.html#GUC-VACUUM-FREEZE-MIN-AGE (vacuum 으로 검색)
postgresql.kr/docs/9.4/runtime-config-autovacuum.html#GUC-AUTOVACUUM-FREEZE-MAX-AGE
'PostgreSQL > Vacuum' 카테고리의 다른 글
Vacuum 예시 (0) | 2021.03.08 |
---|