이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 24.1. 일상 윈 토토 범퍼카 토토기버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

23.1. 일상 진공 범퍼카 토토기

postgresql데이터베이스가 필요합니다 로 알려진 정기 유지 보수진공 범퍼카 토토기. 많은 설치의 경우 진공 범퍼카 토토기를 수행autovacuum daemon, 에 설명 된섹션 23.1.5. 당신은 할 수 있습니다 여기에 설명 된자가 경비원 매개 변수를 조정해야합니다 상황에 대한 최상의 결과를 얻으십시오. 일부 데이터베이스 관리자는 데몬을 보충하거나 교체하려고합니다 수동으로 관리되는 활동범퍼카 토토명령, 일반적으로 일정에 따라 실행됩니다.Cron또는작업 스케줄러스크립트. 설정합니다 수동으로 관리되는 진공 범퍼카 토토기는 제대로 진공 범퍼카 토토기가 필수적입니다 다음 몇 가지 하위 섹션에서 논의 된 문제를 이해하십시오. 자동화에 의존하는 관리자는 여전히 탈지하고 싶을 수 있습니다. 그들이 이해하고 조정하는 데 도움이되는이 자료 자가 경비원.

23.1.1. 진공 범퍼카 토토기

postgresql's범퍼카 토토명령은 각 테이블을 처리해야합니다 몇 가지 이유로 정기적으로 :

  1. 업데이트 된 디스크 공간을 복구하거나 재사용하려면 삭제 된 행.

  2. PostgreSQL쿼리 플래너.

  3. |트랜잭션 ID 랩 어라운드.

이러한 각 이유는 수행을 지시합니다범퍼카 토토다양한 주파수의 작동 및 다음 하위 섹션에 설명 된 스코프.

의 두 가지 변형이 있습니다.범퍼카 토토: 기준범퍼카 토토and범퍼카 토토 Full. 범퍼카 토토 가득한더 많은 디스크 공간을 되 찾을 수 있지만 훨씬 더 많이 실행됩니다 느리게. 또한 표준 형태의범퍼카 토토생산과 병렬로 실행할 수 있습니다 데이터베이스 작업. (와 같은 명령select, 삽입, 업데이트삭제정상적으로 계속 작동합니다. 테이블의 정의를 수정할 수는 없지만 와 같은 명령으로Alter Table진공 범퍼카 토토기가있는 동안.)범퍼카 토토 가득한작동중인 테이블의 독점 잠금이 필요합니다 켜짐, 따라서 다른 사용과 병렬로 수행 할 수 없습니다. 테이블. 따라서 일반적으로 관리자는 노력해야합니다 표준 사용범퍼카 토토그리고 피하기범퍼카 토토 Full.

범퍼카 토토상당한 금액을 만듭니다 I/O 트래픽 중 다른 사람에게 성능이 저하 될 수 있습니다. 활성 세션. 할 수있는 구성 매개 변수가 있습니다 배경의 성능 영향을 줄이기 위해 조정되었습니다 진공 범퍼카 토토기 - 참조섹션 18.4.3.

23.1.2. 디스크 복구 공간

inPostgreSQL, an업데이트또는삭제의 행은 즉시 제거하지 않습니다 행의 오래된 버전. 이 접근법은 Multiversion 동시성 제어의 이점 (MVCC, 참조챕터 13) : 여전히 행 버전을 삭제해서는 안됩니다. 다른 거래에 잠재적으로 볼 수 있습니다. 그러나 결국, an 구식 또는 삭제 된 행 버전은 더 이상 관심이 없습니다. 거래. 그런 다음 차지하는 공간은 재생되어야합니다 디스크 공간의 무한한 성장을 피하기 위해 새로운 행으로 재사용 요구 사항. 이것은 실행하여 이루어집니다범퍼카 토토.

