포스트그레SQL의메이저 토토 사이트명령반드시다음 기간 동안 정기적으로 실행됩니다. 몇 가지 이유:
업데이트된 디스크 공간을 복구하거나 재사용하려면 행이 삭제되었습니다.
다음에서 사용하는 데이터 통계를 업데이트하려면PostgreSQL쿼리 플래너.
다음으로 인한 매우 오래된 데이터의 손실을 방지하기 위해거래 ID 랩어라운드.
의 빈도와 범위메이저 토토 사이트이러한 각 이유로 수행되는 작업은 다양합니다. 각 사이트의 필요에 따라. 그러므로 데이터베이스 관리자는 이러한 문제를 이해하고 적절한 유지 관리 전략. 이 섹션에서는 다음에 중점을 둡니다. 높은 수준의 문제를 설명합니다. 명령에 대한 자세한 내용은 구문 등은 다음을 참조하세요.메이저 토토 사이트참조 페이지.
의 표준형메이저 토토 사이트실행 가능 프로덕션 데이터베이스 작업과 병행하여. 다음과 같은 명령은선택, 삽입, 업데이트및삭제하지만 계속해서 정상적으로 작동할 것입니다. 다음을 사용하여 테이블 정의를 수정할 수 없습니다. 다음과 같은 명령은테이블 변경 열 추가청소되는 동안. 또한,메이저 토토 사이트상당한 양의 I/O 트래픽이 필요합니다. 이로 인해 다른 활성 세션의 성능이 좋지 않습니다. 있다 줄이기 위해 조정할 수 있는 구성 매개변수 백그라운드 메이저 토토 사이트 청소가 성능에 미치는 영향 - 참조섹션 17.4.4.
필요한 작업을 수행하기 위한 자동화된 메커니즘메이저 토토 사이트작업이 추가되었습니다포스트그레SQL8.1. 참조섹션 22.1.4.
정상적으로PostgreSQL작업, an업데이트또는삭제행은 즉시 제거되지 않습니다. 행의 이전 버전입니다. 이러한 접근 방식은 다음과 같은 이점을 얻기 위해 필요합니다. 다중 버전 동시성 제어의 이점(참조12장): 행 버전은 다음과 같을 수 없습니다. 잠재적으로 다른 사람에게 표시되는 동안 삭제되었습니다. 거래. 하지만 결국에는 오래되었거나 삭제된 행이 버전은 더 이상 어떤 거래에도 관심이 없습니다. 공간 이를 방지하려면 새 행에서 재사용하기 위해 차지하는 공간을 회수해야 합니다. 디스크 공간 요구 사항이 무한히 증가합니다. 이는 다음에 의해 수행됩니다. 달리기메이저 토토 사이트.
분명히 자주 업데이트되거나 삭제되는 테이블입니다 자주 청소하지 않는 테이블보다 더 자주 청소해야 합니다. 업데이트되었습니다. 주기적으로 설정하는 것이 유용할 수 있습니다.크론할 일메이저 토토 사이트선택한 테이블만, 테이블 건너뛰기 자주 바뀌지 않는 것으로 알려져 있습니다. 이것은 아마도 크게 업데이트된 대규모 테이블과 대규모 테이블이 모두 있는 경우에 유용합니다. 자주 업데이트되지 않는 테이블 - 작은 테이블을 청소하는 데 드는 추가 비용 테이블은 걱정할 만큼 충분하지 않습니다.
다음에는 두 가지 변형이 있습니다.메이저 토토 사이트명령. 첫 번째 형식은"게으른 메이저 토토 사이트"또는 그냥메이저 토토 사이트, 테이블과 인덱스에 만료된 데이터를 표시합니다. 향후 재사용을 위해; 그렇죠아님공간 회수 시도 공간이 데이터의 끝에 있지 않는 한 만료된 데이터에서 사용됩니다. 테이블과 전용 테이블 잠금 장치를 쉽게 얻을 수 있습니다. 파일의 시작 부분이나 중간 부분에 사용되지 않은 공간이 발생하지 않습니다. 파일이 단축되고 공간이 운영 체제로 반환됩니다. 시스템. 이 변형은메이저 토토 사이트될 수 있습니다 일반 데이터베이스 작업과 동시에 실행됩니다.
두 번째 형태는메이저 토토 사이트이 가득 참명령. 이는 회수를 위해 보다 공격적인 알고리즘을 사용합니다. 만료된 행 버전에서 소비한 공간입니다. 그 어떤 공간이라도 에 의해 해제됨메이저 토토 사이트 가득 참즉시 운영 체제로 돌아왔습니다. 불행하게도 이 변종은 의메이저 토토 사이트명령은 각 테이블에 대한 독점 잠금 동안메이저 토토 사이트 전체처리 중입니다. 따라서 자주 사용하는메이저 토토 사이트이 가득 참극단적으로 동시 데이터베이스 성능에 부정적인 영향 쿼리.
의 표준 형식메이저 토토 사이트최고입니다 상당히 수준 높은 정상상태를 유지하려는 목적으로 사용됩니다. 디스크 공간 사용량. 디스크 공간을 디스크 공간으로 되돌려야 하는 경우 사용할 수 있는 운영체제메이저 토토 사이트 전체— 하지만 디스크 공간을 해제하는 이유는 무엇입니까? 곧 다시 할당되어야 겠죠? 적당히 자주 표준메이저 토토 사이트달리는 것이 더 좋습니다 드물게 접근함메이저 토토 사이트이 가득 참대량 업데이트된 테이블을 유지하기 위해 실행됩니다.
대부분의 메이저 토토 사이트에서 권장되는 방법은 데이터베이스 전체메이저 토토 사이트하루에 한 번 하루 중 사용량이 적은 시간, 더 자주 메이저 토토 사이트청소기로 보충 필요한 경우 크게 업데이트된 테이블. (일부 설치 매우 높은 업데이트 속도로 가장 바쁜 테이블을 메이저 토토 사이트 청소기로 청소합니다. 몇 분에 한 번씩 자주 발생합니다.) 클러스터의 데이터베이스, 잊지 마세요메이저 토토 사이트각각; 프로그램vacuumdb도움이 될 것 같습니다.
메이저 토토 사이트이 가득 참다음에 권장됩니다. 당신이 행의 대부분을 삭제했다는 것을 알고 있는 경우 테이블의 안정된 상태 크기를 줄일 수 있도록 실질적으로메이저 토토 사이트이 가득 참더보기 공격적인 접근. 일반 사용메이저 토토 사이트, 아님메이저 토토 사이트이 가득 참, 일상적인 메이저 토토 사이트 청소용 공간회복을 위해.
전체 내용이 삭제된 테이블이 있는 경우 주기적으로 수행하는 것을 고려하십시오.잘라내기사용하는 것보다삭제다음에 이어메이저 토토 사이트. 잘라내기테이블의 전체 내용을 즉시 제거합니다. 후속 조치가 필요함메이저 토토 사이트또는메이저 토토 사이트 가득 참지금은 사용하지 않는 것을 되찾기 위해 디스크 공간.
그PostgreSQL질의 플래너는 콘텐츠에 대한 통계 정보에 의존합니다. 쿼리에 대한 좋은 계획을 생성하기 위한 테이블입니다. 이것들 통계는 다음에 의해 수집됩니다.분석명령은 단독으로 또는 선택적 단계로 호출할 수 있습니다. 에서메이저 토토 사이트. 갖는 것이 중요합니다 합리적으로 정확한 통계, 그렇지 않으면 잘못된 계획 선택 데이터베이스 성능이 저하될 수 있습니다.
공간 복구를 위한 메이저 토토 사이트 청소와 마찬가지로 자주 업데이트되는 통계는 테이블보다 자주 업데이트되는 테이블에 더 유용합니다. 거의 업데이트되지 않는 것. 그러나 크게 업데이트된 테이블의 경우에도 통계가 다음과 같은 경우 통계 업데이트가 필요하지 않을 수 있습니다. 데이터 분포는 크게 변하지 않습니다. 간단한 규칙 엄지손가락은 최소값과 최대값이 얼마인지 생각하는 것입니다. 테이블의 열이 변경됩니다. 예를 들어,타임스탬프행의 시간을 포함하는 열 업데이트는 행에 따라 지속적으로 증가하는 최대값을 갖습니다. 추가되고 업데이트됩니다. 그러한 열에는 아마도 더 많은 것이 필요할 것입니다 URL이 포함된 열보다 통계가 자주 업데이트됩니다. 웹사이트에서 액세스한 페이지의 경우. URL 열은 다음을 수신할 수 있습니다. 자주 변경되지만 통계적 분포는 값은 상대적으로 느리게 변경될 수 있습니다.
실행이 가능합니다분석켜짐 특정 테이블, 심지어는 테이블의 특정 열만 일부 통계를 더 많이 업데이트할 수 있는 유연성이 존재합니다. 애플리케이션에 필요한 경우 다른 것보다 자주. 에서 그러나 일반적으로 단지 분석하는 것이 가장 좋습니다. 빠른 작업이기 때문에 전체 데이터베이스. 그것은 통계적 무작위 샘플링이 아닌 테이블 행의 통계적 무작위 샘플링 모든 행을 읽습니다.
팁:열별로 조정했지만분석빈도가 그리 높지 않을 수 있습니다. 생산적이라면, 당신은 그 일을 할 가치가 있다고 생각할 수도 있습니다 열별로 세부 수준 조정 통계 수집자:분석. 에서 많이 사용되는 열어디에서절이 있으며 데이터가 매우 불규칙합니다. 분포에는 보다 세밀한 데이터 히스토그램이 필요할 수 있습니다. 다른 열. 보다테이블 설정 변경 통계.
대부분의 메이저 토토 사이트에서 권장되는 방법은 데이터베이스 전체분석하루에 한 번 하루 중 사용량이 적은 시간; 이는 다음과 유용하게 결합될 수 있습니다. 매일 밤메이저 토토 사이트. 그러나 다음과 같은 사이트는 상대적으로 느리게 변화하는 테이블 통계는 다음과 같은 사실을 알 수 있습니다. 과잉이며 빈도가 낮습니다.분석실행이면 충분합니다.
PostgreSQL의 MVCC 트랜잭션 의미론은 비교 능력에 달려 있습니다. 거래 ID(XID) 숫자: 삽입 XID가 다음보다 큰 행 버전 현재 거래의 XID는"안에 미래"현재 사용자에게 표시되어서는 안 됩니다. 거래. 하지만 트랜잭션 ID의 크기가 제한되어 있으므로(32개) 이 글을 쓰는 시점의 비트) 오랫동안 실행되는 클러스터(자세한 내용은 40억 건 이상의 거래)이 어려움을 겪을 것입니다.트랜잭션 ID 랩어라운드: XID 카운터 0으로 돌아가고 갑자기 거래가 발생합니다. 과거에는 미래에 있는 것처럼 보입니다. 즉, 출력이 보이지 않게 됩니다. 즉, 치명적인 데이터 손실입니다. (실제로 데이터는 아직 남아 있지만, 당신은 그것에 접근할 수 없습니다.) 이를 방지하려면 메이저 토토 사이트청소기가 필요합니다. 모든 데이터베이스의 모든 테이블은 적어도 20억마다 한 번씩 거래.
주기적인 메이저 토토 사이트 청소로 문제가 해결되는 이유는 그포스트그레SQL구별하다 특수 XIDFrozenXID. 이 XID는 항상 모든 일반 XID보다 오래된 것으로 간주됩니다. 일반 XID는 다음과 같습니다. 모듈로-2를 사용하여 비교31산술. 이는 다음을 의미합니다. 모든 일반 XID에는 20억 개의 XID가 있습니다."나이가 많은"그리고 20억이"최신"; 또 다른 말로는 일반 XID 공간은 끝점이 없는 원형입니다. 따라서 행 버전이 생성되면 특정 일반 XID, 행 버전은 다음과 같이 나타납니다."과거에"다음 2개를 위해 10억 개의 거래, 우리가 말하는 일반 XID에 관계없이 약. 행 버전이 2개 이상 후에도 여전히 존재하는 경우 10억 건의 거래가 갑자기 발생하는 것처럼 보일 것입니다. 미래. 데이터 손실을 방지하려면 이전 행 버전을 XID를 재할당함FrozenXID때때로 20억 건의 거래 기록에 도달하기 전에. 한 번 이 특별한 XID가 할당되면 다음과 같이 나타납니다."과거에"모두 정상으로 랩어라운드 문제와 관계없이 트랜잭션 등의 행 버전은 삭제되기 전까지는 유효합니다. 이다. 이전 XID의 재할당은 다음에서 처리됩니다.메이저 토토 사이트.
메이저 토토 사이트의 행동은 다음에 의해 제어됩니다. 구성 매개변수vacuum_freeze_min_age: 다음보다 오래된 모든 XIDvacuum_freeze_min_age트랜잭션이 대체됩니다. 으로FrozenXID. 더 큰 값vacuum_freeze_min_age보존 거래 정보는 길어지고 가치가 작아지면 증가합니다. 테이블 이전에 경과할 수 있는 트랜잭션 수 다시 메이저 토토 사이트청소기로 청소해야 합니다.
테이블이 비워지지 않을 수 있는 최대 시간은 2입니다 10억 거래에서 마이너스vacuum_freeze_min_age그 당시 사용되었던 것입니다. 마지막으로 메이저 토토 사이트 청소기로 청소했습니다. 그 이상 오랫동안 메이저 토토 사이트 상태로 방치된다면 그러면 데이터가 손실될 수 있습니다. 이런 일이 발생하지 않도록 하려면 일이 일어나, 그자동 메이저 토토 사이트시설 설명됨섹션 22.1.4입니다 해당 연령보다 오래된 XID를 포함할 수 있는 모든 테이블에서 호출됩니다. 구성 매개변수에 의해 지정됨autovacuum_freeze_max_age. (이것은 autovacuum이 그렇지 않은 경우에도 발생합니다. 비활성화되었습니다.)
이것은 테이블이 달리 메이저 토토 사이트청소되지 않으면, autovacuum은 대략 한 번씩 호출됩니다.autovacuum_freeze_max_age마이너스vacuum_freeze_min_age거래. 공간 활용을 위해 정기적으로 메이저 토토 사이트 청소를 하는 테이블의 경우 목적상 이것은 별로 중요하지 않습니다. 그러나 정적의 경우 테이블(삽입을 수신하지만 업데이트는 수신하지 않는 테이블 포함) 또는 삭제), 공간을 확보할 필요가 없습니다. 매립을 극대화하는 것이 유용할 수 있습니다. 매우 큰 정적 환경에서 강제 autovacuum 사이의 간격 테이블. 분명히 다음 중 하나를 증가시켜 이를 수행할 수 있습니다.autovacuum_freeze_max_age또는 작성자 감소하는vacuum_freeze_min_age.
증가의 유일한 단점autovacuum_freeze_max_age그건요pg_clog데이터베이스 클러스터의 하위 디렉토리 커밋 상태를 저장해야 하므로 더 많은 공간을 차지합니다. 모든 거래에 대해 다시autovacuum_freeze_max_age수평선. 커밋 상태는 트랜잭션당 2비트를 사용하므로, 만약autovacuum_freeze_max_age최대값이 있습니다 허용되는 가치는 20억 미만입니다.pg_clog약 절반 정도까지 성장할 것으로 예상됩니다. 기가바이트. 전체 데이터베이스에 비해 이것이 사소한 경우 크기, 설정autovacuum_freeze_max_age최대 허용치까지 값을 권장합니다. 그렇지 않으면 원하는 내용에 따라 설정하십시오. 기꺼이 허용하겠습니다pg_clog저장. (기본값인 2억 거래는 다음과 같습니다. 약 50MBpg_clog저장.)
감소의 한 가지 단점vacuum_freeze_min_age그것이 원인이 될 수 있다는 것입니다메이저 토토 사이트쓸데없는 일을 하기 위해: 테이블 행의 XID를FrozenXID은 그 후 곧 행이 수정되면 시간 낭비가 됩니다. 새로운 XID를 얻으려면). 따라서 설정이 충분히 커야 합니다. 해당 행은 변경될 가능성이 없을 때까지 고정되지 않습니다. 더. 이 설정을 줄이는 데 따른 또 다른 단점은 다음과 같습니다. 어떤 트랜잭션이 삽입되거나 수정되었는지에 대한 세부정보 행이 더 빨리 손실됩니다. 이런 정보가 가끔 들어옵니다 특히 무엇이 잘못되었는지 분석하려고 할 때 편리합니다. 데이터베이스 오류 후. 이 두 가지 이유로 인해 감소 이 설정은 완전히 정적인 경우를 제외하고는 권장되지 않습니다. 테이블.
데이터베이스에서 가장 오래된 XID의 나이를 추적하려면,메이저 토토 사이트XID 통계를 다음 위치에 저장합니다. 시스템 테이블pg_class그리고pg_database. 특히,relfrozenxid테이블의 열pg_class행에 동결이 포함되어 있습니다. 마지막으로 사용된 컷오프 XID메이저 토토 사이트해당 테이블에 대해. 이전의 모든 일반 XID 이 컷오프 XID보다 다음으로 대체됨이 보장됩니다.FrozenXID테이블 내. 마찬가지로,datfrozenxid열 데이터베이스의pg_database행은 해당 데이터베이스에 나타나는 일반 XID의 하한 — 테이블당 최소값입니다.relfrozenxid데이터베이스 내의 값. 에이 이 정보를 조사하는 편리한 방법은 다음을 실행하는 것입니다. 다음과 같은 쿼리
pg_class에서 relname, age(relfrozenxid) 선택 WHERE relkind = 'r'; pg_database에서 datname, age(datfrozenxid) 선택;
그나이열은 숫자를 측정합니다 컷오프 XID부터 현재까지의 거래 거래의 XID. a 직후메이저 토토 사이트, 나이(relfrozenxid)다음보다 조금 더 커야 합니다.vacuum_freeze_min_age설정 사용되었습니다(이후 시작된 트랜잭션 수에 따라 더 많음메이저 토토 사이트시작됨). 만일나이(relfrozenxid)초과autovacuum_freeze_max_age, autovacuum은 곧 테이블에 앉게 될 거예요.
어떤 이유로 autovacuum이 장치에서 이전 XID를 지우지 못하는 경우 테이블에서 시스템은 다음과 같은 경고 메시지를 보내기 시작합니다. 데이터베이스의 가장 오래된 XID가 천만 트랜잭션에 도달할 때 랩어라운드 지점에서:
경고: 데이터베이스 "mydb"는 177009986 트랜잭션 내에서 비워져야 합니다 힌트: 데이터베이스 종료를 방지하려면 "mydb"에서 전체 데이터베이스 VACUUM을 실행하세요.
이 경고를 무시하면 시스템이 종료되고 거래 수가 줄어들면 새로운 거래 실행을 거부합니다. 마무리까지 100만 개 이상의 거래가 남았습니다.
오류: "mydb" 데이터베이스의 랩어라운드 데이터 손실을 방지하기 위해 데이터베이스가 종료되었습니다. 힌트: 포스트마스터를 중지하고 "mydb"에서 VACUUM에 대한 독립형 백엔드를 사용하십시오.
1백만 거래의 안전 마진은 다음을 허용하기 위해 존재합니다. 관리자는 수동으로 실행하여 데이터 손실 없이 복구합니다. 필수메이저 토토 사이트명령. 그러나, 시스템이 종료되면 시스템은 명령을 실행하지 않으므로 안전 종료 모드로 전환하는 유일한 방법은 다음과 같습니다. 서버를 중지하고 단일 사용자 백엔드를 사용하여 실행합니다.메이저 토토 사이트. 종료 모드가 아닙니다. 단일 사용자 백엔드에 의해 시행됩니다. 참조포스트그레스자세한 내용은 참조 페이지 단일 사용자 백엔드 사용에 대해 알아보세요.
시작PostgreSQL8.1, 다음과 같은 별도의 선택적 서버 프로세스가 있습니다.autovacuum 데몬, 그 목적은 다음과 같습니다. 실행을 자동화합니다.메이저 토토 사이트그리고분석명령. 활성화되면 autovacuum 데몬은 주기적으로 실행되어 다음과 같은 테이블을 확인합니다. 삽입, 업데이트 또는 삭제된 튜플이 너무 많았습니다. 이러한 검사에서는 행 수준 통계 수집 기능을 사용합니다. 따라서 autovacuum 데몬은 다음과 같은 경우를 제외하고는 사용할 수 없습니다.stats_start_collector그리고stats_row_level다음으로 설정됨참. 또한, 중요한 것은 선택 시 autovacuum 프로세스를 위한 슬롯을 허용하려면 값superuser_reserved_connections.
autovacuum 데몬이 활성화되면 다음 주기마다 실행됩니다.autovacuum_naptime초. 각 실행마다 처리할 데이터베이스 하나를 선택하고 해당 데이터베이스 내의 각 테이블을 확인합니다.메이저 토토 사이트또는분석필요에 따라 명령이 실행됩니다.
다음 테이블relfrozenxid값 이상입니다autovacuum_freeze_max_age오래된 거래는 항상 비워집니다. 그렇지 않으면 두 가지 조건 적용할 작업을 결정하는 데 사용됩니다. 만약 마지막 이후 사용되지 않는 튜플 수메이저 토토 사이트초과"메이저 토토 사이트 임계값", 테이블이 메이저 토토 사이트청소되었습니다. 메이저 토토 사이트 임계값 다음과 같이 정의됩니다:
메이저 토토 사이트 임계값 = 메이저 토토 사이트 기본 임계값 + 메이저 토토 사이트 배율 인수 * 튜플 수
여기서 메이저 토토 사이트 베이스 임계값은autovacuum_vacuum_threshold, 메이저 토토 사이트 스케일 팩터는autovacuum_vacuum_scale_factor, 튜플 수는pg_class.reltuples. 쓸모없는 튜플의 수는 다음과 같습니다. 통계 수집기에서 얻었습니다. 그것은 반정확하다 각각 업데이트된 개수업데이트그리고삭제작업. (그것은 단지 무거운 상황에서는 일부 정보가 손실될 수 있으므로 준정확합니다. 로드.) 분석을 위해 유사한 조건이 사용됩니다: 임계값, 다음과 같이 정의됨
임계값 분석 = 기본 임계값 분석 + 배율 인수 분석 * 튜플 수
삽입, 업데이트된 총 튜플 수와 비교됩니다. 또는 마지막 이후 삭제됨분석.
기본 임계값 및 배율 인수는 다음에서 가져옵니다.postgresql.conf하지만 가능합니다 항목을 작성하여 테이블별로 재정의합니다. 시스템 카탈로그pg_autovacuum. 만약에pg_autovacuum행이 특정 항목에 대해 존재합니다. 테이블에서 지정한 설정이 적용됩니다. 그렇지 않으면 전역 설정이 사용됩니다. 참조섹션 17.9더 보기 전역 설정에 대한 세부정보입니다.
기본 임계값과 배율 인수 외에도 각 테이블에 대해 설정할 수 있는 5개의 매개변수가 더 있습니다.pg_autovacuum. 첫 번째,pg_autovacuum.활성화, 다음으로 설정할 수 있습니다.거짓autovacuum 데몬에게 건너뛰도록 지시 그 특정 테이블은 완전히요. 이 경우 autovacuum은 거래 ID를 방지하기 위해 필요한 경우에만 테이블을 터치하세요. 랩 어라운드. 다음 두 매개변수인 메이저 토토 사이트 비용 지연 (pg_autovacuum.vac_cost_delay) 및 메이저 토토 사이트 비용 한도 (pg_autovacuum.vac_cost_limit)는 설정하는 데 사용됩니다. 에 대한 테이블별 값비용 기반 메이저 토토 사이트 지연기능. 마지막 두 매개변수는 (pg_autovacuum.freeze_min_age) 및 (pg_autovacuum.freeze_max_age)는 설정하는 데 사용됩니다. 에 대한 테이블별 값vacuum_freeze_min_age그리고autovacuum_freeze_max_age각각.
다음 값 중 하나라도pg_autovacuum음수로 설정되어 있습니다. 또는 행이 전혀 존재하지 않는 경우pg_autovacuum특정 테이블의 경우 해당 값은postgresql.conf사용됩니다.
현재 제작에 대한 지원은 없습니다pg_autovacuum항목(수동 수행 제외)삽입s를 카탈로그에 추가합니다. 이 기능 향후 릴리스에서는 개선될 예정이며, 카탈로그 정의가 변경됩니다.
| 주의 |
|
다음의 내용pg_autovacuum시스템 카탈로그는 현재는 생성된 데이터베이스 덤프에 저장되지 않습니다. 도구pg_dump그리고pg_dumpall. 그것들을 보존하고 싶다면 덤프/다시 로드 주기 전반에 걸쳐 수동으로 카탈로그를 작성하세요. |