-이름
VACUUM 쓰레기 수집기 / 선택적으로 데이터베이스 분석하기
-개요
VACUUM [FULL] [FREEZE] [VERBOSE] [ table]
VACUUM [FULL] [FREEZE] [VERBOSE] ANALYZE [ table [ (column [, ...] ) ] ]
-설명
VACUUM 은 삭제된 tuple들이 차지하고 있는 공간을 반환합니다. 보통의 PostgreSQL 작업에서 삭제되거나 update에 의해 쓸모 없어진 tuple들은 테이블에서 물리적으로는 삭제되지 않고 VACUUM이 실행될 때까지 남아있습니다. 그러므로 VACUUM은 주기적으로 실행되어야 하며, 자주 업데이트 되는 테이블들의 경우는 더 그렇습니다.
매개변수 없이 VACUUM을 실행하면, 현재 데이터베이스의 모든 테이블에 대해서 실행합니다. 그리고 table을 매개변수로 지정하면 해당 테이블에 대해서만 실행됩니다.
VACUUM ANALYZE 는 먼저 VACUUM하고, 그 테이블을 ANALYZE합니다. ANALYZE는 해당 영문글 참조.
FULL 옵션 없이 VACUUM을 실행하면 단순히 점유되고 있던 공간은 반환하고, 다시 사용할 수 있도록 합니다. 이 작업은 테이블을 읽고 쓰는 일반적인 작업과 동시에 진행할 수 있으며, 독점적인 잠금은 포함되지 않습니다. VACUUM FULL는 각 테이블이 더 작은 수의 디스크 블럭을 유지하도록 하기 위해 tupte를 옮기는 등의 더 많은 작업을 하게 됩니다. 당연히 더 느리게 실행되며, 실행되는 동안 table에 독점적인 잠금을 겁니다.
-매개 변수
FULL
더 많은 공간을 확보하려면 FULL을 사용하시오. 그러나 더 오래 걸리고, 독점적인 잠금을 테이블에 걸게 됩니다.
FREEZE
freezing, age 등의 개념이 뭔지 잘 모르기 때문에 패스 패스 ㅜ.ㅜ
VERBOSE
각 테이블에 대한 상세한 vacuum 동작의 보고를 해 줍니다.
table
vacuum을 실행할 테이블을 지정하게 되고, 기본적으로 현재 데이터베이스의 모든 테이블이 기본값입니다.
column
analyze할 열을 지정합니다. 기본값은 모든 열입니다.
-출력
VERBOSE가 매개변수를 지정되면, VACUUM은 실행에 따른 메시지들을 출력합니다.
- 주의 사항
VACUUM은 트랜잭션 구간내에서 실행될 수 없습니다.
실제 상황에서는 거의 매일 밤 VACUUM을 실행하는 것을 추천합니다. 많은 수의 열을 지우고 더하고 난 뒤에는 해당 테이블에 대하여 VACUUM ANALYZE를 실행하는 것이 좋습니다. 이것은 모든 최근 변환에 대한 결과를 system catalog에 업데이트해서 PostgreSQL query planner 가 planning queries를 할 수 있도록 합니다.( PostgresQL query planner는 또 뭐죠ㅜㅜ )
FULL 매개변수는 일상적으로 사용되지는 않지만 특별한 상황에서는 유용할 수 있습니다. 그 한 예는 어떤 테이블의 거의 모든 열을 삭제하고, 그 테이블이 더 작은 디스크 공간을 점유하도록 축소시키기 위하기를 원할 때 입니다. 보통 VACUUM FULL이 점유한 공간을 더 축소시켜줍니다. FULL 옵션은 인덱스들을 축소시켜주지는 않습니다. 주기적으로 REINDEX를 실행시켜 주는 것이 좋습니다. 사실, 모든 인덱스들을 삭제하고, VACUUM FULL을 실행한 다음, 인덱스를 다시 만드는 것이 빠를 때가 있습니다.
VACUUM은 실질적인 I/O 트래픽을 증가시키고, 실행되고 있는 다는 세션들의 성능을 저하시킬 수 있습니다. 그러므로 비용 기반의 vaccum 지연 특징들을 사용하는 것이 좋습니다. Section 17.4.4 를 보라네요.
그리고 autovacuum을 사용할 수 있습니다. 더 자세한 정보는 Section 22.1을 보라네요.
'Database ( DB ) > Database' 카테고리의 다른 글
postgresql 8.1.4(8.3.1) install (0) | 2019.08.05 |
---|---|
postgresql 외부 접속 (0) | 2019.08.05 |
How to Fix “An old version of the database format was found” While Starting PostgreSQL (0) | 2019.08.05 |
mysql drop table, create table (with auto_increment) (0) | 2019.08.04 |
mysql unix time (0) | 2019.08.04 |