이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 24.1. 일상 윈 토토 청소기버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

8.2. 일상적인 토토 결과 청소

포스트그레SQL토토 결과명령은 정기적으로 실행되어야 합니다. 몇 가지 이유:

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

  2. 다음에서 사용하는 데이터 통계를 업데이트하려면PostgreSQL쿼리 플래너.

  3. 다음으로 인해 매우 오래된 데이터의 손실을 방지하기 위해거래 ID 랩어라운드.

빈도 및 범위토토 결과s 이러한 각 이유에 대해 수행되는 작업은 다음에 따라 다릅니다. 각 설치의 요구 사항. 따라서 데이터베이스 관리자는 이러한 문제를 이해하고 적절한 방법을 개발해야 합니다. 유지 관리 전략. 이 섹션에서는 다음 내용을 집중적으로 설명합니다. 높은 수준의 문제; 명령 구문 등에 대한 자세한 내용은 참조하세요토토 결과명령 참조 페이지.

시작포스트그레SQL7.2, 의 표준형토토 결과실행 가능 일반적인 데이터베이스 작업(선택, 삽입, 업데이트, 삭제는 가능하지만 테이블 스키마는 변경되지 않습니다). 루틴 따라서 토토 결과 청소기로 청소하는 것은 이전만큼 방해가 되지 않습니다. 릴리스 일정을 잡는 것은 그다지 중요하지 않습니다. 하루 중 사용량이 적은 시간입니다.

8.2.1. 디스크 복구 중 공간

정상적으로포스트그레SQL작업, an업데이트또는삭제행은 즉시 제거되지 않습니다. 오래된튜플(행의 버전). 이 다중 버전의 이점을 얻으려면 접근 방식이 필요합니다. 동시성 제어(참조PostgreSQL 7.3.21 사용자 가이드): 튜플은 다음과 같아야 합니다. 잠재적으로 다른 사람에게 표시되는 동안에는 삭제하지 마십시오. 거래. 그러나 결국 오래되었거나 삭제된 튜플은 더 이상 어떤 거래에도 관심이 없습니다. 그것이 차지하는 공간 무한을 피하기 위해 새로운 튜플에서 재사용하려면 회수해야 합니다. 디스크 공간 요구 사항 증가. 이는 다음을 실행하여 수행됩니다.토토 결과.

분명히 자주 업데이트되거나 삭제되는 테이블입니다 자주 청소하지 않는 테이블보다 더 자주 청소해야 합니다. 업데이트되었습니다. 주기적으로 설정하는 것이 유용할 수 있습니다.크론선택한 토토 결과청소 작업만 테이블, 자주 변경되지 않는 것으로 알려진 테이블을 건너뜁니다. 이는 두 가지 모두 큰 경우에만 도움이 될 수 있습니다. 자주 업데이트되는 테이블과 거의 업데이트되지 않는 큰 테이블 --- 작은 테이블을 청소하는 데 드는 추가 비용은 가치가 없습니다 걱정된다.

의 표준 형식토토 결과최고입니다 상당히 수준 높은 정상상태를 유지하려는 목적으로 사용됩니다. 디스크 공간 사용량. 표준 형식은 오래된 튜플을 찾고 테이블 내에서 공간을 재사용할 수 있도록 하지만 테이블 파일을 줄이고 반환하려고 열심히 노력하지 않습니다. 운영 체제에 대한 디스크 공간. 디스크를 반납해야 하는 경우 사용할 수 있는 운영 체제 공간토토 결과이 가득 참--- 하지만 요점이 뭐죠? 다시 할당하기만 하면 되는 디스크 공간을 해제합니다. 곧? 보통 빈도 표준토토 결과s는 드물게 사용하는 것보다 더 나은 접근 방식입니다토토 결과이 가득 참13619_13666

