이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 24.1. 일상 윈 토토 청소기버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

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

PostgreSQL데이터베이스가 필요합니다 로 알려진 정기 유지 보수진공 범퍼카 토토기. 많은 설치의 경우 진공 범퍼카 토토기를 수행autovacuum daemon에 설명되어 있습니다.섹션 23.1.6. 자동 변수 매개 변수를 조정해야 할 수도 있습니다 상황에 대한 최상의 결과를 얻기 위해 설명했습니다. 일부 데이터베이스 관리자는 보충 또는 교체하려고합니다 수동으로 관리되는 데몬 활동진공일반적으로 실행되는 명령 일정에 따라Cron또는작업 스케줄러스크립트. 설정합니다 수동으로 관리되는 진공 범퍼카 토토기는 제대로 진공 범퍼카 토토기를 이해하는 것이 필수적입니다 다음 몇 가지 하위 섹션에서 논의 된 문제. 관리자 자가 보증에 의존하는 사람은 여전히이 자료를 그들이자가 경련을 이해하고 조정하도록 도와주세요.

23.1.1. 진공 범퍼카 토토기

postgresql's진공명령은 각 테이블을 처리해야합니다 몇 가지 이유로 정기적 인 기준 :

  1. 업데이트 또는 삭제 된 디스크 공간을 복구 또는 재사용하려면 업데이트 또는 삭제 줄.

  2. postgresql쿼리 플래너.

  3. 가시성 맵을 업데이트하려면 인덱스 전용이 높아집니다 스캔.

  4. |트랜잭션 ID 랩 어라운드또는Multixact ID 랩 어라운드.

이러한 각 이유는 수행을 지시합니다진공다양한 주파수 및 범위의 작동 다음 하위 섹션에서 설명.

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

진공상당한 양의 양을 만듭니다 I/O 트래픽, 다른 활성의 성능이 저하 될 수 있습니다. 세션. 조정할 수있는 구성 매개 변수가 있습니다 배경 진공 범퍼카 토토기의 성능 영향을 줄이려면 참조섹션 18.4.4.

23.1.2. 디스크 공간 복구

inPostgreSQL, an업데이트또는삭제행의 이전 버전의 행을 즉시 제거하지 않습니다. 이것 다중 요소의 이점을 얻으려면 접근이 필요합니다 동시성 제어 (MVCC, 참조13 장) : 행 버전은 아니어야합니다 여전히 다른 사람에게는 잠재적으로 볼 수있는 동안 삭제됩니다 업무. 그러나 결국 구식 또는 삭제 된 행 버전은입니다 더 이상 거래에 대한 관심이 없습니다. 그것이 차지하는 공간 그런 다음 새로운 행으로 재사용을 위해 되 찾아야합니다. 디스크 공간 요구 사항의 성장. 이것은 실행하여 이루어집니다진공.

표준 형태진공제거 테이블 및 인덱스의 데드 행 버전 및 공간을 표시합니다. 향후 재사용에 사용할 수 있습니다. 그러나 공간을 반환하지 않습니다 하나 또는 테이블 끝에있는 더 많은 페이지가 완전히 무료가되고 독점 테이블 잠금을 쉽게 얻을 수 있습니다. 대조적으로,진공 Full적극적으로 테이블을 압축합니다 죽지 않은 완전한 새 버전의 테이블 파일 작성 공간. 이것은 테이블의 크기를 최소화하지만 오래 걸릴 수 있습니다. 시간. 또한 새로운 사본을위한 추가 디스크 공간이 필요합니다. 작업이 완료 될 때까지 테이블.

일상적인 진공 범퍼카 토토기의 일반적인 목표는 표준을 수행하는 것입니다진공필요를 피하기에 충분히진공 Full. Autovacuum 데몬은 일을 시도합니다 이런 식으로, 실제로는 결코 발행하지 않을 것입니다진공 가득한. 이 접근법에서 아이디어는 테이블을 유지하는 것이 아닙니다. 최소 크기이지만 디스크의 정상 상태 사용을 유지하기 위해 공간 : 각 테이블은 최소 크기에 해당하는 공간을 차지합니다. 또한 진공 범퍼카 토토기 사이에 많은 공간이 사용됩니다. 하지만진공 Full테이블을 축소하는 데 사용할 수 있습니다 최소 크기로 돌아가서 디스크 공간을 작동으로 반환합니다. 시스템, 테이블이 성장한다면 이것에 별다른 점이 없습니다. 다시 미래에. 따라서 적당히 프레시트 표준진공Runs는 드물게 더 나은 접근 방식입니다진공 Full유지 관리를 위해 실행됩니다 심하게 업데이트 된 테이블.

