2016-09-11 7 views
2

PostgreSQL 9.5에서 전체 진공을 병렬로 실행하려면 --jobs 옵션을 사용하여 데이터베이스 전체에서 vacuumdb를 수행 할 때 교착 상태 오류/실패를 찾는 방법.PostgreSQL --jobs 매개 변수를 사용할 때 진공에서 교착 상태를 찾는 방법

난 그냥 몇 가지 프로세스 번호와 테이블 이름을 얻는다면 ... 어떻게 이것을 방지하기 위해 나는 successfuly 데이터베이스를 통해 병렬로 전체 진공합니까?

답변

1

로드 중 VACUUM FULL을 완료하는 것은 매우 어려운 작업입니다. 문제는 Postgres가 테이블에서 차지하는 공간을 줄이고 있으므로 데이터 조작으로 인해 테이블 ​​공간이 방해 받는다는 것입니다. 진공 테이블

  • 잠금 액세스 :

    는이 옵션이 완전 진공을 달성하기 위해. 하지만 일부 독점 잠금을 얻는 것이 도움이되는지 확실하지 않습니다. 응용 프로그램 수준에서 테이블에 대한 액세스를 차단해야 할 수 있습니다.
  • create new table - swap (rename tables) - move data - drop original 기술을 사용하십시오. 이렇게하면 원본 테이블 아래 공간을 축소하지 않고 단순히 테이블을 놓아두면됩니다. 물론 모든 색인을 다시 작성하고 FK를 리디렉션하는 것입니다.

또 다른 질문은 다음과 같습니다. VACUUM FULL이 필요합니까? VACUUM ANALYZE은 파일 시스템의 테이블을 계약하지 않습니다. 디스크 공간에별로 제한이 없다면 그렇게 많은 것을하지 않아도됩니다.

희망이 있습니다.

+0

성능면에서 VACUUM FULL이 좋을 것이라고 생각했습니다. 데이터베이스 사용 기간이 1 개월 후 350GB 이상이고 VACUUM FULL 이후에는 240GB로 줄어들 기 때문에 업데이트와 삭제가 많아서 테이블과 인덱스에 많은 쓰레기가 있다고 생각합니다. 그리고 VACUUM FULL 크기가 더 작아지고 인덱스가 다시 생성되기 때문에 데이터베이스가 성능을 향상시킵니다. 너는 어떻게 생각하니 ...이 경우 공연으로 인해 내가해야 할 일은 무엇이겠습니까? –

+1

'VACUUM ANALYZE'는 성능면에서 필요한 모든 것을합니다. 테이블과 인덱스를 정리하고 (사용 통계를 업데이트 함) 할당 된 공간을 남겨 둡니다. 절차 후에 테이블이 이전에 할당 된 공간을 재사용하기 때문에 일정 시간 동안 테이블이 커지지 않음을 알 수 있습니다. 따라서 필자가 디스크 공간이 절실히 필요 없다면 프로덕션 환경에서 'VACUUM ANALYZE'만 수행하는 방법에 대한 조언을 구할 것입니다. 'VACUUM FULL '은 여유 디스크 공간을 제외하고는 더 이상 아무것도주지 않습니다. –