표준 형태범퍼카 토토제거 테이블 및 인덱스의 데드 행 버전 및 공간을 표시합니다. 향후 재사용에 사용할 수 있습니다. 그러나 반환되지 않습니다 특별한 경우를 제외하고 운영 체제의 공간 테이블 끝에있는 하나 이상의 페이지가 완전히 무료가됩니다. 독점 테이블 잠금을 쉽게 얻을 수 있습니다. ~ 안에 차이,범퍼카 토토 Full적극적으로 완전한 새 버전의 테이블을 작성하여 테이블을 압축합니다. 죽은 공간이없는 파일. 이것은 테이블의 크기를 최소화하고 그러나 시간이 오래 걸릴 수 있습니다. 또한 여분의 디스크 공간이 필요합니다 작업이 완료 될 때까지 테이블의 새 사본.

일상적인 진공 범퍼카 토토기의 일반적인 목표는 표준을 수행하는 것입니다범퍼카 토토필요를 피하기에 충분히 충분히범퍼카 토토 Full. Autovacuum 데몬 이런 식으로 일하려고 시도하면 실제로는 결코 발행되지 않을 것입니다범퍼카 토토 Full. 이 접근법에서 아이디어는 테이블을 최소 크기로 유지하는 것이 아니라 디스크 공간의 정상 상태 사용을 유지하십시오. 각 테이블은 점유합니다 최소 크기와 많은 공간에 해당하는 공간 진공 범퍼카 토토기 사이에 사용됩니다. 하지만범퍼카 토토 Full테이블을 다시 축소하는 데 사용할 수 있습니다 최소 크기로 디스크 공간을 작동으로 반환합니다. 시스템, 테이블이 그냥 미래에 다시 성장하십시오. 따라서 적당히 프레시트 표준범퍼카 토토실행은보다 더 나은 접근 방식입니다 드문범퍼카 토토 Full무거운 업데이트 된 테이블 유지.

일부 관리자는 진공 범퍼카 토토기 일정을 선호합니다. 예를 들어, 부하가 낮을 때 밤에 모든 작업을 수행합니다. 그만큼 고정 된 일정에 따라 진공 범퍼카 토토기에 어려움이 있습니다 테이블에 업데이트 활동이 예상치 못한 스파이크가있는 경우범퍼카 토토 가득한공간을 되찾기 위해서는 실제로 필요합니다. 사용 Autovacuum 데몬은 데몬 이후이 문제를 완화시킵니다 업데이트 활동에 대한 응답으로 동적으로 진공 범퍼카 토토기를 정리합니다. 당신이 가지고 있지 않는 한 데몬을 완전히 비활성화하는 것은 현명하지 않습니다. 매우 예측 가능한 워크로드. 가능한 타협은 데몬 매개 변수를 설정하여 반응 만 비정상적으로 무거운 업데이트 활동으로 인해 상황을 유지합니다 예정된 상태에서 손을 떼다범퍼카 토토s는 대부분의 작업을 수행 할 것으로 예상됩니다. 하중이 일반적 일 때.

autovacuum을 사용하지 않는 사람들의 경우 일반적인 접근 방식은 다음과 같습니다. 데이터베이스 전체 예약범퍼카 토토한 번 a 낮은 사용 기간 동안, 더 자주 보충됩니다 필요에 따라 무거운 업데이트 된 테이블의 진공 범퍼카 토토기. (일부 매우 높은 업데이트 속도를 가진 설치는 진공 범퍼카 토토기 진공 범퍼카 토토기입니다 몇 분마다 가장 바쁜 테이블.) 클러스터의 여러 데이터베이스, 잊지 마십시오범퍼카 토토각각; 프로그램Vacuumdb도움이 될 수 있습니다.