일부 관리자는 진공 범퍼카 토토기를 선호합니다 하중이 낮을 때 밤에 모든 작업을 수행하는 예. 그만큼 고정 일정에 따라 진공 범퍼카 토토기를하는 데 어려움은 다음과 같습니다. 테이블에 업데이트 활동이 예상치 못한 스파이크가 있으면 그 시점까지 부풀어 오른다진공 Full공간을 되찾기 위해서는 실제로 필요합니다. Autovacuum 데몬 사용 데몬이 진공 범퍼카 토토기 일정 이므로이 문제를 완화시킵니다 업데이트 활동에 대한 동적으로. 비활성화하는 것은 현명하지 않습니다 당신이 매우 예측 가능한 것이 아니라면 데몬은 완전히 완전히 있습니다 작업량. 가능한 타협 중 하나는 데몬 매개 변수를 설정하는 것입니다 비정상적으로 무거운 업데이트 활동에만 반응 할 수 있도록 일정을 잡는 동안 물건을 손에 쥐지 않도록진공s는 일의 대부분을 수행 할 것으로 예상됩니다. 하중은 일반적입니다.

Autovacuum을 사용하지 않는 사람들의 경우 일반적인 접근 방식은 다음과 같습니다. 데이터베이스 전체 예약진공하루에 한 번 보다 빈번한 진공 범퍼카 토토기에 의해 보충되는 저만 기간 동안 필요에 따라 상당한 업데이트 된 테이블. (일부 설치 매우 높은 업데이트 속도는 자주 가장 바쁜 테이블을 진공 범퍼카 토토기로 청소합니다. 몇 분마다 한 번.) 여러 데이터베이스가있는 경우 클러스터, 잊지 마세요진공각각; 프로그램VACUUMDB도움이 될 수 있습니다.

팁 :일반진공그렇지 않을 수 있습니다 테이블에 많은 수의 죽은 줄이 포함되어있을 때 만족 스럽습니다. 대규모 업데이트 또는 삭제 활동의 결과로 버전. 당신이 그런 테이블이 있고 과도한 디스크 공간을 되 찾아야합니다. 점령, 당신은 사용해야합니다진공 가득한또는 또는 대안PostgreSQL : 문서 : 9.3 : 와이즈 토토Alter Table. 이 명령은 다시 작성합니다 테이블의 완전히 새로운 사본과 새로운 인덱스를 구축합니다. 모두 이 옵션에는 독점 잠금이 필요합니다. 그들도 주목하십시오 일시적으로 여분의 디스크 공간을 사용하여 크기와 거의 같습니다. 테이블과 인덱스의 오래된 사본은 새로운 것들이 완성 될 때까지 출시되었습니다.

팁 :전체 내용물이있는 테이블이있는 경우 정기적으로 삭제하면Truncate사용하기보다는삭제그 뒤에진공. Truncate전체 내용을 제거합니다 후속없이 즉시 테이블진공또는진공 Fullto 현재 사용되지 않은 디스크 공간을 되 찾으십시오. 단점은 엄격합니다 MVCC 시맨틱은 위반됩니다.

23.1.3. 업데이트 플래너 통계

thepostgresql쿼리 플래너 표의 내용에 대한 통계 정보에 의존합니다. 쿼리에 대한 좋은 계획을 생성하기 위해. 이러한 통계는 다음과 같습니다 에 의해 수집PostgreSQL : 문서 : 9.3 : 토토 커뮤니티명령, 그 자체로 또는 선택적인 단계로 호출 할 수 있습니다진공. 합리적으로 정확한 것이 중요합니다 통계, 그렇지 않으면 계획 중 열악한 선택은 데이터베이스를 저하시킬 수 있습니다 성능.

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

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

