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

8.2. 일상 토토 결과 청소기

PostgreSQL's토토 결과명령은 정기적으로 실행해야합니다 몇 가지 이유 :

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

  2. postgresql쿼리 플래너.

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

의 주파수와 범위토토 결과s 이러한 각 이유에 대해 수행 된 각 설치의 요구. 따라서 데이터베이스 관리자 이러한 문제를 이해하고 적절한 것을 개발해야합니다 유지 보수 전략. 이 섹션은 설명에 중점을 둡니다 높은 수준의 문제; 명령 구문 등에 대한 자세한 내용은 참조토토 결과명령 참조 페이지.

시작PostgreSQL7.2, 표준 형태의토토 결과일반 데이터베이스 작업 (SELECTS, Inserts, 업데이트, 삭제이지만 테이블 스키마의 변경되지는 않습니다). 루틴 따라서 토토 결과 청소기는 이전과 마찬가지로 거의 방해가되지 않습니다. 출시되며 일정을 잡는 것이 중요하지 않습니다. 낮은 날 시간.

8.2.1. 디스크 복구 공간

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

명확하게, 자주 업데이트 또는 삭제를받는 테이블 거의없는 테이블보다 더 자주 토토 결과 청소기를 청소해야합니다. 업데이트. 정기적 인 설정에 유용 할 수 있습니다Cron토토 결과 청소기 만 선택한 작업 테이블, 자주 바뀌지 않는 것으로 알려진 테이블을 건너 뛰는 테이블. 둘 다 큰 경우에만 도움이 될 것입니다. 무겁게 업데이트 된 테이블과 큰 드물게 업데이트 된 테이블 --- 작은 테이블을 토토 결과 청소기에 청소하는 데 드는 추가 비용은 가치가 없습니다. 걱정.

표준 형태토토 결과최고입니다 상당한 수준의 정상 상태를 유지한다는 목표와 함께 사용 디스크 공간 사용. 표준 형태는 오래된 튜플을 찾습니다 테이블 내에서 재사용 할 수있는 공간을 사용할 수 있지만 테이블 파일을 단축하고 반환하기 위해 매우 열심히 노력하지 않습니다. 운영 체제에 대한 디스크 공간. 디스크를 반환 해야하는 경우 사용할 수있는 운영 체제의 공간토토 결과 Full--- 그러나 요점은 무엇입니까 다시 할당 해야하는 디스크 공간 출시 곧? 적당히 빈번한 표준토토 결과s는 드물게 더 나은 접근 방식입니다토토 결과 Full유지 관리 심하게 업데이트 된 테이블.

대부분의 사이트에 대한 권장 사례는 a를 예약하는 것입니다 데이터베이스 전체토토 결과하루에 한 번 a 낮은 사용 시간은 더 자주 토토 결과 청소기로 보충됩니다 필요한 경우 무겁게 업데이트 된 테이블. (여러 사람이있는 경우 설치의 데이터베이스는 각각 토토 결과 청소기를 청소하는 것을 잊지 마십시오. 그만큼Vacuumdb스크립트가 도움이 될 수 있습니다.) 평원 사용토토 결과, 아님토토 결과 Full, 공간에 대한 일상적인 토토 결과 청소기 회복.

토토 결과 Full권장됩니다 대부분의 튜플을 삭제 한 경우 테이블의 정상 상태 크기는 실질적으로토토 결과 가득한의 더 공격적인 접근.

내용물이 완전히 삭제되는 테이블이있는 경우 너무 자주,Truncate사용하지 않고삭제그 뒤에토토 결과.

8.2.2. 업데이트 플래너 통계

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

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

실행할 수 있습니다분석on 특정 테이블 및 테이블의 특정 열만 있으므로 일부 통계를 더 업데이트하기 위해 유연성이 존재합니다 응용 프로그램에 필요한 경우 다른 사람보다 자주 다른 사람보다 자주. ~ 안에 그러나 연습을하면이 기능의 유용성은 의심 스럽다. 시작PostgreSQL 7.2, 분석는 상당히 빠른 작업입니다 큰 테이블에서도 통계 랜덤을 사용하기 때문에 모든 것을 읽지 않고 테이블 행의 샘플링 단일 행. 그래서 그냥 실행하는 것이 훨씬 간단 할 것입니다. 전체 데이터베이스가 너무 자주.

