Warning: Undefined array key "" in /var/www/html/uzcms/ohdoggoods.com/incs/InnerPageRandTDK.php on line 4536 Deprecated: str_contains(): Passing null to parameter #2 ($needle) of type string is deprecated in /var/www/html/uzcms/ohdoggoods.com/incs/InnerPageRandTDK.php on line 2343 PostgreSQL: Tài liệu: 8.0: Nhiệm vụ kèo chấp bóng đá hôm nay trì cơ sở dữ liệu thông thường
지원 버전 :현재(173677_380816 / 15 / 14 / 13
개발 버전 :18 / Devel
지원되지 않은 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

21 장. 일상적인 데이터베이스 유지 보수 작업

해야 할 일상적인 유지 보수 집안이 있습니다. A를 유지하기 위해 정기적으로 수행PostgreSQL11948_12092Cron스크립트. 그러나 데이터베이스입니다 적절한 스크립트를 설정하는 관리자의 책임 및 그들이 성공적으로 실행되는지 확인하려면

하나의 명백한 유지 보수 작업은 백업 사본 생성입니다. 정기 일정에 따른 데이터. 최근 백업이 없으면 있습니다 재앙 후 회복 가능성 없음 (디스크 고장, 화재, 실수로 중요한 테이블을 삭제합니다). 백업 및 이용 가능한 복구 메커니즘PostgreSQL|22 장.

12699_12759"진공 청소기"12795_12847섹션 21.1.

주기적으로주의가 필요한 다른 것은 로그 파일입니다. 관리. 이것은에서 논의됩니다.섹션 21.3.

postgresql유지 보수가 적습니다 다른 데이터베이스 관리 시스템에 비해 그래도 여전히, 이러한 작업에 대한 적절한주의는 시스템에 대한 즐겁고 생산적인 경험.

21.1. 일상 진공 청소기

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

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

  2. PostgreSQL쿼리 플래너.

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

의 주파수와 범위진공14178_14523진공참조 페이지.

시작postgresql7.2, 표준 형태진공can 일반 데이터베이스 작업과 병렬로 실행됩니다 (SELECTS, 삽입, 업데이트, 삭제이지만 테이블 변경은 없습니다 정의). 따라서 일상적인 진공 청소기는 거의 다릅니다 이전 릴리스에서 방해가되었으며 낮은 일 시간에 예약을 시도하는 것이 중요합니다.

시작postgresql8.0, 조정할 수있는 구성 매개 변수가 있습니다. 배경 진공 청소기의 성능 영향을 더욱 줄입니다. 보다섹션 16.4.3.4.

21.1.1. 디스크 복구 공간

정상PostgreSQL작동, an업데이트또는삭제의 행은 즉시 제거되지 않습니다 행의 이전 버전. 이 접근법은 필요합니다 Multiversion Concurrency Control의 이점을 얻으십시오 (참조12 장15899_16273진공.

명확하게, 자주 업데이트 또는 삭제를받는 테이블 테이블보다 더 자주 진공 청소기를 청소해야합니다. 거의 업데이트되지 않았습니다. 정기적 인 설정에 유용 할 수 있습니다Cron작업진공테이블을 건너 뛰는 선택된 테이블 만 그것은 자주 변하지 않는 것으로 알려져 있습니다. 이것은 아마도 가능할 것입니다 크게 업데이트 된 테이블이 모두 있으면 도움이됩니다 큰 거의 거의없는 테이블-진공 청소기의 추가 비용 작은 테이블은 걱정할 가치가 없습니다.

두 가지 변형이 있습니다진공명령. 로 알려진 첫 번째 형태"게으른 진공"또는 Just진공, 표에서 마크가 만료 된 데이터와 향후 재사용을위한 색인;not이 만료 된 데이터가 즉시 사용하는 공간. 따라서, 테이블 파일이 단축되지 않고 파일의 사용하지 않은 공간 운영 체제로 반환되지 않습니다. 이 변형진공동시에 실행할 수 있습니다 일반 데이터베이스 작업.

두 번째 양식은입니다.진공 가득한명령. 이것은보다 공격적인 알고리즘을 사용합니다 만료 된 행 버전으로 소비되는 공간을 되 찾습니다. 어느 에 의해 해방되는 공간진공 Full즉시 운영 체제로 반환됩니다. 불행히도,이 변형의진공명령은 독점 잠금을 획득합니다 각 테이블 동안진공 Fullis 처리. 따라서 자주 사용진공 Full매우 부정적 일 수 있습니다 동시 데이터베이스 쿼리의 성능에 미치는 영향.

표준 형태진공is 상당한 수준을 유지하려는 목표로 가장 잘 사용됩니다. 디스크 공간의 정상 사용. 디스크를 반환 해야하는 경우 사용할 수있는 운영 체제의 공간진공 Full18520_18659진공실행은보다 더 나은 접근 방식입니다 드문진공 Full무거운 업데이트 된 테이블 유지.

대부분의 사이트에 대한 권장 실습은 예약입니다 데이터베이스 전체진공하루에 한 번 a 낮은 사용 시간은 더 자주 보충됩니다 필요한 경우 무거운 업데이트 된 테이블의 진공 청소기. (일부 데이터 속도가 매우 높은 설치 가감진공바쁜 테이블 AS 몇 분마다 종종.) 여러 사람이있는 경우 클러스터의 데이터베이스, 잊지 마십시오진공각각; 프로그램VACUUMDB도움이 될 수 있습니다.

팁 :thecontrib/pg_autovacuum프로그램이 될 수 있습니다 고주파 진공 청소기를 자동화하는 데 유용합니다 운영.

진공 Full19766_19953진공 가득한의 더 공격적인 접근. 평원 사용진공, 아님진공 가득한, 우주 복구를위한 일상적인 진공 청소기.

내용이 삭제되는 테이블이있는 경우 정기적 인 기준,로하는 것을 고려하십시오.Truncate사용하지 않고삭제그 뒤에진공. Truncate표의 전체 내용을 즉시 제거합니다 후속 요구진공또는진공 Full지금은 디스크 공간을 사용하지 않습니다.

21.1.2. 업데이트 플래너 통계

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

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

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

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

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

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

PostgreSQL24553_24645xid) 숫자 : 삽입 xid가 현재 트랜잭션의 XID는"에서 미래"전류에 보이지 않아야합니다 거래. 그러나 트랜잭션 ID는 크기가 제한되어 있기 때문에 (32 이 글을 쓰는 데 비트) 오랫동안 실행되는 클러스터 (40 억 개 이상의 거래) 고통트랜잭션 ID 랩 어라운드25117_25434

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

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

XID 비교에 대한 새로운 접근 방식은 두 가지를 구별합니다 특수 XID, 번호 1 및 2 (bootstrapxidandfrozenxid). 이 두 XID는 항상입니다 모든 정상 XID보다 오래된 것으로 간주됩니다. 정상적인 xids (그것들 2)가 Modulo-2를 사용하여 비교됩니다31산술. 이것은 모든 정상적인 XID에 대해 있음을 의미합니다 20 억 개의 xids"구형""최신"; 또 다른 방법은 일반 XID 공간이 끝점이없는 원형. 따라서 한 번 행 버전이 있습니다 특정 일반 XID, 행 버전으로 만들어졌습니다."과거"27302_27608frozenxid그들이 도달하기 전에 언젠가 2 억 번의 트랜잭션 오래된 마크. 일단 그들이 할당되면 이 특별한 xid, 그들은"과거"모든 정상 트랜잭션 랩 어라운드 문제와 그러한 행 버전에 관계없이 아무리 길든 삭제 될 때까지 좋을 것입니다. 이것 XID의 재 할당은에 의해 처리됩니다.진공.

진공의 정상 정책입니다 재 할인frozenxid모든 행으로 일반 XID가 10 억 명 이상의 거래를 가진 버전 과거에. 이 정책은 원래 삽입 XID를 보존합니다 더 이상 관심이 없을 때까지. (사실은, 대부분의 행 버전은 아마도 살아 나고 죽을 것입니다. 존재"Frozen".)이 정책을 통해 사이의 최대 안전한 간격28605_28613모든 테이블에서 실행되는 것은 정확히 하나입니다 10 억 거래 : 더 오래 기다리면 가능합니다 재 할당하기에 충분히 오래되지 않은 행 버전 지난번에 20 억 명이 넘는 거래가되었습니다. 미래에 싸여있었습니다. 즉, 당신에게 잃어 버렸습니다. (물론, 20 억 명의 후에 다시 나타날 것입니다 거래이지만 도움이되지 않습니다.)

정기 이후진공실행은입니다 어쨌든 앞에서 설명한 이유로 필요합니다 어떤 테이블이든 오랫동안 진공 청소기를 청소하지 않을 것 같지 않습니다. 10 억 거래. 그러나 관리자가 보장하도록 돕기 위해 이 제약 조건이 충족됩니다.진공시스템 테이블에 트랜잭션 ID 통계를 저장pg_database. 특히datfrozenxid데이터베이스 열pg_database행에서 행이 업데이트됩니다 데이터베이스 전체의 완료진공작동 (예 :진공특정 테이블의 이름을 짓지 않음). 이 필드에 저장된 값은 Freeze Cutoff XID입니다. 그것에 의해 사용되었습니다진공명령. 모두 이 컷오프 XID보다 오래된 일반 XID는 대체되었습니다frozenxid내 해당 데이터베이스. 이 정보를 조사하는 편리한 방법 쿼리를 실행하는 것입니다

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

theAge열 측정 컷오프 XID에서 현재로의 트랜잭션 수 거래의 xid.

30391_30432Age열은 10 억에서 시작됩니다 신선하게 바신 데이터베이스. 때Age20 억에 이르기까지 데이터베이스는해야합니다 랩 어라운드 실패의 위험을 피하기 위해 다시 진공 청소기를 청소하십시오. 권장 연습은진공각 데이터베이스는 적어도 50 억 달러 (500)마다 한 번 이상 충분한 안전을 제공하기 위해 백만) 거래 여유. 이 규칙을 충족시키기 위해 각 데이터베이스 전체진공자동으로 경고를 전달합니다pg_database항목 표시age1.5 이상 10 억 거래, 예 :