팁 :일반범퍼카 토토5 월 테이블에 많은 수가 포함되어있을 때 만족스럽지 않습니다. 대규모 업데이트 또는 삭제 결과 데드 행 버전 활동. 그런 테이블이 있고 되 찾아야하는 경우 과도한 디스크 공간이 차지하고 사용해야합니다범퍼카 토토 Full또는 또는 또는 대안PostgreSQL : 문서 : 9.1 : 사설 토토또는 중 하나 의 테이블에 대한 변형 변형Alter Table. 이 명령 완전히 새 테이블 사본을 다시 작성하고 새로 건축하십시오. 그것에 대한 색인. 이 모든 옵션에는 독점 잠금이 필요합니다. 또한 일시적으로 추가 디스크 공간을 사용합니다 기존이기 때문에 테이블의 크기와 거의 동일합니다. 테이블과 인덱스의 사본은 새로운 것이 완전합니다.

팁 :전체 내용의 테이블이있는 경우 정기적으로 삭제됩니다.토토 사이트 추천 : 문서 : 9.1 : Truncate사용하기보다는삭제그 이하범퍼카 토토. Truncate즉시 테이블의 전체 내용을 제거하고 후속가 필요하지 않고범퍼카 토토또는범퍼카 토토 가득한현재 사용되지 않은 디스크 공간을 되 찾으려면. 그만큼 단점은 엄격한 MVCC 의미론이라는 것입니다 위반.

23.1.3. 업데이트 플래너 통계

thePostgreSQL쿼리 플래너는 내용에 대한 통계 정보에 의존합니다 쿼리에 대한 좋은 계획을 생성하기 위해 테이블. 이것들 통계는에 의해 수집됩니다.분석명령 그 자체 또는 선택적 단계범퍼카 토토. 합리적으로하는 것이 중요합니다 정확한 통계, 그렇지 않으면 계획 선택이 열악 할 수도 있습니다 데이터베이스 성능 저하.

Autovacuum 데몬이 활성화되면 자동으로 발행됩니다분석내용이있을 때마다 명령을 내립니다 테이블의 하나는 충분히 바뀌 었습니다. 그러나 관리자 수동 예약에 의존하는 것을 선호 할 수 있습니다분석특히 알려진 경우 작동 테이블의 업데이트 활동은 통계에 영향을 미치지 않습니다. 의"흥미로운"열. 데몬 일정분석엄격하게 a 삽입 또는 업데이트 된 행 수의 기능; 그것은 없다 그것이 의미있는 통계로 이어질지 여부에 대한 지식 변화.

공간 복구를위한 진공 범퍼카 토토기와 마찬가지로 빈번한 업데이트 통계는 업데이트 된 테이블보다 더 유용합니다 거의 업데이트 된 것들. 그러나 심하게 업데이트 된 테이블의 경우에도 통계 업데이트가 필요하지 않을 수 있습니다. 데이터의 통계 분포는 크게 변하지 않습니다. 에이 간단한 규칙은 최소값과 테이블에서 열의 최대 값이 변경됩니다. 예를 들어, 에이타임 스탬프시간이 포함 된 열 행 업데이트의 최대 값은 지속적으로 증가합니다 행이 추가되고 업데이트됨에 따라; 그러한 칼럼은 아마도 필요할 것입니다 더 빈번한 통계가 포함 된 열보다 업데이트됩니다 웹 사이트에서 액세스 한 페이지의 URL. URL 열이있을 수 있습니다 변경 사항을 자주 받지만 통계 분포를받습니다 그 가치는 아마도 비교적 느리게 변할 것입니다.

실행할 수 있습니다Analyzeon 특정 테이블 및 테이블의 특정 열만 있으므로 일부 통계를 더 업데이트하기 위해 유연성이 존재합니다 응용 프로그램에 필요한 경우 다른 사람보다 자주 다른 사람보다 자주. ~ 안에 그러나 연습은 일반적으로 분석하는 것이 가장 좋습니다. 빠른 작업이기 때문에 전체 데이터베이스.분석통계적으로 임의의 샘플링을 사용합니다 모든 행을 읽지 않고 테이블의 행입니다.

