F.1. AMCHECK - 테이블 및 색인 일관성을 무지개 토토하는 도구#

theAmcheck모듈은 관계 구조의 논리적 일관성을 무지개 토토할 수있는 함수를 제공합니다.

B- 트리 검사 기능 다양한 다양한 무지개 토토불변특정 관계의 표현 구조에서. 인덱스 스캔 및 기타 중요한 작업의 배후에 액세스 방법 기능의 정확성은 항상 보유하고있는 이러한 불변에 의존합니다. 예를 들어, 특정 함수는 무엇보다도 모든 b- 트리 페이지가에 항목이 있는지 무지개 토토합니다.LogicalORDER (예 : B- 트리 인덱스의 경우텍스트, 인덱스 튜플은 어휘 순서대로 정리되어 있어야합니다). 특정 불변량이 어떻게 든 유지되지 않으면 영향을받는 페이지의 이진 검색이 인덱스 스캔을 잘못 안내하여 SQL 쿼리에 대한 답변이 잘못된 답변을 기대할 수 있습니다. 구조가 유효한 것으로 보이면 오류가 발생하지 않습니다. 이러한 점검 기능이 실행되는 동안search_path일시적으로 변경PG_CATALOG, PG_TEMP.

검증은 인덱스 스캔 자체와 동일한 절차를 사용하여 수행됩니다.이 절차는 사용자 정의 연산자 클래스 코드 일 수 있습니다. 예를 들어, B-Tree Index Verification은 하나 이상의 B- 트리 지원 기능 1 루틴과 비교하는 데 의존합니다. 보다섹션 36.16.3운영자 클래스 지원 기능의 세부 사항.

오류를 높여 부패를보고하는 B- 트리 검사 기능과 달리 힙 무지개 토토 기능gryify_heapam테이블을 점검하고 손 세트를 반환하려고 시도합니다. 그럼에도 불구하고 시설이라면gryify_heapam의지 자체가 손상되었고, 기능이 계속 될 수없고 대신 오류를 제기 할 수 있습니다.

실행 권한Amcheck기능은 비 슈퍼 사용자에게 부여 될 수 있지만, 그러한 권한을 부여하기 전에 데이터 보안 및 개인 정보 보호 문제를 신중하게 고려해야합니다. 이러한 기능에 의해 생성 된 부패 보고서는 해당 데이터의 구조와 발견 된 손상의 특성에 따라 손상된 데이터의 내용에 초점을 맞추지 않지만, 이러한 기능을 실행할 수있는 권한을 얻는 공격자, 특히 공격자가 부패를 유도 할 수있는 경우 해당 메시지에서 데이터 자체를 유추 할 수있을 수 있습니다.

F.1.1. 기능#

BT_INDEX_CHECK (인덱스 regclass, heapallindexed boolean, Checkunique Boolean) void를 반환

bt_index_checkB-Tree 지수 인 대상이 다양한 불변량을 존중하는지 테스트합니다. 예제 사용 :

test =# select bt_index_check (index = c.oid, heapallindexed = i.indisunique),
               c.relname,
               c.relpages
PG_INDEX에서 i
i.indclass [0] = op.oid에서 pg_opclass op에 가입하십시오
op.opcmethod = am.oid에서 pg_am에 가입하십시오
i.indexrelid = C.oid에서 pg_class c에 가입하십시오
c.relnamespace = n.oid에서 pg_namespace n에 가입하십시오
여기서 am.amname = 'btree'및 n.nspname = 'pg_catalog'
- 다른 세션에서 온 임시 테이블을 무지개 토토하지 마십시오.
그리고 c.relpersistence! = 't'
- 기능이 생략되면 오류가 발생할 수 있습니다.
그리고 c.relkind = 'i'및 i.indisready 및 i.indisvalid
c.relpages desc Limit 10에 의한 주문;
 bt_index_check |             Relname | 재선
