728x90
PostgreSQL 을 사용하면서 처음 알게 된건데 테이블을 업데이트 할때 아래처럼 동작한다고 합니다.
* FSM : FreeSpaceMap (사용 가능한 공간 지도)
* PostgreSQL에서는 record 대신 Tuple이라는 용어를 사용
- FSM에 사용 가능한 공간이 있는지 확인, 없으면 FSM을 추가 확보
- FSM의 사용 가능한 공간에 update된 데이터를 기록 (insert처럼 동작)
- update된 데이터의 저장이 완료되면 update 이전의 원본 Tuple을 가리키던 포인터를 새로 update된 Tuple을 가리키도록 변경
위처럼 동작하게되면서 기존원본 데이터는 쓸모없게 되는데 이를 죽은 데이터라는 의미로 Dead Tuple 라고 합니다.
Dead Tuple 은 테이블 공간을 비효율적으로 사용하게 만들어 디스크 사용률을 증가시키고 쿼리성능에도 악영향을 미칩니다.이 Dead Tuple 을 정리해 주는 명령이 Vacuum 입니다.
Vacuum 의 주요 동작은 Dead Tuple을 정리와 Trasaction ID Wraparound 방지 입니다.
* Vacuum 의 종류
Vacuum : 삭제나 업데이트된 이전 데이터를 삭제하는 기본 Vacuum 입니다.
Vacuum Full : 삭제나 업데이트된 이전 데이터를 삭제하고 디스크 공간까지 반환합니다. Table 전체에 Lock을 걸기 때문에 운영중에 실행하면 안됩니다.
Auto Vacuum : 내부 알고리즘으로 필요에 따라 자동으로 실행되는 Vacuum 입니다.
* 사용하는 방법
-- DB 전체 full vacuum
vacuum full analyze;
-- DB 전체 간단하게 실행
vacuum verbose analyze;
-- 해당 테이블만 간단하게 실행
vacuum analyze [테이블 명];
-- 특정 테이블만 full vacuum
vacuum full [테이블 명];
참조
https://techblog.woowahan.com/9478/
728x90
'DB' 카테고리의 다른 글
[DB/PostgreSQL] 병렬쿼리 (Parallel Query) (0) | 2023.10.16 |
---|---|
[DB/PostgreSQL] 모니터링을 위한 쿼리문 모음 (0) | 2023.10.16 |
[DB/PostgreSQL] Session Kill (0) | 2023.10.06 |
[DB/PostgreSQL] temporary table 사용량 확인 (0) | 2023.10.06 |
[DB/PostgreSQL] 지정 시간 동안 수행된 쿼리 확인 (0) | 2023.10.06 |