팁 :콜럼 당 조정이지만분석주파수는 그리되지 않을 수 있습니다 생산적으로, 당신은 당신은 열당하는 것이 가치가 있다는 것을 알 수 있습니다 통계의 세부 수준 조정 수집분석. 열이 에 많이 사용됩니다.여기서조항 매우 불규칙한 데이터 배포가 필요할 수 있습니다 다른 열보다 더 미세한 데이터 히스토그램. 보다Alter Table Set Statistics, 또는 를 사용하여 데이터베이스 전체 기본값을 변경하십시오.default_statistics_target구성 매개 변수.

또한 기본적으로 정보가 제한되어 있습니다 함수의 선택성에 대해. 그러나 당신이 만든 경우 기능 호출을 사용하는 표현식 인덱스 기능에 대한 통계가 수집 될 것입니다 표현식을 사용하는 쿼리 계획을 크게 향상시킵니다 색인.

23.1.4. 거래 ID 방지 랩 어라운드 실패

PostgreSQL'S MVCC 거래 시맨틱은 비교할 수있는 것에 달려 있습니다 트랜잭션 ID (xid) 숫자 : 삽입 xid가 현재 트랜잭션의 XID는"에서 미래"전류에 보이지 않아야합니다 거래. 그러나 트랜잭션 ID는 크기가 제한되어 있기 때문에 (32 비트) 오랫동안 실행되는 클러스터 (40 억 이상 거래)가 고통받을 것입니다트랜잭션 ID 랩 어라운드: XID 카운터가 0으로 감싸고 모두 과거에 있었던 갑작스런 거래에서 미래 - 이는 출력이 보이지 않는다는 것을 의미합니다. ~ 안에 짧고 치명적인 데이터 손실. (실제로 데이터는 여전히 있습니다 거기에 있지만, 당신이 그것을 얻을 수 없다면 그것은 차갑습니다.) 이것을 피하십시오. 최소한 20 억 개의 거래마다 데이터베이스.

정기 진공 범퍼카 토토기가 문제를 해결하는 이유 저것PostgreSQL보유 a 특별한 xid asfrozenxid. 이 xid 일반 XID 비교 규칙을 따르지 않으며 항상 모든 정상 XID보다 오래된 것으로 간주됩니다. 정상적인 xids입니다 Modulo-2 사용 비교32산술. 이것은 의미합니다 정상적인 xid마다 20 억 개의 XID가 있습니다."구형""새로운"; 또 다른 방법입니다 정상적인 XID 공간은 엔드 포인트가없는 원형입니다. 따라서 일단 행 버전이 생성되면 특정 일반 XID, 행 버전이로 보입니다."과거"다음 두 가지 우리가 말하는 일반적인 xid에 상관없이 10 억 트랜잭션 에 대한. 행 버전이 2 개 이상 이후에도 존재하는 경우 10 억 건의 거래, 갑자기 미래. 이를 방지하려면 이전 행 버전을 재 할당해야합니다 xidfrozenxid전 언젠가 20 억 트랜잭션의 오래된 마크에 도달하십시오. 일단 그들은 이 특별한 XID를 할당하면"과거"모든 정상 거래 랩 어라운드 문제에 관계없이 그러한 행 버전은 아무리 길든 삭제 될 때까지 유효하십시오. 이것 오래된 XIDS의 재 할당범퍼카 토토.

VACUUM_FREEZE_MIN_AGEXID 값이 교체되기 전에 XID 값이 몇 살인지 제어 와 함께frozenxid. 이것의 더 큰 값 트랜잭션 정보를 더 오래 보존하는 동안 더 작은 값은 할 수있는 트랜잭션의 수를 증가시킵니다 테이블 전에 다시 진공 범퍼카 토토기를 청소해야합니다.

범퍼카 토토일반적으로 페이지를 건너 뜁니다 Dead Row 버전이 없지만 그 페이지는 여전히 오래된 XID 값이있는 행 버전이 있습니다. 모든 오래된 XID를 보장합니다 대체되었습니다frozenxid, a 전체 테이블 스캔이 필요합니다.VACUUM_FREEZE_TABLE_AGE컨트롤범퍼카 토토a 테이블이 완전히 없으면 전체 테이블 스윕이 강요됩니다. 스캔VACUUM_FREEZE_TABLE_AGE마이너스VACUUM_FREEZE_MIN_AGE거래. 0 세력으로 설정범퍼카 토토항상 모든 페이지를 효과적으로 스캔하려면 가시성지도 무시.