대부분의 사이트에서 권장되는 방법은 데이터베이스 전체토토 결과하루에 한 번 하루 중 사용량이 적은 시간, 더 자주 토토 결과청소기로 보충 필요한 경우 크게 업데이트된 테이블. (여러개일 경우 설치된 데이터베이스의 경우 각 데이터베이스를 토토 결과청소하는 것을 잊지 마십시오.vacuumdb스크립트가 도움이 될 수 있습니다.) 일반 사용토토 결과, 아님토토 결과이 가득 참, 일상적인 공간 청소용 회복.

토토 결과이 가득 참권장 대상: 당신이 알고 있는 대부분의 튜플을 삭제한 경우 테이블의 안정된 상태 크기가 다음과 같이 크게 줄어들었습니다.토토 결과 전체의 더욱 공격적인 접근 방식입니다.

내용이 완전히 삭제된 테이블이 있는 경우 자주 함께 해보세요.잘라내기사용하는 것보다삭제다음이 따름토토 결과.

8.2.2. 플래너 업데이트 중 통계

PostgreSQL질의 플래너는 콘텐츠에 대한 통계 정보에 의존합니다. 쿼리에 대한 좋은 계획을 생성하기 위한 테이블입니다. 이것들 통계는 다음에 의해 수집됩니다.분석명령은 단독으로 또는 선택적 단계로 호출할 수 있습니다. 에서토토 결과. 갖는 것이 중요합니다 합리적으로 정확한 통계, 그렇지 않으면 잘못된 계획 선택 데이터베이스 성능이 저하될 수 있습니다.

공간 복구를 위한 토토 결과 청소와 마찬가지로 자주 업데이트되는 통계는 테이블보다 자주 업데이트되는 테이블에 더 유용합니다. 거의 업데이트되지 않는 것. 그러나 크게 업데이트된 테이블의 경우에도 통계가 다음과 같은 경우 통계 업데이트가 필요하지 않을 수 있습니다. 데이터 분포는 크게 변하지 않습니다. 간단한 규칙 엄지손가락은 최소값과 최대값이 얼마인지 생각하는 것입니다. 테이블의 열이 변경됩니다. 예를 들어,타임스탬프행의 시간을 포함하는 열 업데이트는 행에 따라 지속적으로 증가하는 최대값을 갖습니다. 추가되고 업데이트됩니다. 그러한 열에는 아마도 더 많은 것이 필요할 것입니다 URL이 포함된 열보다 통계가 자주 업데이트됩니다. 웹사이트에서 액세스한 페이지의 경우. URL 열은 다음을 수신할 수 있습니다. 자주 변경되지만 통계적 분포는 값은 상대적으로 느리게 변경될 수 있습니다.

실행이 가능합니다분석켜짐 특정 테이블, 심지어는 테이블의 특정 열만 일부 통계를 더 많이 업데이트할 수 있는 유연성이 존재합니다. 애플리케이션에 필요한 경우 다른 것보다 자주. 에서 그러나 실제로는 이 기능의 유용성이 의심스럽습니다. 다음에서 시작됨PostgreSQL 7.2, 분석상당히 빠른 작업입니다 큰 테이블에서도 통계적 무작위를 사용하기 때문에 모든 테이블을 읽는 대신 테이블의 행을 샘플링합니다. 단일 행. 그래서 그냥 실행하는 것이 훨씬 더 간단할 것입니다. 자주 전체 데이터베이스를 삭제합니다.

팁:열별로 조정했지만분석빈도가 그리 높지 않을 수 있습니다. 생산적이라면, 당신은 그 일을 할 가치가 있다고 생각할 수도 있습니다 열별로 세부 수준 조정 통계 수집자:분석. 에서 많이 사용되는 열어디절이 있고 매우 불규칙한 데이터가 있음 분포에는 보다 세밀한 데이터 히스토그램이 필요할 수 있습니다. 다른 열. 참조테이블 설정 변경 통계.

대부분의 사이트에서 권장되는 방법은 데이터베이스 전체분석하루에 한 번 하루 중 사용량이 적은 시간; 이는 다음과 유용하게 결합될 수 있습니다. 매일 밤토토 결과. 그러나 다음과 같은 사이트는 상대적으로 느리게 변화하는 테이블 통계는 다음과 같은 사실을 알 수 있습니다. 과잉이며 빈도가 낮습니다.분석실행이면 충분합니다.

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