----------------+---------------------------------------------
                | pg_depend_reference_index |       43
                | pg_depend_depender_index |       40
                | pg_proc_proname_args_nsp_index |       31
                | pg_description_o_c_o_index |       21
                | pg_attribute_relid_attnam_index |       14
                | pg_proc_oid_index |       10
                | pg_attribute_relid_attnum_index |        9
                | pg_amproc_fam_proc_index |        5
                | pg_amop_op_fam_index |        5
                | pg_amop_fam_strat_index |        5
(10 줄)

이 예제는 데이터베이스에서 가장 큰 10 개의 카탈로그 인덱스 검증을 수행하는 세션을 보여줍니다테스트. 인덱스 튜플로서 힙 튜플의 존재를 검증하는 것은 고유 인덱스 인 서브 세트에 요청된다. 오류가 발생하지 않기 때문에 테스트 된 모든 인덱스는 논리적으로 일관된 것으로 보입니다. 당연히이 쿼리는 쉽게 전화를 걸 수 있습니다bt_index_check무지개 토토이 지원되는 데이터베이스의 모든 색인에 대해.

bt_index_check인수accesssharelock대상 지수와 그에 속하는 힙 관계에서. 이 잠금 모드는 단순한 관계에서 획득 한 동일한 잠금 모드입니다select진술.bt_index_check아동/부모 관계에 걸친 불변량을 무지개 토토하지 않지만 모든 힙 튜플의 존재를 색인 내 인덱스 튜플로 무지개 토토할 때HeaPallIndexedistrue. 언제CheckuniqueisTrue bt_index_check고유 인덱스의 중복 항목 중 하나 이상이 보이지 않는지 무지개 토토합니다. 살아있는 생산 환경에서 일상적이고 가벼운 부패 테스트가 필요할 때bt_index_check종종 검증의 철저 함과 응용 프로그램 성능 및 가용성에 미치는 영향을 제한하는 것 사이의 최상의 트레이드 오프를 제공합니다.

bt_index_parent_check (인덱스 regclass, heapallindexed boolean, rootdescend boolean, checkunique boolean) void를 반환합니다

bt_index_parent_checkB-Tree 지수 인 대상이 다양한 불변량을 존중하는지 테스트합니다. 선택적으로HeaPallIndexed인수는true, 함수는 인덱스 내에서 찾아야 할 모든 힙 튜플의 존재를 무지개 토토합니다. 언제Checkuniqueistrue bt_index_parent_check고유 인덱스의 중복 항목 중 하나 이상이 보이는지 무지개 토토합니다. 선택 사항rootdescend인수는true, 검증은 각 튜플에 대한 루트 페이지에서 새 검색을 수행하여 잎 수준에서 튜플을 다시 찾아냅니다. 수행 할 수있는 수표bt_index_parent_check|bt_index_check. bt_index_parent_check더 철저한 변형으로 생각할 수 있습니다bt_index_check:와 달리bt_index_check, bt_index_parent_check또한 인덱스 구조에 다운 링크가 누락되지 않은지 무지개 토토하는 것을 포함하여 부모/자식 관계에 걸친 불변량을 무지개 토토합니다.bt_index_parent_check논리적 불일치 또는 기타 문제를 발견하면 오류를 제기하는 일반적인 협약을 따릅니다.

aSharelock대상 색인에서에 필요합니다bt_index_parent_check(aSharelock힙 관계에서도 인수됩니다). 이 잠금은 동시 데이터 수정을 방지합니다삽입, 업데이트삭제명령. 자물쇠는 또한 기본 관계가 동시에 처리되는 것을 방지합니다.진공및 기타 모든 유틸리티 명령. 함수는 전체 트랜잭션이 아닌 실행 중에만 잠금을 유지합니다.

bt_index_parent_check의 추가 검증은 다양한 병리학 적 사례를 감지 할 가능성이 더 높습니다. 이러한 경우에는 기본 B-Tree Index Access Method Code에서 무지개 토토 된 인덱스 또는 가설 적으로 발견되지 않은 버그가 사용되는 잘못 구현 된 B- 트리 연산자 클래스가 포함될 수 있습니다. 참고bt_index_parent_checkhot stedby 모드가 활성화 될 때 (즉, 읽기 전용 물리 복제본에서)bt_index_check.