테이블이 바로 사용할 수있는 최대 시간은 2입니다. 10 억 거래 뺀VACUUM_FREEZE_MIN_AGE당시의 가치범퍼카 토토마지막 테이블을 스캔했습니다. 그보다 오랫동안 발행되지 않은 경우 데이터 손실 결과 할 수 있습니다. 이런 일이 발생하지 않도록 Autovacuum 보다 오래된 XID를 포함 할 수있는 모든 테이블에서 호출됩니다. 구성 매개 변수로 지정된 연령autovacuum_freeze_max_age. (Autovacuum이 비활성화되어 있어도 발생합니다.)

이것은 테이블이 진공 범퍼카 토토기가 아닌 경우, Autovacuum은 약 1 회마다 호출됩니다autovacuum_freeze_max_age마이너스VACUUM_FREEZE_MIN_AGE거래. 우주 교정을 위해 정기적으로 진공 범퍼카 토토기의 테이블 목적은 거의 중요하지 않습니다. 그러나 정적 인 경우 테이블 (인서트를받는 테이블 포함이지만 업데이트는 없습니다 또는 삭제), 우주 교정을 위해 진공 범퍼카 토토기가 필요하지 않습니다. 따라서 간격을 극대화하는 것이 유용 할 수 있습니다. 매우 큰 정적 테이블에 강제 autovacuum. 분명히 하나 증가하여 이것을 할 수 있습니다autovacuum_freeze_max_age또는 감소VACUUM_FREEZE_MIN_AGE.

유효 최대VACUUM_FREEZE_TABLE_AGEis 0.95 *autovacuum_freeze_max_age; 보다 높은 설정 그것은 최대 값으로 제한됩니다. 값보다 높은 값autovacuum_freeze_max_age그렇지 않을 것입니다 raparound autovacuum이 될 것이기 때문에 의미가 있습니다 어쨌든 그 시점에서 트리거되고 0.95 승수 잎 매뉴얼을 실행하기위한 호흡 공간범퍼카 토토그 전에 발생하기 전에. 경험상VACUUM_FREEZE_TABLE_AGE설정해야합니다 다소 아래의 가치에autovacuum_freeze_max_age, 충분한 간격을 남기십시오 정기적으로 예정된범퍼카 토토또는 정상 삭제 및 업데이트 활동에 의해 트리거 된 Autovacuum은 다음과 같습니다. 그 창에서 실행하십시오. 너무 가깝게 설정하면 이어질 수 있습니다 테이블이 최근에 있었음에도 불구하고 raparound autovacuums 공간을 회수하기 위해 진공 범퍼카 토토기를 청구하는 반면, 낮은 값은 더 많은 것으로 이어집니다. 잦은 전체 테이블 스캔.

증가하는 유일한 단점autovacuum_freeze_max_age(및VACUUM_FREEZE_TABLE_AGE와 함께)입니다 그만큼PG_CLOG서브 디렉토리 데이터베이스 클러스터는 저장해야하기 때문에 더 많은 공간을 차지합니다. 모든 트랜잭션의 커밋 상태autovacuum_freeze_max_age지평. 커밋 상태는 거래 당 두 비트를 사용하므로 ifautovacuum_freeze_max_age는 최대로 설정되었습니다 허용 된 가치 20 억,PG_CLOG는 기가 바이트 약 절반으로 자랄 것으로 예상됩니다. 이것이 있다면 총 데이터베이스 크기에 비해 사소한 설정autovacuum_freeze_max_age그에게 최대 허용 값이 권장됩니다. 그렇지 않으면 설정하십시오 당신이 기꺼이 허용하는 것에 따라PG_CLOG스토리지. (기본값, 2 억 거래는 약 50MB의로 변환됩니다.PG_CLOG스토리지.)

