[PostgreSQL] Vacuum 이란?
- Database(데이터베이스)
- 2022. 6. 19. 22:19
목적
Vacuum 이란?
- Vacuum 은 다른 RDBMS에 없는 PostgreSQL의 고유의 명령입니다.
- PostgreSQL에서 특정 Row를 업데이트 할 경우, 디스크 상의 해당 Row를 물리적으로 업데이트하여 사용하지 않고, 새로운 영역을 할당해 사용합니다.
- 즉, Update 나 Delete 한다고 해서 해당 영역이 자동으로 재사용되거나 사라지지 않습니다.
- 이렇게 오래된 영역을 재사용하거나 정리해주는 명령어가 Vacuum 입니다.
- shell command 상의 vacuumdb 라는 명령으로 여러가지 옵션으로 정리할 수도 있고, 서버 구동시 postgresql.conf 파일내의 AUTOVACUUM PARAMETERS 관련 옵션을 지정하여 사용할 수도 있습니다.
- PostgreSQL 9.0 부터는 Vacuum이 Default로 On 되어 있습니다.
Vacuum 실행 구조
- PostgreSQL 에서는 특정 Row 나 Update나 Delete 되어도, 물리적인 저장공잔은 삭제되지 않고 남게 됩니다.
- 이런 오랜 행 중에서도 어느 곳에서도 참조되지 않는 안전하게 재사용할 수 있는 행을 찾아, FSM 즉 Free Space Map 이라는 메모리 공간에 그 위치와 크기를 기록합니다.
- Insert 및 Update 등 새로운 행을 추가할 경우 FSM 영역에서 검색하여 새로운 데이터를 저장할 수 있는 적당한 크기의 행이 발견되면, 그곳을 재사용하게 합니다.
Vacummdb Command 활용
- Vacuum 실행하는 클라이언트 명령어인 vacuumdb를 활용하여 주기적으로 정리할 때 활용할 수 있습니다.
- vacuumdb 명령어
root@507921f450c2:/# vacuumdb --help
vacuumdb cleans and analyzes a PostgreSQL database.
Usage:
vacuumdb [OPTION]... [DBNAME]
Options:
-a, --all vacuum all databases
-d, --dbname=DBNAME database to vacuum
--disable-page-skipping disable all page-skipping behavior
-e, --echo show the commands being sent to the server
-f, --full do full vacuuming
-F, --freeze freeze row transaction information
--force-index-cleanup always remove index entries that point to dead tuples
-j, --jobs=NUM use this many concurrent connections to vacuum
--min-mxid-age=MXID_AGE minimum multixact ID age of tables to vacuum
--min-xid-age=XID_AGE minimum transaction ID age of tables to vacuum
--no-index-cleanup don't remove index entries that point to dead tuples
--no-process-toast skip the TOAST table associated with the table to vacuum
--no-truncate don't truncate empty pages at the end of the table
-P, --parallel=PARALLEL_WORKERS use this many background workers for vacuum, if available
-q, --quiet don't write any messages
--skip-locked skip relations that cannot be immediately locked
-t, --table='TABLE[(COLUMNS)]' vacuum specific table(s) only
-v, --verbose write a lot of output
-V, --version output version information, then exit
-z, --analyze update optimizer statistics
-Z, --analyze-only only update optimizer statistics; no vacuum
--analyze-in-stages only update optimizer statistics, in multiple
stages for faster results; no vacuum
-?, --help show this help, then exit
Connection options:
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port
-U, --username=USERNAME user name to connect as
-w, --no-password never prompt for password
-W, --password force password prompt
--maintenance-db=DBNAME alternate maintenance database
Read the description of the SQL command VACUUM for details.
- full 옵션 없이 vacuum 실행할 경우는 단순히 가능한 공간만 반환하고, 다시 사용할 수 있도록 합니다.
- 반면, -f 또는 -full 통해 full 옵션 실행한 경우는 빈 영역에 tuple 을 옮기는 등 디스크 최적화 작업을 하게 됩니다. 따라서, 시간이 오래 걸리고 실행되는 동안 table Lock 이 걸리게 되므로 주의해서 사용해야 합니다. 이 옵션을 사용하면 더 많은 공간을 활용할 수 있으면, 최적화가 됩니다.
728x90
'Database(데이터베이스)' 카테고리의 다른 글
[PostgreSQL] Autovacuum 최적화 (0) | 2022.06.23 |
---|---|
[PostgreSQL] VACUUM 작업 (0) | 2022.06.22 |
[PostgreSQL] pgAgent Job 등록 생성 및 등록 방법 (0) | 2022.06.22 |
[PostgreSQL] PostgreSQL Data Directory 구조 (0) | 2022.06.18 |
[PostgreSQL] PostgreSQL pgAgent 설치 방법 (0) | 2022.06.17 |
이 글을 공유하기