잠시만 기다려 주세요

     '바다아이 사이트는 윤석열 정부 탄핵을 지지합니다.'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (16)  |  여러가지 팁 (1059)  |  추천 및 재미 (156)  |  자료실 (22)  |  
시사, 이슈, 칼럼, 평론, 비평 (613)  |  끄적거림 (136)  |  문예 창작 (716)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    postgresql

postgresql - PostgreSQL Vacuum #Optimization 최적화 베큠
이 름 : 바다아이   |   조회수 : 12703         짧은 주소 : https://www.bada-ie.com/su/?651591793447

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 및 Upadte 등 새로운 행을 추가할 경우 FSM영역에서 검색하여 새로운 데이터를 저장할 수 있는 적당한 크기의 행이 발견되면, 그곳을 재사용하게 한다.

아래 그림, 참고.

이렇케 함으로써, 테이블의 물리적인 영역이 비대해지는 것을 막을 수 있고, DB 성능향상에도 도움이 된다.




 

Vacuumdb Command 활용

  • vacuum 실행하는 클라이언트 명령어인 vacuumdb를 활용하여 주기적으로 정리할 때 활용할 수 있다.
  • vacuumdb명령어
[hclee@daisydb ~]$ vacuumdb --help
vacuumdb 프로그램은 PostgreSQL 데이터베이스 자료 정리 및
퀴리 최적화기의 참고 자료를 갱신합니다.
 
사용법:
  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 실행이 되게 되어 있다.
    • 서버에서 확인
      • daisydb=# show autovacuum;
         autovacuum
        ------------
         on
        (1 row)
  • postgresql.conf 내 AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------
#autovacuum = on                        # Enable autovacuum subprocess?  'on'  ## PostgreSQL 9.x 부터는 default로 활성화된 상태임
                                        # requires track_counts to also be on.
#log_autovacuum_min_duration = -1       # -1 disables, 0 logs all actions and   ## 0면  autovacuum 일어날때마다 로그 남기고,
                                        # their durations, > 0 logs only           200ms 설정하면 200ms 이상 걸려 실행되는
                                        # actions running at least this number
                                        # of milliseconds.
#autovacuum_max_workers = 3             # max number of autovacuum subprocesses
                                        # (change requires restart)
#autovacuum_naptime = 1min              # time between autovacuum runs     ## 실행 주기.. 1min 넘 짧네..
#autovacuum_vacuum_threshold = 50       # min number of row updates before ## vacuum 작업시 최소 갯수.. 1000이상으로 늘려도 됨
                                        # vacuum
#autovacuum_analyze_threshold = 50      # min number of row updates before ## 마찬가지 500이상
                                        # analyze
#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
                                        # (change requires restart)
#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


서비스 및 서버의 성격에 맞게 미리 지정된 디폴트 값들을 변경하여 적용해서 효과적으로 사용할 필요가 있다.


출처 :
http://hochul.net/blog/postgresql-vacuum-optimization/

 
| |





      1 page / 2 page
번 호 카테고리 제 목 이름 조회수
45 postgresql postgresql ... postgresql 14 .. postgresql.conf port 5432 .. 바다아이 1135
44 postgresql , count(*) .... 바다아이 7480
43 postgresql How to do an update + join in PostgreSQL?, 바다아이 6633
42 postgresql sequence(퀀) 바다아이 8662
41 postgresql , , , index create, , 바다아이 8864
40 postgresql postgresql log_timezone .... 바다아이 7147
39 postgresql postgresql SEQUENCE reset .... 바다아이 8968
38 postgresql [PostgreSql] WITH , , Operator 바다아이 8309
37 postgresql postgresql for, foreach , 바다아이 9955
36 postgresql postgresql , , into ... 바다아이 9991
35 postgresql postgresql PL/pgSQL - SQL Procedural Language, , 바다아이 11416
34 postgresql postgresql ... .. , , 바다아이 12667
33 postgresql postgresql CSV export/import 바다아이 9103
32 postgresql postgresql tablespace , .... 바다아이 13834
31 postgresql postgresql 10 partitioning, ... , ... 바다아이 9850
30 postgresql Using PostgreSQL Arrays, ... ... 바다아이 9849
29 postgresql PostgreSQL (TRIGGER) (function) 바다아이 9576
28 postgresql Optimize and Improve PostgreSQL Performance with VACUUM, ANALYZE, and REINDEX 바다아이 10249
27 postgresql postgresql tuple . vacuumdb .. , . 바다아이 9643
26 postgresql postgresql , .. 바다아이 9865
25 postgresql postgresql , size, 바다아이 11966
24 postgresql postgresql , , .... 바다아이 8857
23 postgresql PostgreSQL Replication, , , master, slave 바다아이 11674
22 postgresql postgresql case 바다아이 8717
21 postgresql postgresql with 바다아이 9169
20 postgresql postgresql , , string 바다아이 12489
19 postgresql Postgresql partitioning table , , , 바다아이 9693
18 postgresql PostgreSQL 바다아이 11170
17 postgresql postgresql vacuumdb, psql, pg_dump password crontab , pgpass 바다아이 11020
16 postgresql postgresql sequence 퀀 auto_increment . 바다아이 10278
| |









Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천  실행시간 : 0.06274
to webmaster... gogo sea. gogo sea.