감소의 한 가지 단점VACUUM_FREEZE_MIN_AGE원인이 될 수 있습니다범퍼카 토토쓸모없는 작업을 수행하려면 : a 테이블 행의 xid tofrozenxidis 그 후 곧 행이 수정 된 경우 시간 낭비 (원인 새로운 XID를 획득하기 위해). 따라서 설정은 충분히 커야합니다 그 행은 변경할 가능성이 없을 때까지 동결되지 않습니다. 더. 이 설정을 줄이는 또 다른 단점은 그 것입니다 정확히 삽입 또는 수정 된 트랜잭션에 대한 세부 사항 a 행은 더 빨리 손실됩니다. 이 정보는 때때로 들어옵니다 특히 무엇이 잘못되었는지 분석하려고 할 때 편리합니다 데이터베이스 실패 후. 이 두 가지 이유로 감소합니다 이 설정은 완전히 정적을 제외하고는 권장되지 않습니다 테이블.

데이터베이스에서 가장 오래된 XID의 나이를 추적하려면범퍼카 토토XID 통계를 저장합니다 시스템 테이블PG_CLASSandpg_database. 특히relfrozenxid테이블의 열pg_class행에는 동결이 포함되어 있습니다 마지막 완전 테이블이 사용한 컷오프 XID범퍼카 토토해당 테이블의 경우. 모든 정상 XID가 오래되었습니다 이 컷오프보다 xid가 대체 된 것보다frozenxid32495_32535datfrozenxida 데이터베이스pg_database행입니다 해당 데이터베이스에 나타나는 일반 XID의 하한 - IT 테이블 당 최소입니다relfrozenxid데이터베이스 내의 값. 에이 이 정보를 조사하는 편리한 방법은 실행하는 것입니다 다음과 같은 쿼리

table_name으로 c.oid :: regclass를 선택하십시오.
       연령으로 가장 큰 (연령 (C.Relfrozenxid), 연령 (T.Relfrozenxid))
pg_class에서 c
C.ReltoastRelid = T.Oid에서 PG_CLASS T를 왼쪽으로 결합하십시오
여기서 c.relkind = 'r';

pg_database에서 datname, age (datfrozenxid)를 선택하십시오.

theAge열은 숫자를 측정합니다 컷오프 XID에서 현재까지의 거래 거래의 xid.

범퍼카 토토일반적으로 페이지 만 스캔합니다 마지막 범퍼카 토토 이후 수정되었지만relfrozenxid전체 테이블이 스캔됩니다. 전체 테이블이 스캔 될 때relfrozenxid더 이상Vacuum_Freeze_table_age거래 옛날,범퍼카 토토's동결옵션이 사용되거나 모든 페이지가 발생하는 경우 Dead Row 버전을 제거하기 위해 진공 범퍼카 토토기가 필요합니다. 언제범퍼카 토토후 전체 테이블을 스캔합니다 완성되었습니다Age (RelfrozenxID)보다 조금 더VACUUM_FREEZE_MIN_AGE사용 된 설정 (더 많은 거래 이후 시작된 트랜잭션 수에 의해범퍼카 토토시작). 아니오 전체 테이블 스캔범퍼카 토토가 발행됩니다 테이블에서autovacuum_freeze_max_age도달했습니다 Autovacuum은 곧 테이블을 위해 강요 될 것입니다.

어떤 이유로 든 Autovacuum이 오래된 XID를 범퍼카 토토하지 못하는 경우 테이블, 시스템은 이와 같은 경고 메시지를 방출하기 시작합니다. 데이터베이스의 가장 오래된 XID가 1 백만 건의 트랜잭션에 도달하면 랩 어라운드 지점에서 :

경고 : 데이터베이스 "MyDB"는 177009986 트랜잭션 내에 청소해야합니다
힌트 : 데이터베이스 종료를 피하려면 "MyDB"에서 데이터베이스 전체 범퍼카 토토을 실행하십시오..

