MVCC 로 인해 수많은 row가 쌓임으로써
디스크 I/O 및 성능저하와 같은 불편함이 생길 수 있다.
이와같이 불필요한 row에 대해서 어떻게 처리할까?
Vaccum (진공청소기 )
PostgreSQL의 쓰레기 데이터를 정리 (디스크 조각 모음)
# 필요성 #
○ 데이터는 물리적으로 디스크에 저장되고 읽어서 보여주는데,
데이터를 갱신 및 삭제시에도 기존 정보가 그대로 남아있다.
즉, 갱신된 데이터가 추가됨으로써 용량이 증가한다.
○ Why?
MVCC 구현에 따른 튜플로 인해
즉, 트랜잭션을 사용하기위해 기존 데이터를 변경하지않고 보관한다.
결국 디스크 I/O로 인해 성능 저하가 나타남.
하지만 !!!
Vaccum을 실행하면 불필요한(기존) 데이터가 정리됩니다 !!!
# 효과 #
○ PostgreSQL의 모든 정보는 Pg_Catelog에 쌓이고 있는데,
튜플에 대한 정보도 가지고 있으며 그 정보를 기반으로
쿼리 플랜(Query Plan)에도 활용 (성능 향상)
○ Index 적용 조회 속도 향상을 위해 실제 지도 갱신 필요
○ 트랜잭션 ID 겹침으로 인해 오래된 자료의 손실이 발생하는 것을 방지
○ 변경 또는 삭제된 자료들이 차지 하고있는 디스크 공간 확보
# 실행 #
○ full 옵션으로 실행 시 Lock(잠김)이 걸리므로, 운영중인 DB는 사용 X
-- DB 전체 풀 실행
vacuum full analyze;
-- DB 전체 간단하게 실행
vacuum verbose analyze;
-- 해당 테이블만 간단하게 실행
vacuum analyse [테이블 명];
-- 특정 테이블만 풀 실행
vacuum full [테이블명];
○ 실행후에도 OID는 변경 X
# 청소 기준 #
○ FSM (Free Space Map)
○ 더이상 필요하지 않는 행의 정보 (사용되지 않는 용량)
○ 새로운 행이 삽입될때 DBMS는 FSM의 여유공간을 확인하여 해당 행 사용
# 참고 #
○ vaccum full 실행시 pg_class의 relfilenode 값이 변경됨
이 값은 디스크에 저장되는 파일명과 동일하며 아래 쿼리로
물리적인 파일의 위치를 찾을 수 있음.
SELECT oid, pg_relation_filepath(oid), relname, relfilenode FROM pg_class LIMIT 10;
# 기술 #
○ Vaccum Full
기본적인 동작인 공간 반환하여 삭제하는 동작에 더해서
단편화된 테이블,인덱스 를 압축 lock 모드로 수행
실시간으로 작업이 진행되고 운영되는 상황에서는 사용할 수 없음.
○ Vaccum Analyze
기본동작 + 통계 정보 갱신을위한 테이블 변동 정보수집
SELECT, INSERT만 발생되는 테이블에서는 자동수행 X
다만 MAX_AGE 수치(설정 가능) 가 넘어가면 강제 수행
○ Vaccum Freeze
오래된 txid와 현 txid가 1이라도 차이나면 기존 txid를 반환하는 명령어
이 반환된 txid는 Frozen txid 라고 함
txid를 재사용하므로 오래된 것들은 반환시켜야함
# 원리 (Normal) #
○ 다른 데이터가 저장되도록 Dead Row를 빈 공간으로 표시 (공간 감소 X)
○ 작업 시 FSM 과 VM 공간이 생긴다.
○ 여러 다른 작업들과 함께 사용가능
[FSM]
재사용 가능한 공간에 대한 정보가 갱신,
VM에는 각 블록에 대해 Dead row의 존재 여부를 표시
[VM]
인덱스 전용의 검색 성능 향상 목적
# 원리 (Full) #
○ 새 파일에 저장하는 방식
○ 앞 페이지로 rows를 이동시켜 테이블을 압축
○ 새로운 공간을 할당하여 공간 확보
○ 처리 속도가 매우 느리다.
○ Lock으로 인해 다른 작업이 불가 ( 중요 !! )
'PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 편리한 psql 명령어 정리 (0) | 2023.03.11 |
---|---|
[PostgreSQL] kill -9 session(PID) 세션 죽이기 (0) | 2023.03.09 |
repmgr (0) | 2023.02.27 |
[PostgreSQL] connection to server on socket /tmp/.s.pgsql.5432 failed connection refused 에러 해결법 (0) | 2022.09.23 |
MVCC 란? (0) | 2022.09.22 |