실행할 수 있습니다분석on 특정 테이블 및 테이블의 특정 열만 있으므로 일부 통계를보다 자주 업데이트하기 위해 유연성이 존재합니다 신청서에 필요한 경우 다른 사람. 그러나 실제로는 그렇습니다 일반적으로 전체 데이터베이스를 분석하는 것이 가장 좋습니다. 빠른 작동.분석a 테이블 행의 통계적으로 임의의 샘플링이 아니라 모든 줄 읽기.

팁 :콜럼 당 조정이지만분석주파수는 생산적이지 않을 수 있습니다 레벨의 열 당 조정을하는 것이 가치가 있음을 알 수 있습니다. 에 의해 수집 된 통계의 세부 사항분석. 크게 사용되는 열여기서조항은 불규칙한 데이터를 가지고 있습니다 분포는 다른 것보다 더 미세한 곡물 데이터 히스토그램이 필요할 수 있습니다 열. 보다ALTER 테이블 세트 통계, 또는를 사용하여 데이터베이스 전체 기본값을 변경하십시오.default_statistics_target구성 매개 변수.

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

팁 :autovacuum 데몬이 발행되지 않습니다분석외국 테이블에 대한 명령 그것이 얼마나 자주 유용 할 수 있는지 결정하는 수단. 당신의 경우 쿼리에는 적절한 계획을 위해 외국 테이블에 대한 통계가 필요합니다. 수동으로 관리하는 것이 좋습니다분석적절한 테이블의 명령 일정.

23.1.4. 가시성 업데이트 지도

진공 유지 관리롤 토토 : 문서 : 9.3 : 가시성 맵튜플 만 포함하는 페이지를 추적하려면 각 테이블에 대해 모든 활성 거래에 보이는 것으로 알려져 있습니다. 페이지가 다시 수정 될 때까지 향후 거래). 이것은 있습니다 두 가지 목적. 먼저, 진공 범퍼카 토토기 자체는 다음 페이지에서 해당 페이지를 건너 뛸 수 있습니다. 정리할 것이 없기 때문에 달리기.

둘째, 허용PostgreSQLto 에 대한 참조없이 인덱스 만 사용하여 일부 쿼리에 답하십시오. 기본 테이블. 부터PostgreSQL인덱스에는 튜플 가시성 정보, 정상 색인이 포함되어 있지 않습니다 스캔을 확인하려면 각 일치하는 인덱스 항목에 대한 힙 튜플을 가져옵니다. 현재 거래에서 볼 수 있는지 여부.색인 전용 스캔23705_24054

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

PostgreSQL의 MVCC 트랜잭션 의미론은 트랜잭션 ID를 비교할 수있는 것에 달려 있습니다 (xid) 숫자 : 행 버전 현재 트랜잭션의 XID보다 큰 삽입 XID를 사용하면"미래의"현재 거래에 표시됩니다. 그러나 트랜잭션 ID는 있습니다 제한된 크기 (32 비트) 오랫동안 실행되는 클러스터 (더보기 40 억 대의 거래)가 어려움을 겪을 것입니다트랜잭션 ID 랩 어라운드: XID 카운터 랩 주위에 0, 그리고 모든 갑작스런 거래가 과거는 미래에있는 것처럼 보입니다. 이는 출력이 보이지 않는. 요컨대, 치명적인 데이터 손실. (실제로 데이터는입니다 아직도 거기에 있지만, 당신이 그것을 얻을 수 없다면 차갑습니다.) 이를 피하면 모든 데이터베이스의 모든 테이블을 진공 범퍼카 토토기로 청소해야합니다. 적어도 20 억의 거래마다 한 번씩.

