2013-10-22 3 views
5

우분투에서 PostgreSQL 9.2를 실행하고 있습니다. 자동 진공 처리 프로세스가 서버에서 실행 중입니다.프로세스가 실행 중이지만 postgresql autovacuum이 작동하지 않습니다.

데이터베이스의 부하가 높고 추가 용량이 1000이고 삭제 횟수가 100인데 자동 진공이 작동하지 않는 것 같습니다.

로그에는 진공과 관련이 없습니다. 이렇게

ps -ef | grep -i vacuum

는 생산 : postgres 1406 1130 0 Oct13 00:00:14 postgres: autovacuum launcher process

더 마지막 자동 진공 열에서 기록하고 suto_analyze 열에서 2 개 져야 할 엔트리를 생성하지 쿼리 SELECT last_autovacuum , last_autoanalyze FROM pg_stat_user_tables;를 실행합니다.

는 postgresql.conf의 관련 부분은 다음과 같습니다

#------------------------------------------------------------------------------ 
# AUTOVACUUM PARAMETERS 
#------------------------------------------------------------------------------ 

autovacuum = on   # Enable autovacuum subprocess? 'on' 
        # requires track_counts to also be on. 
log_autovacuum_min_duration = 250 # -1 disables, 0 logs all actions and 
        # their durations, > 0 logs only 
        # 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 
autovacuum_vacuum_threshold = 128 # min number of row updates before 
        # vacuum 
autovacuum_analyze_threshold = 128 # min number of row updates before 
        # 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 

어떤 생각?

+0

는 http://www.postgresql.org/docs/9.2/static/monitoring-stats.html last_autovacuum보기 악마. 나는 그것이 자동 습격을 끝내는 timestemp다고 생각한다. 데몬이 높은로드를 생성하는 경우라면 어쨌든 실행할 수 있습니다. SQL 명령으로 명령 줄에서 진공을 실행하여 각 테이블에서 진공이 얼마나 오래 실행되는지 확인하십시오. –

+0

"1000 개의 추가 및 100 개의 삭제"가 그다지 많은 활동이 아닙니다. 테이블에 부풀어 오르고 있습니까? n_dead_tup은 진공 청소기로 청소하는 것이 실제로 모든 테이블에 필요한 것입니까? 어쩌면 진공 청소기로 청소하는 것이 자주 필요하지 않을 수도 있습니다. log_autovacuum_min_duration = 0으로 설정하면 로그에 더 많은 내용이 기록되지만, 제대로 작동하는지 여부를 증명하기에 충분하지 않을 수도 있습니다. suto_analyze 무엇입니까? – jjanes

답변

6

인용 된 구성에서 관련 항목은 아마도 : 1 행의 20 % 미만이되었을 경우

autovacuum_vacuum_scale_factor =이 기본으로 0.2

, 그 자동 진공 테이블을 건너 뜁니다 정상 삭제되었거나 업데이트되었습니다 (또는 autovacuum_vacuum_threshold 행보다 작지 만 여기서 128이 아니어야 함).

autovacuum_vacuum_scale_factor (부동 소수점)

는 VACUUM를 트리거할지 여부를 결정할 때 autovacuum_vacuum_threshold에 추가 할 테이블 크기의 부분을 지정합니다

documentation의 정의를 참조하십시오. 기본값은 0.2 (테이블 크기의 20 %)입니다. 이 매개 변수는 postgresql.conf 파일 또는 서버 명령 행에서만 으로 설정할 수 있습니다. 이 설정은 저장소 매개 변수를 변경하여 개별 테이블에 대해 재정의 할 수 있습니다.

기본값을 마음에 들지 않으면 자동 진공 처리가 특정 테이블을 처리하도록하려면이 매개 변수를 대소 문자를 기준으로 낮출 수 있습니다. 예를 들어 1 %에 그것을 설정하는 경우 : -이 테이블이 자동 진공으로 진공 청소기로 청소 한에서 마지막 시간을

ALTER TABLE tablename SET (autovacuum_vacuum_scale_factor=0.01);