그amcheck모듈은 관계 구조의 논리적 일관성을 확인할 수 있는 기능을 제공합니다. 구조가 유효한 것으로 나타나면 오류가 발생하지 않습니다.
함수는 다양한 것을 확인합니다불변특정 관계 표현의 구조에서. 인덱스 스캔 및 기타 중요한 작업 뒤에 있는 액세스 방법 기능의 정확성은 항상 유지되는 이러한 불변성에 달려 있습니다. 예를 들어, 특정 기능은 무엇보다도 모든 B-Tree 페이지에 항목이 있는지 확인합니다.“논리적”순서(예: B-트리 사설 토토 사이트의 경우텍스트, 인덱스 튜플은 대조된 어휘 순서로 되어 있어야 합니다.) 특정 불변성이 어떻게든 유지되지 않으면 영향을 받은 페이지의 바이너리 검색이 인덱스 스캔을 잘못 안내하여 SQL 쿼리에 대한 잘못된 답변을 초래할 것으로 예상할 수 있습니다.
검증은 사용자 정의 연산자 클래스 코드일 수 있는 인덱스 스캔 자체에서 사용되는 것과 동일한 절차를 사용하여 수행됩니다. 예를 들어, B-트리 인덱스 확인은 하나 이상의 B-트리 지원 기능 1 루틴을 사용한 비교에 의존합니다. 참조섹션 38.15.3연산자 클래스 지원 기능에 대한 자세한 내용은.
amcheck함수는 슈퍼유저만 사용할 수 있습니다.
bt_index_check(index regclass, heapallindexed boolean)는 void를 반환합니다. bt_index_check대상인 B-트리 인덱스가 다양한 불변성을 존중하는지 테스트합니다. 사용 예:
test=# SELECT bt_index_check(index = c.oid, heapallindexed = i.indisunique),
c.relname,
c.relpages
pg_index i에서
JOIN pg_opclass op ON i.indclass[0] = op.oid
JOIN pg_am am ON op.opcmethod = am.oid
JOIN pg_class c ON i.indexrelid = c.oid
JOIN pg_namespace n ON c.relnamespace = n.oid
am.amname = 'btree' AND n.nspname = 'pg_catalog'
-- 다른 세션에 있을 수 있는 임시 테이블을 확인하지 마세요.
AND c.relpersistence != 't'
-- 생략되면 함수에서 오류가 발생할 수 있습니다.
AND c.relkind = 'i' AND i.indisready AND i.indisvalid
c.relpages DESC LIMIT 10으로 주문;
bt_index_check | 이름 | 다시 페이지
-++----------+----------
| pg_dependent_reference_index | 43
| pg_dependent_dependent_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_opr_fam_index | 5
| pg_amop_fam_strat_index | 5
(10행)
이 예는 데이터베이스에서 가장 큰 10개의 카탈로그 색인을 확인하는 세션을 보여줍니다.“테스트”. 고유 인덱스인 하위 집합에 대해 인덱스 튜플인 힙 튜플이 있는지 확인이 요청됩니다. 오류가 발생하지 않으므로 테스트된 모든 인덱스는 논리적으로 일관성이 있는 것으로 보입니다. 당연히 이 쿼리는 호출로 쉽게 변경될 수 있습니다.bt_index_check검증이 지원되는 데이터베이스의 모든 인덱스에 대해.
bt_index_check획득액세스공유잠금대상 인덱스 및 그것이 속한 힙 관계에 대해. 이 잠금 모드는 단순 관계에서 획득한 것과 동일한 잠금 모드입니다.선택문장.bt_index_check자식/부모 관계에 걸쳐 있는 불변성을 확인하지 않지만, 다음과 같은 경우 인덱스 내에서 모든 힙 튜플이 인덱스 튜플로 존재하는지 확인합니다.힙폴인덱싱됨이다참. 실제 프로덕션 환경에서 손상에 대한 일상적인 경량 테스트가 필요한 경우 다음을 사용합니다.bt_index_check종종 검증의 철저함과 애플리케이션 성능 및 가용성에 대한 영향 제한 사이에서 최상의 절충안을 제공합니다.
bt_index_parent_check(index regclass, heapallindexed boolean)는 void를 반환합니다. bt_index_parent_check대상인 B-트리 인덱스가 다양한 불변성을 존중하는지 테스트합니다. 선택적으로 다음과 같은 경우힙폴인덱싱됨인수는참, 이 함수는 인덱스 내에서 찾아야 하는 모든 힙 튜플이 있는지, 인덱스 구조에 누락된 다운링크가 없는지 확인합니다. 수행할 수 있는 검사는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논리적 불일치나 기타 문제가 발견되면 오류를 발생시키는 일반적인 규칙을 따릅니다.
A 공유 잠금다음에 의해 대상 인덱스에 필요합니다.bt_index_parent_check(a공유 잠금또한 힙 관계에서 획득됩니다). 이러한 잠금은 동시 데이터 수정을 방지합니다.삽입, 업데이트및삭제명령. 잠금은 또한 기본 관계가 동시에 처리되는 것을 방지합니다.진공및 기타 모든 유틸리티 명령. 이 함수는 전체 트랜잭션이 아닌 실행 중에만 잠금을 유지합니다.
bt_index_parent_check의 추가 검증을 통해 다양한 병리학적 사례를 탐지할 가능성이 높아졌습니다. 이러한 경우에는 검사된 사설 토토 사이트에서 사용되는 잘못 구현된 B-트리 연산자 클래스가 포함될 수 있으며, 가정적으로는 기본 B-트리 사설 토토 사이트 액세스 방법 코드에서 발견되지 않은 버그가 포함될 수 있습니다. 참고하세요bt_index_parent_check상시 대기 모드가 활성화된 경우(즉, 읽기 전용 물리적 복제본에서) 사용할 수 없습니다.bt_index_check.
힙폴인덱싱됨확인때힙폴인덱싱검증 기능에 대한 인수는참, 대상 인덱스 관계와 연결된 테이블에 대해 추가 확인 단계가 수행됩니다. 이는 다음으로 구성됩니다.“더미” 색인 생성작업은 임시 메모리 내 요약 구조에 대해 모든 가상의 새 인덱스 튜플이 있는지 확인합니다(기본적인 첫 번째 확인 단계에서 필요할 때 구축됨). 요약 구조“지문”대상 사설 토토 사이트 내에서 발견된 모든 튜플. 뒤에 숨어있는 높은 수준의 원칙힙폴인덱싱확인에 따르면 기존 대상 인덱스와 동일한 새 인덱스에는 기존 구조에서 찾을 수 있는 항목만 있어야 합니다.
추가힙폴인덱싱됨단계에서는 상당한 오버헤드가 추가됩니다. 일반적으로 확인에는 몇 배 더 오랜 시간이 걸립니다. 그러나 다음과 같은 경우 획득한 관계 수준 잠금에는 변경 사항이 없습니다.힙폴인덱싱됨확인이 수행되었습니다.
요약 구조의 크기는 다음과 같이 제한됩니다.maintenance_work_mem. 인덱스에 표시되어야 하는 각 힙 튜플에 대한 불일치를 감지하지 못할 확률이 2%를 넘지 않도록 하려면 튜플당 약 2바이트의 메모리가 필요합니다. 튜플당 사용 가능한 메모리가 줄어들면서 불일치를 놓칠 확률이 서서히 증가합니다. 이 접근 방식은 검증 오버헤드를 크게 제한하는 동시에 문제 감지 가능성을 약간만 줄입니다. 특히 검증이 일상적인 유지 관리 작업으로 처리되는 설치의 경우 더욱 그렇습니다. 존재하지 않거나 형식이 잘못된 단일 튜플은 새로운 확인 시도를 할 때마다 감지될 수 있는 새로운 기회를 갖습니다.
amcheck효과적으로amcheck다양한 유형의 실패 모드를 감지하는 데 효과적일 수 있습니다.데이터 페이지 체크섬항상 잡을 수 없습니다. 여기에는 다음이 포함됩니다.
잘못된 연산자 클래스 구현으로 인한 구조적 불일치.
여기에는 운영 체제 데이터 정렬의 비교 규칙 변경으로 인해 발생하는 문제가 포함됩니다. 다음과 같은 조합 가능한 유형의 데이텀 비교텍스트은 변경이 불가능해야 합니다(B-트리 인덱스 스캔에 사용되는 모든 비교가 변경 불가능해야 하는 것처럼). 이는 운영 체제 대조 규칙이 절대로 변경되어서는 안 된다는 것을 의미합니다. 드물기는 하지만 운영 체제 대조 규칙을 업데이트하면 이러한 문제가 발생할 수 있습니다. 더 일반적으로 마스터 서버와 대기 서버 간의 데이터 정렬 순서 불일치는 다음과 같은 이유로 인해 발생합니다.전공사용 중인 운영 체제 버전이 일치하지 않습니다. 이러한 불일치는 일반적으로 대기 서버에서만 발생하므로 일반적으로 대기 서버에서만 감지될 수 있습니다.
이와 같은 문제가 발생하면 영향을 받은 데이터 정렬을 사용하여 정렬된 각 개별 인덱스에 영향을 미치지 않을 수 있습니다. 그 이유는 다음과 같습니다.색인이 생성됨값은 동작 불일치에 관계없이 동일한 절대 순서를 가질 수 있습니다. 참조PostgreSQL : 문서 : 11 : 23.1. 토토 결과 지원그리고PostgreSQL : 문서 : 11 : 23.2. 윈 토토 Support방법에 대한 자세한 내용은PostgreSQL운영 체제 로케일 및 대조를 사용합니다.
사설 토토 사이트와 인덱싱된 힙 관계 간의 구조적 불일치(언제힙폴인덱싱확인이 수행됩니다.)
정상 작동 중에는 힙 관계에 대한 사설 토토 사이트 교차 검사가 없습니다. 힙 손상 증상은 미묘할 수 있습니다.
기본에서 발견되지 않은 가상의 버그로 인한 손상PostgreSQL액세스 방법 코드, 정렬 코드 또는 거래 관리 코드.
색인의 구조적 무결성에 대한 자동 검증은 새로운 또는 제안된 인덱스의 일반적인 테스트에서 역할을 합니다.포스트그레SQL논리적 불일치가 도입될 가능성이 있는 기능입니다. 테이블 구조와 관련 가시성, 트랜잭션 상태 정보 확인도 비슷한 역할을 합니다. 한 가지 확실한 테스트 전략은 전화를 거는 것입니다.amcheck표준 회귀 테스트를 실행할 때 계속 작동합니다. 참조PostgreSQL : 문서 : 11 : 33.1. 시험 배트맨 토토테스트 실행에 대한 자세한 내용은.
체크섬이 단순히 활성화되지 않은 파일 시스템 또는 저장소 하위 시스템 오류.
참고하세요amcheck블록에 액세스할 때 공유 버퍼 적중만 있는 경우 확인 시 일부 공유 메모리 버퍼에 표시된 대로 페이지를 검사합니다. 결과적으로,amcheck검증 시 파일 시스템에서 읽은 데이터를 반드시 검사하지는 않습니다. 체크섬이 활성화되면,amcheck손상된 블록을 버퍼로 읽을 때 체크섬 실패로 인해 오류가 발생할 수 있습니다.
RAM 결함 또는 더 넓은 메모리 하위 시스템으로 인한 손상.
포스트그레SQL은 수정 가능한 메모리 오류로부터 보호하지 않으며 업계 표준 ECC(오류 수정 코드) 또는 더 나은 보호 기능을 사용하는 RAM을 사용하여 작동한다고 가정합니다. 그러나 ECC 메모리는 일반적으로 단일 비트 오류에만 영향을 받지 않으며 다음을 제공한다고 가정해서는 안 됩니다.절대메모리 손상을 초래하는 오류로부터 보호합니다.
언제힙폴인덱싱됨검증이 수행되면 엄격한 이진 동일성이 테스트되고 힙 내의 색인화된 속성이 테스트되므로 일반적으로 단일 비트 오류를 감지할 가능성이 크게 높아집니다.
일반적으로,amcheck부패의 존재만을 증명할 수 있습니다. 부재를 증명할 수 없습니다.
다음에 의해 제기된 부패 관련 오류가 없습니다.amcheck항상 거짓양성이어야 합니다.amcheck정의상 결코 발생해서는 안 되는 조건이 발생할 경우 오류를 발생시키므로 주의 깊게 분석합니다.amcheck오류가 필요한 경우가 많습니다.
문제를 해결하는 일반적인 방법은 없습니다.amcheck감지합니다. 불변 위반의 근본 원인에 대한 설명을 찾아야 합니다.토토 사이트 4(894,207) |_t |06부패를 진단하는 데 유용한 역할을 할 수 있습니다.amcheck감지합니다. 갑REINDEX부패를 복구하는 데 효과적이지 않을 수 있습니다.