정기 진공 범퍼카 토토기가 문제를 해결하는 이유는입니다.PostgreSQL특별한 XID를 보유합니다 처럼frozenxid. 이 xid는 다음을 따르지 않습니다 정상적인 XID 비교 규칙이며 항상 더 오래된 것으로 간주됩니다. 모든 정상적인 xid. 정상적인 XID를 사용하여 비교됩니다 Modulo-232산술. 이것은 모든 정상에 대해 의미합니다 XID, 20 억 개의 XID가 있습니다."구형""최신"; 말하는 또 다른 방법은 정상입니다 XID 공간은 끝점이없는 원형입니다. 따라서 한 번 연속 버전은 특정 일반 XID, 행으로 작성되었습니다. 버전은"과거"다음 20 억 건의 거래의 경우 어떤 정상 XID에 관계없이 우리는 이야기하고 있습니다. 더 많은 후에 행 버전이 여전히 존재하는 경우 20 억의 거래보다 갑자기 미래. 이를 방지하려면 오래된 행 버전을 재 할당해야합니다. XIDfrozenxid그들이 도달하기 전에 언젠가 20 억 트랜잭션 오래된 마크. 일단 그들이 할당되면 특별한 xid, 그들은"에서 과거"26398_26587진공.

VACUUM_FREEZE_MIN_AGEXID 값이 얼마나 오래되어야하는지 제어frozenxid. 이 설정의 더 큰 값 트랜잭션 정보를 더 오래 보존하고 더 작은 값을 보존하십시오 이전에 경과 할 수있는 거래 수를 늘리십시오. 테이블은 다시 진공 범퍼카 토토기를 청소해야합니다.

진공일반적으로 그렇지 않은 페이지를 건너 뜁니다 데드 행 버전이 있지만 해당 페이지에는 여전히 행이있을 수 있습니다. 오래된 XID 값이있는 버전. 모든 오래된 XID를 보장하기 위해 대체frozenxid, 전체의 스캔 테이블이 필요합니다.VACUUM_FREEZE_TABLE_AGE컨트롤진공전체 : 전체 테이블이 완전히 스캔되지 않으면 테이블 스윕이 강요됩니다VACUUM_FREEZE_TABLE_AGE마이너스VACUUM_FREEZE_MIN_AGE거래. 0으로 설정합니다 힘진공항상 모든 페이지를 스캔하려면 가시성 맵을 효과적으로 무시합니다.

테이블이 바로 갈 수있는 최대 시간은 20 억입니다. 트랜잭션을 뺀VACUUM_FREEZE_MIN_AGE당시의 가치진공마지막 테이블을 스캔했습니다. 그렇다면 그보다 오랫동안 검사를받지 않으면 데이터 손실이 발생할 수 있습니다. 에게 이런 일이 일어나지 않도록, Autovacuum은 table that might contain XIDs older than the age specified by the 구성 매개 변수autovacuum_freeze_max_age. (Autovacuum이 비활성화되어 있어도 발생합니다.)