(매뉴얼범퍼카 토토힌트에 의해 제안 된대로 문제; 하지만범퍼카 토토슈퍼업자가 수행해야합니다 시스템 카탈로그를 처리하지 못하므로 데이터베이스의 전진datfrozenxid.) 이러한 경고가 있다면 무시하면 시스템이 종료되고 새로운 시작을 거부합니다. 트랜잭션은 1 백만 미만의 거래가 있으면 랩 어라운드까지 떠났다 :

오류 : 데이터베이스는 데이터베이스 "mydb"의 랩 어라운드 데이터 손실을 피하기 위해 명령을 수락하지 않습니다.
힌트 : 우체국 장을 중지하고 "MyDB"에서 범퍼카 토토 상태로 독립형 백엔드를 사용하십시오.

1 백만 번의 이동 안전 마진이 존재합니다 관리자는 수동으로 실행하여 데이터 손실없이 복구됩니다 필수범퍼카 토토명령. 하지만, 시스템이 사라진 후에는 명령을 실행하지 않기 때문에 안전 차단 모드로,이를 수행하는 유일한 방법은 서버를 중지하고 단일 사용자 백엔드를 사용하여 실행범퍼카 토토. 셧다운 모드는 아닙니다 단일 사용자 백엔드에 의해 시행됩니다. 참조Postgres자세한 내용은 참조 페이지입니다 단일 사용자 백엔드 사용에 대해.

23.1.5. Autovacuum 데몬

PostgreSQL선택 사항이 있습니다 그러나 적극 권장되는 기능autovacuum실행범퍼카 토토분석명령. 활성화되면 Autovacuum 많은 수의 삽입 된 테이블을 확인하고 튜플을 업데이트하거나 삭제했습니다. 이 수표는 통계를 사용합니다 수집 시설; 따라서 Autovacuum을 사용할 수 없습니다 하지 않는 한track_countstrue. 기본값에서 구성,자가 동작이 활성화되고 관련되어 있습니다 구성 매개 변수는 적절하게 설정됩니다.

the"Autovacuum 데몬"실제로 여러 프로세스로 구성됩니다. 지속적인 데몬이 있습니다 프로세스,autovacuum 발사통, 시작을 담당하는Autovacuum Worker모든 데이터베이스의 프로세스. 런처는 시간이 지남에 따라 작업을 배포하여 시도합니다 각 데이터베이스 내에서 한 명의 작업자를 시작하려면autovacuum_naptime초. (따라서 설치에n데이터베이스, 새로운 작업자가 될 것입니다 모든 출시autovacuum_naptime/n초.) 최대autovacuum_max_workers작업자 프로세스는 동시에 실행할 수 있습니다. 거기 있다면 더 이상autovacuum_max_workers처리 할 데이터베이스, 다음 데이터베이스가 처리됩니다. 첫 번째 작업자가 끝나 자마자. 각 근로자 과정은 그럴 것입니다 데이터베이스 내의 각 테이블을 확인하고 실행범퍼카 토토및/또는분석필요에 따라.

몇 개의 큰 테이블이 모두 진공 범퍼카 토토기를받을 자격이있는 경우 짧은 시간, 모든 Autovacuum 근로자는 오랫동안 테이블을 진공 범퍼카 토토기로 청소합니다. 이것 다른 테이블과 데이터베이스가 범퍼카 토토 청소되지 않도록합니다. 근로자가 가능할 때까지. 얼마나 많은지에 제한이 없습니다 근로자는 단일 데이터베이스에있을 수 있지만 근로자는 다른 사람이 이미 수행 한 반복 작업을 피하십시오. 노동자. 달리는 근로자의 수는 계산되지 않습니다. 쪽으로max_connections또는SuperUser_Reserved_Connections한계.