bt_index_checkandbt_index_parent_check검증 프로세스에 대한 출력 로그 메시지 모두Debug1andDebug2심각도 수준. 이 메시지는 관심이있는 검증 프로세스에 대한 자세한 정보를 제공합니다.PostgreSQL개발자. 고급 사용자는 또한이 정보가 실제로 불일치를 감지 해야하는 추가 컨텍스트를 제공 하므로이 정보가 도움이 될 수 있습니다. 달리기:

set client_min_messages = debug1;

대화식에서PSQL무지개 토토 쿼리를 실행하기 전의 세션은 관리 가능한 세부 수준으로 무지개 토토 진행 상황에 대한 메시지를 표시합니다.

gryify_haeapam (rugclass, on_error_stop boolean, check_toast boolean, skip text, startblock bigint, endblock bigint, bigno out bign, offnum out integer, attnum out integer, msg out 텍스트)

관계의 페이지에 무효화 된 데이터가 포함 된 데이터가 포함 된 구조적 손상 및 논리적 손상에 대한 구조적 손상에 대한 표, 시퀀스 또는 구체화 된보기를 점검합니다. 여기서 페이지는 구조적으로 유효하지만 데이터베이스 클러스터의 복원과 일치하지 않습니다.

다음 선택적 인수가 인식됩니다.

on_error_stop

부패가 발견되는 첫 번째 블록의 끝에서 부패 점검이 중지됩니다..

거짓으로 거부.

check_toast

true 인 경우, 구운 값이 대상 관계의 토스트 테이블에 대해 무지개 토토됩니다.

이 옵션은 느린 것으로 알려져 있습니다. 또한 토스트 테이블이나 인덱스가 손상되면 토스트 값에 대해 무지개 토토하면 서버에 충돌 할 수 있지만 많은 경우에 오류가 발생합니다..

거짓으로 거짓으로.

skip

그렇지 않은 경우없음, 부패 무지개 토토 블록은 지정된대로 볼 수 있거나 모든 냉동으로 표시됩니다. 유효한 옵션은All-Visible, All-Frozenand없음.

기본값으로없음.

StartBlock

지정된 경우, 부패 점검은 지정된 블록에서 시작되어 모든 이전 블록을 건너 뜁니다. A를 지정하는 것은 오류입니다.StartBlock대상 테이블의 블록 범위 외부.

기본적으로 무지개 토토은 첫 번째 블록에서 시작됩니다.

endblock

지정된 경우, 부패 무지개 토토은 지정된 블록에서 종료되어 남은 블록을 모두 건너 뜁니다. AN을 지정하는 것은 오류입니다엔드 블록대상 테이블의 블록 범위 외부.

기본적으로 모든 블록이 무지개 토토됩니다.

감지 된 각 부패에 대해gryify_heapam다음 열이있는 행을 반환합니다.

Blkno

손상된 페이지를 포함하는 블록의 수.

Offnum

손상된 튜플의 오프셋 오프셋.

attnum

튜플에서 손상된 열의 속성 번호, 손상이 열에 특유되고 튜플이 아닌 경우.

msg

감지 된 문제를 설명하는 메시지.

F.1.2. 선택 과목HeaPallIndexed무지개 토토#

언제HeaPallIndexedB- 트리 검증 기능에 대한 인수는true, 대상 인덱스 관계와 관련된 표에 대해 추가 검증 단계가 수행됩니다. 이것은 A로 구성됩니다.더미 색인 생성작동-임시 내내 요약 구조에 대한 모든 가상의 새로운 인덱스 튜플이 있는지 무지개 토토합니다 (이것은 기본 첫 번째 검증 단계에서 필요할 때 구축됩니다). 요약 구조지문대상 지수 내에서 발견되는 모든 튜플. 높은 수준의 원칙HeaPallIndexed검증은 기존 대상 인덱스와 동등한 새 인덱스에 기존 구조에서 찾을 수있는 항목 만 있어야한다는 것입니다..

