PostgreSQL이 적극적으로 데이터베이스를 자동 진공 청소기로 청소하려고합니다. 현재 다음과 같이 자동 진공을 구성했습니다.
- autovacuum_vacuum_cost_delay = 0 # 비용 기반 진공 끄기
- autovacuum_vacuum_cost_limit = 10000 # 최대 값
- autovacuum_vacuum_threshold = 50 # 기본값
- autovacuum_vacuum_scale_factor = 0.2 # 기본 값
데이터베이스가로드되지 않은 경우에만 자동 진공이 시작되므로 라이브 튜플보다 죽은 튜플이 훨씬 많은 상황에 처하게됩니다. 예제는 첨부 된 스크린 샷을 참조하십시오. 테이블 중 하나에는 23 개의 라이브 튜플이 있지만 진공을 기다리는 16845 개의 죽은 튜플이 있습니다. 미쳤다!
테스트 실행이 완료되고 데이터베이스 서버가 유휴 상태 일 때 자동 진공이 시작됩니다. 데이터베이스가 종료되었으므로 죽은 튜플의 수가 20 % 라이브 튜플 + 50을 초과 할 때마다 자동 진공을 시작하기를 원하지 않습니다. 구성되었습니다. 서버가 유휴 상태 일 때 자동 진공 처리는 나에게 쓸모가 없습니다. 프로덕션 서버는 지속적으로 1000 초 / 초의 업데이트를받을 것으로 예상되므로 서버가로드 상태 일 때도 자동 진공을 실행해야합니다.
내가 놓친 것이 있습니까? 서버가 과부하 상태 일 때 자동 진공을 강제로 실행하려면 어떻게합니까?
최신 정보
이것이 잠금 문제 일 수 있습니까? 해당 테이블은 삽입 후 트리거를 통해 채워지는 요약 테이블입니다. 이 테이블은 SHARE ROW EXCLUSIVE 모드에서 잠기므로 동일한 행에 동시 쓰기를 방지 할 수 있습니다.