테이블의relfrozenxid값 이상autovacuum_freeze_max_age오래된 거래는 항상 진공 범퍼카 토토기입니다 (이것은 또한 적용됩니다 동결 최대 시대가 저장을 통해 수정 된 테이블 매개 변수; 아래를 참조하십시오). 그렇지 않으면, 튜플의 수라면 마지막 이래로 쓸모없는범퍼카 토토초과"범퍼카 토토 임계 값", 테이블은 진공 범퍼카 토토기입니다. 범퍼카 토토 임계 값은 다음과 같이 정의됩니다.

범퍼카 토토 임계 값 = 범퍼카 토토베이스 임계 값 + 범퍼카 토토 스케일 팩터 * 튜플 수

범퍼카 토토베이스 임계 값이있는 곳autovacuum_vacuum_threshold, 범퍼카 토토 스케일 계수는autovacuum_vacuum_scale_factor, 그리고 튜플의 수는pg_class.Reltuples. 쓸모없는 튜플의 수는입니다 통계 수집가로부터 얻은; 그것은 반 유감입니다 각에 의해 업데이트 됨업데이트삭제작동. (그것은 단지입니다 일부 정보가 손실 될 수 있으므로 반 정확도 무거운 짐.) 인 경우relfrozenxid테이블의 가치는 이상입니다.VACUUM_FREEZE_TABLE_AGETransactions Old, the 전체 테이블이 스캔되어 오래된 튜플을 얼리고 전진합니다relfrozenxid, 그렇지 않으면 페이지 만 마지막 범퍼카 토토이 스캔 된 이후로 수정되었습니다.

분석의 경우 유사한 조건이 사용됩니다 : 임계 값, 정의 :

임계 값 분석 = 기본 임계 값 분석 + 스케일 요인 분석 * 튜플 수

삽입 된 총 튜플 수와 비교됩니다. 또는 마지막 이후 삭제분석.

Autovacuum은 임시 테이블에 액세스 할 수 없습니다. 따라서 적절한 범퍼카 토토 및 분석 작업이 있어야합니다 세션 SQL 명령을 통해 수행됩니다.

기본 임계 값 및 스케일 요인은에서 가져옵니다.postgresql.conf이지만 가능합니다 테이블별로 그것들을 대체하기 위해; 보다스토리지 매개 변수자세한 내용은. 설정이 있다면 스토리지 매개 변수를 통해 변경되면 해당 값이 사용됩니다. 그렇지 않으면 글로벌 설정이 사용됩니다. 보다섹션 18.10더 많은 글로벌 설정에 대한 자세한 내용.

기본 임계 값 및 스케일 요인 외에 각각에 대해 설정할 수있는 6 개의 Autovacuum 매개 변수입니다. 스토리지 매개 변수를 통한 테이블. 첫 번째 매개 변수autovacuum_enabled,를 설정할 수 있습니다거짓autovacuum 데몬에 건너 뛰도록 지시합니다 그 특정 테이블 전적으로. 이 경우 autovacuum은 할 것입니다 거래 ID를 방지하기 위해 테이블 ​​만 터치하십시오. 랩 어라운드. 또 다른 두 매개 변수autovacuum_vacuum_cost_delayautovacuum_vacuum_cost_limit는 설정하는 데 사용됩니다 비용 기반 범퍼카 토토 지연 기능에 대한 테이블 별 값 (보다섹션 18.4.3).autovacuum_freeze_min_age, autovacuum_freeze_max_ageandautovacuum_freeze_table_age설정에 사용됩니다 에 대한 값VACUUM_FREEZE_MIN_AGE, autovacuum_freeze_max_ageandVACUUM_FREEZE_TABLE_AGE각각.

여러 근로자가 달리면 비용 지연 매개 변수가 있습니다 이다"밸런스"모든 달리기 중 시스템에 대한 총 I/O 영향이 동일하도록 작업자 실제로 달리는 근로자의 수에 관계없이. 하지만, 모든 근로자가 가공 테이블autovacuum_vacuum_cost_delay또는autovacuum_vacuum_cost_limit설정되었습니다 밸런싱 알고리즘에서 고려되지 않습니다.