추가HeaPallindexed위상이 상당한 오버 헤드를 추가합니다. 무지개 토토은 일반적으로 여러 번 더 오래 걸립니다. 그러나 획득 한 관계 수준의 자물쇠에는 변화가 없습니다.HeaPallIndexed무지개 토토이 수행됩니다.

요약 구조는 크기로 바인딩maintenance_work_mem. 인덱스에 표시되어야하는 각 힙 튜플에 대한 불일치를 감지하지 못할 확률이 2% 이하가되기 위해서는 튜플 당 약 2 바이트의 메모리가 필요합니다. 튜플 당 메모리가 적을수록, 불일치가 누락 될 확률은 천천히 증가합니다. 이 접근법은 검증의 오버 헤드를 크게 제한하는 반면, 특히 검증이 일상적인 유지 보수 작업으로 취급되는 설치의 경우 문제를 감지 할 확률을 약간 줄입니다. 단일 결석 또는 기형 튜플은 각각의 새로운 검증 시도로 감지 될 새로운 기회가 있습니다.

F.1.3. 사용Amcheck효과적으로#

Amcheck|데이터 체크섬잡을 수 없습니다. 여기에는 다음이 포함됩니다 :

  • 잘못된 운영자 클래스 구현으로 인한 구조적 불일치.

    여기에는 운영 체제 콜라이트 변경의 비교 규칙으로 인한 문제가 포함됩니다. Collatable 유형의 데이텀 비교텍스트는 불변이어야합니다 (B-Tree Index 스캔에 사용 된 모든 비교는 불변이어야하는 것처럼), 이는 운영 체제 콜레이션 규칙이 변경되지 않아야 함을 의미합니다. 드물지만 운영 체제 콜려 규칙에 대한 업데이트로 인해 이러한 문제가 발생할 수 있습니다. 보다 일반적으로 기본 서버와 대기 서버 간의 콜라이트 순서의 불일치가 연루되어 있습니다.메이저사용중인 운영 체제 버전은 일관성이 없습니다. 이러한 불일치는 일반적으로 대기 서버에서만 발생하므로 일반적으로 대기 서버에서만 감지 될 수 있습니다.

    이와 같은 문제가 발생하면 영향을받는 콜레이션을 사용하여 주문한 각 개별 색인에 영향을 미치지 않을 수 있습니다.색인값은 행동 불일치에 관계없이 동일한 절대 순서를 가질 수 있습니다. 보다PostgreSQL : 문서 : 17 : 23.1. 토토 캔 지원andPostgreSQL : 문서 : 17 : 23.2. 메이저 토토 사이트 Support방법에 대한 자세한 내용은postgresql운영 체제 지역 및 콜라주 사용.

  • 인덱스 된 인덱스와 힙 관계 간의 구조적 불일치 (HeaPallIndexed무지개 토토이 수행됩니다).

    정상 작동 중 힙 관계에 대한 인덱스의 교차 점검은 없습니다. 힙 부패의 증상은 미묘 할 수 있습니다.

  • 기본에서 가상의 발견되지 않은 버그로 인한 부패PostgreSQL액세스 방법 코드, 정렬 코드 또는 트랜잭션 관리 코드

    인덱스의 구조적 무결성에 대한 자동 검증은 신규 또는 제안 된 일반적인 테스트에서 중요한 역할을합니다PostgreSQL논리적 불일치가 도입 될 수있는 특징. 테이블 구조 및 관련 가시성 및 거래 상태 정보의 검증도 비슷한 역할을합니다. 명백한 테스트 전략 중 하나는 전화하는 것입니다Amcheck표준 회귀 테스트를 실행할 때 지속적으로 기능합니다. 보다PostgreSQL : 문서 : 17 : 31.1. 시험 윈 토토테스트 실행에 대한 자세한 내용.

  • 파일 시스템 또는 스토리지 서브 시스템 결함이 단순히 활성화되지 않는 경우.

    참고Amcheck블록에 액세스 할 때 공유 버퍼 히트 만있는 경우 검증시 공유 메모리 버퍼에 표시된 페이지를 검사합니다. 따라서,Amcheck무지개 토토 시점에 파일 시스템에서 읽은 데이터를 반드시 검토 할 필요는 없습니다. 체크섬이 활성화 될 때Amcheck손상된 블록을 버퍼로 읽을 때 체크섬 고장으로 인해 오류가 발생할 수 있습니다.

  • 결함이있는 RAM 또는 더 넓은 메모리 서브 시스템으로 인한 손상.

    PostgreSQL수정 가능한 메모리 오류로부터 보호하지 않으며 산업 표준 오류 수정 코드 (ECC) 또는 더 나은 보호를 사용하는 RAM을 사용하여 작동한다고 가정합니다. 그러나 ECC 메모리는 일반적으로 단일 비트 오류에 대해서만 면역되며 제공하는 것으로 가정해서는 안됩니다절대메모리 손상을 초래하는 고장에 대한 보호.

    언제HeaPallindexed검증이 수행되며, 엄격한 이진 평등이 테스트되고 힙 내 인덱스 속성이 테스트되므로 일반적으로 단일 비트 오류를 ​​감지 할 가능성이 크게 증가합니다..