play =# 진공;
경고 : 일부 데이터베이스는 1613770184 거래에서 청소되지 않았습니다.
힌트 : 533713463 트랜잭션 내에서 진공 청소기를 진공 청소치하거나 랩 어라운드 실패가 발생할 수 있습니다.
진공

진공with동결옵션은보다 공격적인 동결을 사용합니다 정책 : 행 버전은 충분히 오래되면 동결됩니다. 모든 공개 거래에서 좋은 것으로 간주됩니다. 특히, a진공 동결에서 수행됩니다 그렇지 않으면 단일 데이터베이스, 보장됩니다.all그 중 행 버전 데이터베이스가 동결됩니다. 따라서 데이터베이스가있는 한 어떤 식 으로든 수정되지 않으면 후속가 필요하지 않습니다. 거래 ID 랩 어라운드 문제를 피하기 위해 진공 청소기. 이것 기술은에 의해 사용됩니다.initdbto 준비Template0데이터베이스. 그것 또한 사용자가 만든 데이터베이스를 준비하는 데 사용해야합니다 표시 될DatallowConn=거짓inpg_database편리하지 않기 때문에 방법진공귀하의 데이터베이스 연결할 수 없습니다. 참고진공's 비 바 검사 데이터베이스에 대한 자동 경고 메시지는 할 것입니다 무시하다pg_database출품작DatallowConn=false, 허위 경고를 피하기 위해 이 데이터베이스에 대해; 그러므로 보장하는 것은 당신에게 달려 있습니다 그러한 데이터베이스는 올바르게 동결됩니다.

경고

거래에 대한 안전을 확인하십시오 랩 어라운드, 진공 청소기가 필요합니다Every33324_33378Every적어도 데이터베이스 10 억마다 한 번. 우리는 데이터를 보았습니다 사람들이 그들을 결정하는 사람들로 인한 손실 상황 활성 사용자 테이블을 진공 청소기로 진공 청소기로 청소할 필요가 있습니다. 데이터베이스 전체 진공 명령을 발행하는 대신. 그것은 잘 작동하는 것처럼 보일 것입니다 ... 잠시 동안.