PostgreSQL의 MVCC 트랜잭션 의미론은 비교 능력에 달려 있습니다. 거래 ID(XID) 숫자: 튜플 현재 트랜잭션의 XID보다 새로운 삽입 XID를 사용합니다. 이다"미래에"그러면 안 됩니다. 현재 거래에 표시됩니다. 하지만 거래 ID 이후 설치 크기가 제한되어 있습니다(이 글을 쓰는 시점에서는 32비트). 오랫동안 실행되는 (40억건 이상의 거래) 고통받을 것이다트랜잭션 ID 랩어라운드: XID 카운터가 0으로 돌아가고 갑자기 과거에 있었던 거래가 미래에 있는 것처럼 보인다 --- 이는 출력이 보이지 않게 됨을 의미합니다. 즉, 치명적인 데이터 손실. (사실 데이터는 아직 남아있습니다만, 당신이 그것을 얻을 수 없다면 그것은 차갑고 편안함입니다.)

이전포스트그레SQL7.2, XID 랩어라운드에 대한 유일한 방어는 다시-initdb적어도 40억 건의 거래마다. 물론 이것은 트래픽이 많은 환경에서는 그다지 만족스럽지 않았습니다. 더 나은 솔루션이 고안되었습니다. 새로운 접근 방식 없이 설치를 무기한으로 유지할 수 있습니다.initdb또는 모든 종류의 재시작. 는 가격은 유지 관리 요구 사항입니다.데이터베이스의 모든 테이블은 다음과 같아야 합니다. 10억 건의 거래마다 최소 한 번씩 토토 결과 처리됨.

실제로 이는 부담스러운 요구사항은 아니지만, 이를 충족하지 못하면 완전한 데이터 손실이 발생할 수 있습니다. (디스크 공간 낭비나 성능 저하뿐만 아니라), 일부 특별한 데이터베이스 관리자가 마지막 이후 시간 추적토토 결과. 이 섹션의 나머지 부분에서는 다음을 제공합니다. 세부사항.

XID 비교에 대한 새로운 접근 방식은 두 가지 특별한 차이점을 구별합니다. XID, 숫자 1 및 2(부트스트랩XID그리고FrozenXID). 이 두 XID는 항상 모든 일반 XID보다 오래된 것으로 간주됩니다. 일반 XID (2보다 큰 것)은 modulo-2를 사용하여 비교됩니다.31산술. 이는 모든 일반 XID에 대해 두 개의 XID가 있음을 의미합니다. 10억 개의 XID입니다."나이가 많은"그리고 20억이군요"최신"; 다르게 말하면 일반 XID 공간은 원형이라는 것입니다. 끝점이 없습니다. 따라서 일단 튜플이 생성되면 특정 일반 XID인 경우 튜플은 다음과 같이 나타납니다."과거에"다음 2개를 위해 10억 개의 거래, 우리가 말하는 일반 XID에 관계없이 약. 20억이 넘은 후에도 튜플이 여전히 존재하는 경우 거래가 갑자기 미래에 있는 것처럼 보일 것입니다. 받는 사람 데이터 손실을 방지하려면 이전 튜플에 XID를 다시 할당해야 합니다.FrozenXID그들이 도달하기 전에 언젠가 20억 건의 거래가 이루어진 기록입니다. 일단 할당되면 이 특별한 XID는 다음과 같습니다."과거에"모든 일반 거래에 랩어라운드 문제에 관계없이 그러한 튜플은 삭제되기 전까지는 유효합니다. 기간에 관계없이 삭제됩니다. 이 XID 재할당은 다음에서 처리됩니다.토토 결과.

토토 결과의 일반적인 정책은 다음과 같습니다. 재할당FrozenXID모든 튜플에 Normal XID는 과거 10억 건 이상의 거래를 기록했습니다. 이 정책은 원래 삽입 XID가 그렇지 않을 때까지 보존합니다. 더 이상 관심을 끌 가능성이 높습니다(사실 대부분의 튜플은 아마도 존재하지 않고 살고 죽을 것입니다"냉동"). 이 정책을 통해 최대 안전 간격토토 결과22265_22645