이것은 테이블이 진공 범퍼카 토토기가 아닌 경우, Autovacuum은 약 1 회마다 호출됩니다autovacuum_freeze_max_age마이너스VACUUM_FREEZE_MIN_AGE거래. 테이블을 위해 우주 교정 목적으로 정기적으로 진공 범퍼카 토토기가 중요하지 않습니다. 그러나 정적 테이블 (테이블 포함 인서트를받지 만 업데이트 또는 삭제는 필요하지 않습니다. 우주 교정을 위해 진공 범퍼카 토토기를 청소하려면 시도하는 것이 유용 할 수 있습니다. 강제 autovacuums 사이의 간격을 극대화하십시오 정적 테이블. 분명히 하나는 증가함으로써 이것을 할 수 있습니다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, 정기적으로 일정을 잡을 수 있도록 충분한 간격을 남기고진공또는 정상 삭제에 의해 트리거 된 오토바 쿠움 업데이트 활동은 해당 창에서 실행됩니다. 너무 가깝게 설정합니다 테이블에도 불구하고 raparound autovacuums로 이어질 수 있습니다 최근에 공간을 되찾기 위해 진공 범퍼카 토토기를 청구했지만 낮은 값은 더 빈번한 완전 테이블 스캔.

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

감소의 단점 중 하나VACUUM_FREEZE_MIN_AGE원인이 될 수 있다는 것입니다진공쓸모없는 작업을 수행하려면 : a 테이블 행의 xid tofrozenxid낭비입니다 그 후 곧 행이 수정 된 시간 (획득하게됩니다. 새로운 xid). 따라서 설정은 행이 아닙니다. 그들이 더 이상 바꿀 것 같지 않을 때까지 얼어 붙었습니다. 또 다른 이 설정을 줄이는 단점은 그에 대한 세부 사항입니다 정확히 어떤 트랜잭션이 삽입 또는 수정 된 행을 손실 할 것인지 정확히 어떤 트랜잭션 더 빨리. 이 정보는 때때로 특히 유용합니다 데이터베이스 실패 후 무엇이 잘못되었는지 분석하려고 할 때. 이 두 가지 이유로이 설정을 줄이는 것은 권장되지 않습니다. 완전히 정적 테이블을 제외하고

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

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

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

theAge열은 수를 측정합니다 컷오프 XID에서 현재 트랜잭션으로의 거래 xid.

진공일반적으로 페이지를 스캔합니다 마지막 진공 이후 수정되었지만relfrozenxid전체 일 때만 발전 할 수 있습니다 테이블이 스캔됩니다. 전체 테이블이 스캔 될 때relfrozenxidVACUUM_FREEZE_TABLE_AGE옛날,시기진공's동결옵션이 사용되거나 모든 페이지가 진공 범퍼카 토토기가 필요한 경우 Dead Row 버전을 제거하십시오. 언제진공완성 된 후 전체 테이블을 스캔합니다Age (RelfrozenxID)|VACUUM_FREEZE_MIN_AGE설정 사용 ( 이후 시작된 트랜잭션 수에 따라진공시작). 아니오 전체 테이블 스캔진공가 발행되었습니다 THE TALEautovacuum_freeze_max_age도달하면, 오토바 쿠움이 곧 테이블에 강제 될 것입니다.

어떤 이유로 autovacuum이 오래된 xids를 청소하지 못하는 경우 테이블, 시스템은 이와 같은 경고 메시지를 방출하기 시작합니다. 데이터베이스의 가장 오래된 XID가 1 백만 건의 거래에 도달하면 랩 어라운드 포인트 :

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

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

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

1 백만 번의 이동 안전 마진은 관리자는 수동으로 실행하여 데이터 손실없이 복구합니다 필수의진공명령. 그러나 그 이후로 시스템은 명령을 실행하지 않습니다. 안전 차단 모드,이를 수행하는 유일한 방법은 서버를 중지하는 것입니다. 그리고 단일 사용자 백엔드를 사용하여 실행진공. 셧다운 모드는 a 단일 사용자 백엔드. 참조Postgres단일 사용자 백엔드 사용에 대한 자세한 내용은 참조 페이지입니다.

23.1.5.1. 다단장 및 랩 어라운드

Multixact ID는 행을 지원하는 데 사용됩니다 여러 거래에 의한 잠금. 공간이 제한되어 있기 때문에 잠금 정보를 저장하기위한 튜플 헤더에서 그 정보는 a로 인코딩"다중 트랜잭션 ID", 또는 간단한 경우, 둘 이상이있을 때마다 거래는 동시에 행을 잠그고 있습니다. 어느 것에 대한 정보 트랜잭션 ID는 특정 다중 공장 ID에 포함되어 있습니다. 에 별도로 저장pg_multixact하위 디렉토리, 그리고 다중 팩트 ID 만에 나타납니다.xmax튜플 헤더의 필드. 거래처럼 IDS, MultixAct ID는 32 비트 카운터로 구현되었으며 해당 스토리지, 모두 신중한 노화가 필요합니다 관리, 스토리지 정리 및 랩 어라운드 처리. A가 있습니다 각각의 멤버 목록을 보유하는 별도의 스토리지 영역 32 비트 카운터를 사용하고 또한 관리.

동안진공테이블 스캔 부분적 또는 전체 테이블의 경우,보다 오래된 다단계 IDVACUUM_MULTIXACT_FREEZE_MIN_AGE는 다른 값으로 대체되며, 이는 제로 값, 단일 트랜잭션 ID 또는 새로운 다중 공장 ID. 각 테이블에 대해pg_class.relminmxid가장 오래된 다중 공장을 저장합니다 ID는 여전히 해당 테이블의 튜플에 나타납니다. 이 값이라면 더 오래된VACUUM_MULTIXACT_FREEZE_TABLE_AGE, 전체 테이블 스캔이 강요됩니다. 전체 테이블진공원인에 관계없이 스캔을 활성화하십시오 해당 테이블의 값을 발전시킵니다. 결국, 모든 테이블이 들어갑니다 모든 데이터베이스는 스캔되고 가장 오래된 다중 공장 값은 오래된 다중 공장을위한 고급 온 디스크 스토리지를 제거 할 수 있습니다.

안전 장치로서 전체 테이블 진공 스캔이 발생합니다. 다중 공장이보다 큰 테이블autovacuum_multixact_freeze_max_age. 완전 테이블 진공 스캔 또한 모든 테이블에 대해 점차적으로 발생합니다. 중고 멤버의 금액 인 경우 가장 오래된 다중 공장이있는 저장 공간 공간. 이런 종류의 전체 테이블 스캔은 Autovacuum은 명목상 장애인입니다.

23.1.6. 그만큼 Autovacuum 데몬

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

the"Autovacuum Daemon"실제로 여러 프로세스로 구성됩니다. 지속적인 데몬이 있습니다 프로세스,Autovacuum 런처, 시작을 담당하는autovacuum 노동자모든 데이터베이스의 프로세스. 런처는 할 것입니다 한 근로자를 시작하려고 시도하면서 시간이 지남에 따라 작업을 배포합니다. 각 데이터베이스 내에서 모든autovacuum_naptime초. (따라서 설치에n데이터베이스, 새로운 작업자가 시작됩니다 모든autovacuum_naptime/n초) 최대autovacuum_max_workers작업자 프로세스는 동시에 실행할 수 있습니다. 있다면 이상autovacuum_max_workers데이터베이스 처리하려면 다음 데이터베이스는 즉시 처리됩니다. 첫 번째 작업자가 마무리됩니다. 각 작업자 프로세스는 각 테이블을 확인합니다 데이터베이스 내에서 실행진공및/또는분석필요에 따라.log_autovacuum_min_duration모니터링하는 데 사용할 수 있습니다 Autovacuum 활동.

몇 개의 큰 테이블이 모두 진공 범퍼카 토토기를받을 자격이있는 경우 짧은 시간, 모든 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_AGE거래 오래, 전체 테이블이 스캔되어 오래된 튜플을 얼리고 전진합니다relfrozenxid, 그렇지 않으면 페이지 만 마지막 진공이 스캔 된 이후로 수정되었습니다.

분석을 위해 유사한 조건이 사용됩니다 : 임계 값, 정의 처럼:

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

삽입, 업데이트, 또는 마지막 이후 삭제분석.

Autovacuum은 임시 테이블에 액세스 할 수 없습니다. 그러므로, 적절한 진공 및 분석 작업을 통해 수행해야합니다 세션 SQL 명령.

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

기본 임계 값 및 스케일 요인 외에 각 테이블에 대해 설정할 수있는 6 개의 Autovacuum 매개 변수를 통해 스토리지 매개 변수. 첫 번째 매개 변수autovacuum_enabled,를 설정할 수 있습니다falseautovacuum 데몬에게 그것을 건너 뛰도록 지시합니다 특정 테이블 전적으로. 이 경우 autovacuum은 만 터치합니다 트랜잭션 ID 랩 어라운드를 방지하기 위해 그렇게 해야하는 경우 테이블. 또 다른 두 매개 변수autovacuum_vacuum_cost_delayautovacuum_vacuum_cost_limit는 설정하는 데 사용됩니다 비용 기반 진공 지연 기능에 대한 테이블 별 값 (참조섹션 18.4.4).autovacuum_freeze_min_age, autovacuum_freeze_max_ageandautovacuum_freeze_table_age값을 설정하는 데 사용됩니다 을 위한VACUUM_FREEZE_MIN_AGE, autovacuum_freeze_max_ageVACUUM_FREEZE_TABLE_AGE각각.

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