2. DBMS이야기/01. PostgreSQL

[postgreSQL] vacuum 이란

OSSW(Open Source System SoftWare 2014. 7. 22. 20:32


Vacuum 이란 ?


Vacuum 은 PostgreSQL 에서만 (다른 RDBMS 없는) 고유 명령이다.

PostgreSQL에서 특정 Row 업데이트  경우디스크 상의 해당 Row 물리적으로 업데이트하여 사용하지 않고새로운 영역을 할당해 쓴다


Update 또는 Delete 가 된 후해당영역이 자동으로 재사용되거나 사라지지 않는다

이렇게 오래된 영역을 재사용하거나 정리해주는 명령어가 Vacuum 이다.

따라서 Update, Delete, Insert 가 많이 일어나는 DB 의 경우는 Vacuum 을 주기적으로 해주는 것이 좋다.



 


Vacuum 실행 구조


PostgreSQL에서는 특정 Row Update Delete 되어도물리적인 저장공간은 삭제되지 않고 남게 된다

이런 오래된  중에서 어느 곳에서도 참조되지 않는 안전하게 재사용할  있는 행을 찾아, FSM , Free Space Map 라는 메모리 공간에  위치와 크기를 기록한다

Insert  Upadte  새로운 행을 추가할 경우 FSM영역에서 검색하여 새로운 데이터를 저장할  있는 적당한 크기의 행이 발견되면그곳을 재사용하게 한다.


 

 

 

 

Vacuumdb Command 활용

·         vacuum 실행하는 클라이언트 명령어인 vacuumdb 활용하여 주기적으로 정리할  활용할  있다.

·         vacuumdb명령어

 

 

 

사용법:

  vacuumdb [옵션]... [DB이름]

 

옵션들:

  -a, --all                       모든 데이터베이스 청소

  -d, --dbname=DBNAME             DBNAME 데이터베이스 청소

  -e, --echo                      서버로 보내는 명령들을 보여줌

  -f, --full                      대청소

  -F, --freeze                     트랜잭션 정보 동결

  -q, --quiet                     어떠한 메시지도 보여주지 않음

  -t, --table='TABLE[(COLUMNS)]'  지정한 특정 테이블만 청소

  -v, --verbose                   작업내역의 자세한 출력

  -V, --version                   output version information, then exit

  -z, --analyze                   update optimizer statistics

  -Z, --analyze-only              only update optimizer statistics

  -?, --help                      show this help, then exit

 

연결 옵션들:

  -h, --host=HOSTNAME       데이터베이스 서버 호스트 또는 소켓 디렉터리

  -p, --port=PORT           데이터베이스 서버 포트

  -U, --username=USERNAME   접속할 사용자이름

  -w, --no-password         암호 프롬프트 표시  

  -W, --password            암호 프롬프트 표시함

  --maintenance-db=DBNAME   alternate maintenance database

 

 

 

·         full옵션 없이 vacuum 실행할 경우는 단순히 가능한 공간만 반환하고다시 사용할  있도록 한다.

·         반면 -f 또는–full 통해 full 옵션 실행한 경우는  영역에 tuple 옮기는  디스크 최적화 작업을 하게 된다.

따라서시간이 오래 걸리고실행되는 동안 table LOCK 걸리게 되므로 주의해서 사용해야 한다.

 옵션을 사용하면  많은 공간을 활용할  있고최적화가 된다.





 

autovacuum configuration 활용

·      PostreSQL 서버 실행시 참고하는 configuration 파일( postgresql.conf )  AUTOVACUUM PARAMETERS  지정하여 설정이 가능하다. 9.0 이상의 버전에서 부터는 해당 파라미터들이 #(disable) 되어 있어도, default 실행이 되게 되어 있다.

 

 

                  edb=# show autovacuum;

 autovacuum

------------

 on

(1 row)

 

    AUTOVACUUM PARAMETERS (postgresql.conf)

 

 

 

#---------------------------------------------------------------------------

# AUTOVACUUM PARAMETERS

#---------------------------------------------------------------------------




#vacuum_cost_delay = 0ms                  # 0-100 milliseconds

#vacuum_cost_page_hit = 1                  # 0-10000 credits

#vacuum_cost_page_miss = 10             # 0-10000 credits

#vacuum_cost_page_dirty = 20              # 0-10000 credits

#vacuum_cost_limit = 200                     # 1-10000 credits

#vacuum_defer_cleanup_age = 0           # number of xacts by which cleanup is delayed

#autovacuum = on                               # Enable autovacuum subprocess?  'on'

#log_autovacuum_min_duration = -1       # -1 disables, 0 logs all actions and

#autovacuum_max_workers = 3             # max number of autovacuum subprocesses

#autovacuum_naptime = 1min                # time between autovacuum runs

#autovacuum_vacuum_threshold = 50       # min number of row updates before

                                                          # vacuum

#autovacuum_analyze_threshold = 50      # min number of row updates before

#autovacuum_vacuum_scale_factor = 0.2   # fraction of table size before vacuum

#autovacuum_analyze_scale_factor = 0.1  # fraction of table size before analyze

#autovacuum_freeze_max_age = 200000000  # maximum XID age before forced vacuum

#autovacuum_vacuum_cost_delay = 20ms    # default vacuum cost delay for

                                                              # autovacuum, in milliseconds;

                                                              # -1 means use vacuum_cost_delay

#autovacuum_vacuum_cost_limit = -1          # default vacuum cost limit for

                                                              # autovacuum, -1 means use

                                                              # vacuum_cost_limit

#vacuum_freeze_min_age = 50000000

#vacuum_freeze_table_age = 150000000




posted by 김득은