스토리지 하드웨어가 결함이 있거나 관련이없는 소프트웨어에 의해 연결 또는 수정 된 관계 파일로 인해 구조적 손상이 발생할 수 있습니다. 이런 종류의 부패는 또한로 감지 될 수 있습니다.데이터 페이지 체크섬.

자신의 내부 체크섬에 비해 올바르게 형식화되고 내부적으로 일관되며 올바른 관계 페이지에는 여전히 논리적 손상이 포함될 수 있습니다. 따라서 이런 종류의 부패는로 감지 될 수 없습니다.체크섬. 예제에는 토스트 테이블의 해당 항목이없는 메인 테이블의 구운 값이 포함되어 있으며 메인 테이블의 튜플은 데이터베이스 또는 클러스터에서 가장 오래된 유효한 트랜잭션 ID보다 오래된 트랜잭션 ID가있는 튜플입니다..

생산 시스템에서 논리적 손상의 여러 원인이 관찰되었습니다.PostgreSQL서버 소프트웨어, 결함 및 잘못된 백업 및 복원 도구 및 사용자 오류

부패 관계는 라이브 생산 환경에서 가장 관련이 있으며, 위험이 높은 활동이 가장 적은 환영받는 동일한 환경입니다. 이런 이유로gryify_heapam과도한 위험없이 부패를 진단하도록 설계되었습니다. 호출 쿼리를 실행하는 것조차도 잘못 손상된 시스템에서 안전하지 않을 수 있으므로 백엔드 충돌의 모든 원인을 막을 수는 없습니다. 액세스메이저 토토 사이트 : 문서 : 17 : 51.1. 개요카탈로그 자체가 손상되면 수행 될 수 있으며 문제가 될 수 있습니다.

일반적으로Amcheck부패의 존재 만 증명할 수 있습니다. 부재를 증명할 수 없습니다.

F.1.4. 부패 수리#

부패에 관한 오류 없음Amcheck거짓 긍정적이어야합니다.Amcheck정의에 따라 절대로 일어나지 말아야 할 조건의 경우 오류를 제기하고에 대한 신중한 분석Amcheck오류가 종종 필요합니다.

문제를 수리하는 일반적인 방법은 없습니다Amcheck감지. 변하지 않는 위반의 근본 원인에 대한 설명을 찾아야합니다.Postgresql:부패 진단에 유용한 역할을 할 수 있습니다.Amcheck감지. 에이Reindex부패 수리에 효과적이지 않을 수 있습니다.

정정 제출

문서에 올바른 것이없는 것이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면