팁 :콜럼 당 조정이지만분석주파수는 그리되지 않을 수 있습니다 생산적, 당신은 그것이 가치가 있다는 것을 알 수 있습니다 세부의 세부 수준의 컬럼 당 조정 에 의해 수집 된 통계분석. 크게 사용되는 열여기서조항은 불규칙한 데이터를 가지고 있습니다 분포는보다 미세한 곡물 데이터 히스토그램이 필요할 수 있습니다 다른 열. 보다ALTER 테이블 세트 통계.

대부분의 사이트에 대한 권장 실습은 a를 예약하는 것입니다 데이터베이스 전체분석하루에 한 번 a 낮은 시간의 시간; 이것은 유용하게 결합 될 수 있습니다 야간토토 결과. 그러나 사이트와 함께 비교적 느리게 변화하는 테이블 통계는이를 발견 할 수 있습니다 과잉이며 덜 주파수분석실행이 충분합니다.

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

PostgreSQL'S MVCC 거래 시맨틱은 비교할 수있는 것에 달려 있습니다 트랜잭션 ID (xid) 숫자 : 튜플 현재 트랜잭션의 XID보다 새로 삽입 XID를 사용하여 이다"미래의"현재 거래에 표시됩니다. 그러나 트랜잭션 ID 이후 크기가 제한되어 있습니다 (이 글에서 32 비트) 설치 그것은 오랫동안 실행됩니다 (40 억 이상의 거래) 고통받을트랜잭션 ID 랩 어라운드: XID 카운터는 0으로 감싸고 갑자기 과거에 있었던 거래는 미래에있는 것으로 보입니다. --- 즉, 출력이 보이지 않게됩니다. 요컨대, 치명적인 데이터 손실. (실제로 데이터는 여전히 존재하지만 당신이 그것을 얻을 수 없다면 그것은 차갑습니다.)

이전PostgreSQL7.2, XID 랩 어라운드에 대한 유일한 방어는 re였습니다.initdb적어도 40 억 건의 거래. 물론 이것은 교통량이 많은 것에 대해 만족스럽지 않았습니다 사이트이므로 더 나은 솔루션이 고안되었습니다. 새로운 접근법 설치가 무기한 상태로 유지 될 수 있습니다.initdb또는 모든 종류의 재시작. 그만큼 가격은이 유지 보수 요구 사항입니다.데이터베이스의 모든 테이블은 있어야합니다 적어도 10 억 건의 거래마다 토토 결과 청소기.

실제로 이것은 번거로운 요구 사항이 아니지만 충족에 실패한 결과 완전한 데이터 손실이 될 수 있습니다. (낭비 된 디스크 공간이나 느린 성능이 아니라), 일부 특별 데이터베이스 관리자가 유지하는 데 도움이되는 조항이 이루어졌습니다 마지막 이후의 시간 추적토토 결과. 이 섹션의 나머지 부분은 다음을 제공합니다 세부.

XID 비교에 대한 새로운 접근 방식은 두 가지 특별한 것을 구별합니다 xids, 숫자 1 및 2 (bootstrapxidfrozenxid). 이 두 xid는입니다 항상 모든 정상 XID보다 오래된 것으로 간주됩니다. 정상적인 xids (2보다 큰 것) Modulo-2를 사용하여 비교됩니다31산술. 이것은 모든 정상 XID에 대해 두 가지가 있음을 의미합니다. 10 억 xids"구형"및 20 억"최신"; 말하는 또 다른 방법은 일반 XID 공간이 원형이라는 것입니다. 엔드 포인트가 없습니다. 따라서 일단 튜플이 만들어졌습니다 특정 정상적인 xid, 튜플은"과거"다음 두 가지 우리가 말하는 일반적인 xid에 상관없이 10 억 트랜잭션 에 대한. 튜플이 20 억 이상 이후에도 존재한다면 거래는 갑자기 미래에있는 것처럼 보일 것입니다. 에게 데이터 손실 방지, 오래된 튜플이 XID를 재 할당해야합니다frozenxid그들이 도달하기 전에 언젠가 20 억 트랜잭션 오래된 마크. 일단 그들이 할당되면 이 특별한 xid, 그들은"과거"모든 정상 거래 랩 어라운드 문제에 관계없이 그러한 튜플은 아무리 길든 삭제 될 때까지 좋습니다. 이것 XID의 재 할당은에 의해 처리됩니다.토토 결과.