주기적 이후토토 결과이 필요합니다 어쨌든 앞에서 설명한 이유로 인해 그럴 가능성은 거의 없습니다. 어떤 테이블도 10억 동안 토토 결과 청소되지 않을 것입니다. 거래. 하지만 관리자가 이러한 제약을 보장할 수 있도록 돕기 위해 충족되었습니다.토토 결과트랜잭션 ID를 저장합니다. 시스템 테이블의 통계pg_database. 특히,datfrozenxid데이터베이스의 필드pg_database행은 완료 시 업데이트됩니다. 데이터베이스 전체의 토토 결과 작업(예:토토 결과특정 테이블의 이름을 지정하지 않음). 는 이 필드에 저장된 값은 동결 컷오프 XID입니다. 그것에 의해 사용됨토토 결과명령. 모두 이 컷오프 XID보다 오래된 일반 XID는 다음을 갖습니다. 다음으로 대체되었습니다.FrozenXID그 안에 데이터베이스. 이 정보를 조사하는 편리한 방법은 다음과 같습니다. 쿼리를 실행합니다

pg_database에서 datname, 나이(datfrozenxid) 선택;

나이열은 숫자를 측정합니다 컷오프 XID부터 현재까지의 거래 거래의 XID.

표준 동결 정책에 따르면,나이열은 10억부터 시작됩니다. 새로 비워진 데이터베이스. 때나이20억에 가까워지면 데이터베이스는 다음과 같아야 합니다. 랩어라운드 실패의 위험을 피하기 위해 다시 토토 결과 청소기로 청소합니다. 권장되는 방법은 각 데이터베이스를 한 번 이상 정리하는 것입니다. 5억(5억) 건의 거래마다 충분한 안전 마진을 제공하십시오. 이 규칙을 충족하기 위해 각 데이터베이스 전체토토 결과자동으로 있는 경우 경고를 전달합니다.pg_database다음을 표시하는 항목나이15억 건 이상의 거래 중, 예:

play=# 토토 결과;
경고: 일부 데이터베이스는 1613770184 트랜잭션에서 정리되지 않았습니다.
        533713463 거래 내에서 토토 결과 청소기로 청소하는 것이 좋습니다.
        또는 랩어라운드 오류가 발생할 수 있습니다.
토토 결과

토토 결과와 함께정지옵션은 보다 공격적인 동결을 사용합니다. 정책: 튜플은 충분히 오래되면 동결됩니다. 모든 공개 거래에서 좋은 것으로 간주됩니다. 특히 만약에 a토토 결과 동결다음에서 수행됩니다. 그렇지 않으면 유휴 데이터베이스인 경우 다음이 보장됩니다.모두해당 데이터베이스의 튜플은 얼어붙다. 따라서 데이터베이스가 수정되지 않는 한 어쨌든, 이를 피하기 위해 후속 토토 결과 청소가 필요하지 않습니다. 거래 ID 랩어라운드 문제. 이 기술은 다음에서 사용됩니다.initdb준비하기 위해템플릿0데이터베이스. 또한 다음과 같은 용도로 사용되어야 합니다. 표시할 사용자 생성 데이터베이스를 준비합니다.dataallowconn = 거짓inpg_database, 왜냐하면 데이터베이스를 비우기 위한 편리한 방법이 없기 때문입니다. 연결할 수 없습니다. 참고하세요토토 결과에 대한 자동 경고 메시지 토토 결과화되지 않은 데이터베이스는 무시됩니다.pg_database다음을 포함한 항목dataallowconn = 거짓, 이러한 데이터베이스에 대해 잘못된 경고를 제공하는 것을 방지하기 위해 따라서 그러한 데이터베이스가 올바른지 확인하는 것은 귀하에게 달려 있습니다. 올바르게 동결되었습니다.