토토 결과의 정상 정책입니다 재 할인frozenxida 과거에 10 억 개가 넘는 거래. 이것 정책은 원래 삽입 XID를 보존하지 않을 때까지 보존합니다. 더 이상 관심을 가질 가능성이 높습니다 (실제로 대부분의 튜플은 아마도 살고 죽지 않고 죽을 것입니다"Frozen"). 이 정책을 사용하면 최대 금고입니다 간격토토 결과모든 테이블 정확히 10 억 건의 거래 : 더 오래 기다리면 충분히 나이가 들지 않은 튜플이 지난번에 재 할당 된 것은 이제 20 억 명이 넘는 거래입니다. 오래되고 미래에 싸여 있습니다 --- 즉 너. (물론, 20 억 명의 후에 다시 나타날 것입니다 거래이지만 도움이되지 않습니다.)

정기 이후토토 결과s가 필요합니다 어쨌든 앞에서 설명한 이유 때문에 그럴 가능성은 거의 없습니다 모든 테이블은 10 억 명 정도 오랫동안 토토 결과 청소기를 청소하지 않습니다. 업무. 그러나 관리자가 이러한 제약을 보장 할 수 있도록 도와줍니다 만났다,토토 결과저장 거래 ID 시스템 테이블의 통계pg_database. 특히datfrozenxid데이터베이스 필드pg_database행이 완료되면 업데이트됩니다 모든 데이터베이스 전체 토토 결과 작업 (예 :토토 결과특정 테이블의 이름을 지정하지 않음). 그만큼 이 필드에 저장된 가치는 Freeze Cutoff XID입니다. 그것에 의해 사용토토 결과명령. 모두 이 컷오프 XID보다 오래된 일반 XID는 대체되었습니다frozenxid그 안에 데이터 베이스. 이 정보를 조사하는 편리한 방법은 다음과 같습니다 쿼리 실행

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

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

표준 동결 정책을 사용하여Age열은 10 억에서 시작됩니다 신선하게 바신 데이터베이스. 때Age20 억에 접근하려면 데이터베이스가 있어야합니다 랩 어라운드 실패의 위험을 피하기 위해 다시 토토 결과 청소기. 권장 관행은 각 데이터베이스를 최소 한 번은 토토 결과 청소기입니다 마다 5 억 (5 억)의 거래 안전 마진을 충분히 제공하십시오. 이 규칙을 충족시키기 위해 각각 데이터베이스 전체토토 결과자동으로 어떤 경우 경고를 전달합니다pg_databaseAge15 억 건 이상의 거래 예:

play =# 토토 결과;
경고 : 일부 데이터베이스는 1613770184 거래에서 청소되지 않았습니다.
        533713463 트랜잭션 내에서 더 나은 토토 결과 청소기,
        또는 랩 어라운드 실패가있을 수 있습니다.
토토 결과

토토 결과withFreeze옵션은보다 공격적인 동결을 사용합니다 정책 : 튜플이 충분히 나이가 들면 얼어 붙습니다. 모든 공개 거래에서 좋은 것으로 간주됩니다. 특히, a토토 결과 동결에서 수행됩니다 그렇지 않으면 단일 데이터베이스, 보장됩니다.all해당 데이터베이스의 튜플은 그렇습니다 얼어 붙어야합니다. 따라서 데이터베이스가 수정되지 않는 한 어쨌든 피하기 위해 후속 토토 결과 청소기가 필요하지 않습니다. 트랜잭션 ID 랩 어라운드 문제. 이 기술은에 의해 사용됩니다.initdb준비하려면Template0데이터베이스. 또한 익숙해 져야합니다 표시 할 사용자가 만든 데이터베이스 준비datallowconn = 거짓inpg_database, 데이터베이스를 청소하는 편리한 방법이 없기 때문에 연결할 수 없습니다. 참고토토 결과의 자동 경고 메시지 비 바 검사 데이터베이스는 무시할 것입니다pg_database출품작datallowconn = 거짓, 이 데이터베이스에 대한 잘못된 경고를 피하기 위해; 따라서 그러한 데이터베이스가 올바르게 얼어 붙었다.