| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| 사설 토토 사이트 : 문서 : 9.3 : 초기화 포크 | PostgreSQL : 문서 : 9.3 : 스포츠 토토 결과 물리적 스토리지 | 58장. 롤 토토 물리적 저장소 | PostgreSQL : 문서 : 9.3 : BKI 백엔드 메이저 토토 사이트 | |
이 섹션은 내부에서 사용되는 페이지 형식의 개요를 제공합니다.PostgreSQL테이블 및 색인.[1]시퀀스 및토스트테이블이 형식화되었습니다. 일반 테이블처럼요.
다음 설명에서 a바이트이다 8비트를 포함한다고 가정합니다. 또한, 용어항목개별 데이터 값을 나타냅니다. 페이지에 저장됩니다. 테이블에서 항목은 행입니다. 인덱스에서는 항목은 색인 항목입니다.
모든 테이블과 색인은 배열로 저장됩니다.페이지고정된 크기(보통 8kB이지만 서버를 컴파일할 때 다른 페이지 크기를 선택할 수 있습니다. 에서 테이블에서는 모든 페이지가 논리적으로 동일하므로 특정 항목(행)은 모든 페이지에 저장될 수 있습니다. 인덱스에서 첫 번째 페이지는 일반적으로 a로 예약되어 있습니다.메타페이지보유 정보를 제어하며 다양한 유형의 페이지가 있을 수 있습니다. 인덱스 액세스 방법에 따라 인덱스 내에서.
표 58-2페이지의 전체 레이아웃을 표시합니다. 각각 5개의 부분으로 구성되어 있습니다. 페이지.
표 58-2. 전체 페이지 레이아웃
| 아이템 | 설명 | 
|---|---|
| 페이지헤더데이터 | 길이는 24바이트입니다. 페이지에 대한 일반 정보가 포함되어 있습니다. 여유 공간 포인터를 포함합니다. | 
| ItemIdData | 실제 항목을 가리키는 (오프셋, 길이) 쌍 배열. 4 항목당 바이트입니다. | 
| 여유 공간 | 할당되지 않은 공간입니다. 새 항목 포인터는 다음에서 할당됩니다. 이 지역의 시작, 끝의 새로운 아이템. | 
| 항목 | 실제 항목 자체입니다. | 
| 특수 공간 | 인덱스 액세스 방법별 롤 토토. 다양한 방법으로 저장 다른 롤 토토. 일반 테이블에서는 비어 있습니다. | 
각 페이지의 처음 24바이트는 페이지 헤더로 구성됩니다. (페이지헤더데이터). 그 형식은 자세한 내용은표 58-3. 는 첫 번째 필드는 이 페이지와 관련된 가장 최근 WAL 항목을 추적합니다. 두 번째 필드에는 다음과 같은 경우 페이지 체크섬이 포함됩니다.롤 토토 체크섬있습니다 활성화되었습니다. 다음은 플래그 비트를 포함하는 2바이트 필드입니다. 이것은 그 뒤에 3개의 2바이트 정수 필드(pd_lower, pd_upper, 그리고pd_special). 여기에는 바이트가 포함됩니다. 페이지 시작부터 할당되지 않은 공간의 시작까지의 오프셋 할당되지 않은 공간의 끝과 특수 공간의 시작까지 공간. 페이지 헤더의 다음 2바이트,pd_pagesize_version, 페이지 크기를 모두 저장합니다. 그리고 버전 표시기. 로 시작포스트그레SQL8.3 버전 번호는 4입니다.포스트그레SQL8.1 및 8.2 사용됨 버전 번호 3;PostgreSQL8.0 버전 번호 2를 사용했습니다.포스트그레SQL7.3 및 7.4에서는 버전 번호 1을 사용했습니다. 이전 릴리스 사용 버전 번호 0. (기본 페이지 레이아웃 및 헤더 형식은 변경되지 않았습니다. 대부분의 버전에서는 힙 행 헤더의 레이아웃이 변경되었습니다.) 페이지 크기는 기본적으로 교차 확인을 통해서만 제공됩니다. 있다 설치 시 둘 이상의 페이지 크기를 지원하지 않습니다. 마지막 필드는 페이지 정리 여부를 보여주는 힌트입니다. 수익성이 높을 가능성이 높습니다. 정리되지 않은 가장 오래된 XMAX를 추적합니다. 페이지.
표 58-3. PageHeader데이터 레이아웃
| 필드 | 유형 | 길이 | 설명 | 
|---|---|---|---|
| pd_lsn | PageXLogRecPtr | 8바이트 | LSN: 마지막 변경에 대한 xlog 레코드의 마지막 바이트 다음 바이트 이 페이지로 | 
| pd_checksum | uint16 | 2바이트 | 페이지 체크섬 | 
| pd_flags | 단위16 | 2바이트 | 플래그 비트 | 
| pd_lower | 위치색인 | 2바이트 | 여유 공간 시작 오프셋 | 
| pd_upper | 위치색인 | 2바이트 | 여유 공간 끝까지 오프셋 | 
| pd_special | 위치색인 | 2바이트 | 특수 공간 시작 오프셋 | 
| pd_pagesize_version | uint16 | 2바이트 | 페이지 크기 및 레이아웃 버전 번호 정보 | 
| pd_prune_xid | 거래 ID | 4바이트 | 페이지에서 정리되지 않은 가장 오래된 XMAX, 없는 경우 0 | 
모든 세부정보는 다음에서 찾을 수 있습니다.src/include/storage/bufpage.h.
페이지 헤더 다음에는 항목 식별자가 있습니다(ItemIdData), 각각 4바이트가 필요합니다. 아이템 식별자에는 항목 시작 부분에 대한 바이트 오프셋이 포함됩니다. 길이(바이트) 및 영향을 미치는 몇 가지 속성 비트 해석. 필요에 따라 새 항목 식별자가 할당됩니다. 할당되지 않은 공간의 시작. 항목 수 존재하는 식별자는 다음을 보고 확인할 수 있습니다.pd_lower, 새로운 할당을 위해 증가됨 식별자. 항목 식별자는 삭제될 때까지 절대 이동되지 않기 때문입니다. 해제되면 해당 인덱스를 장기적으로 참조하는 데 사용할 수 있습니다. 항목 자체가 페이지에서 다른 항목으로 이동되는 경우에도 컴팩트한 여유 공간. 실제로 항목에 대한 모든 포인터(ItemPointer,라고도 함CTID) 작성자:PostgreSQL다음으로 구성됨 페이지 번호와 항목 식별자의 색인입니다.
항목 자체는 뒤로 할당된 공간에 저장됩니다. 할당되지 않은 공간의 끝에서. 정확한 구조는 다양하다 테이블에 포함되는 내용에 따라 다릅니다. 테이블 및 시퀀스 둘 다라는 구조를 사용합니다.HeapTupleHeaderData, 아래에 설명되어 있습니다.
마지막 섹션은"특별한 섹션"액세스 방법이 원하는 모든 것을 포함할 수 있습니다. 저장합니다. 예를 들어, B-트리 인덱스는 페이지의 링크를 저장합니다. 왼쪽 및 오른쪽 형제자매와 관련된 기타 데이터 인덱스 구조. 일반 테이블은 특별한 섹션을 사용하지 않습니다. 모두(설정으로 표시됨pd_special페이지 크기와 동일하게 함).
모든 테이블 행은 동일한 방식으로 구성됩니다. 있다 고정 크기 헤더(대부분의 시스템에서 23바이트를 차지함), 그 뒤를 따릅니다. 선택적 null 비트맵, 선택적 개체 ID 필드 및 사용자 데이터. 헤더에 대한 자세한 내용은테이블 58-4. 실제 사용자 롤 토토(행의 열)는 오프셋은로 표시됩니다.t_hoff, 반드시 항상 플랫폼 MAXALIGN 거리의 배수여야 합니다. 는 null 비트맵은 다음과 같은 경우에만 존재합니다.HEAP_HASNULL비트가 설정되었습니다t_infomask. 존재하는 경우 바로 시작됩니다. 고정 헤더 뒤에 1비트를 가질 만큼 충분한 바이트를 차지합니다. 데이터 열당(즉,t_natts비트 전혀). 이 비트 목록에서 1비트는 null이 아님을 나타내고 0은 비트는 널입니다. 비트맵이 없으면 모든 열이 null이 아닌 것으로 가정합니다. 객체 ID는 다음과 같은 경우에만 존재합니다.HEAP_HASOID비트가 설정되었습니다.t_infomask. 존재하는 경우 직전에 나타납니다.t_hoff경계. 모든 패딩 만드는 데 필요함t_hoffa MAXALIGN null 비트맵과 개체 ID 사이에 여러 개가 나타납니다. (이렇게 하면 개체 ID가 적절하게 정렬됩니다.)
표 58-4. HeapTupleHeader롤 토토 레이아웃
| 필드 | 유형 | 길이 | 설명 | 
|---|---|---|---|
| t_xmin | 거래 ID | 4바이트 | XID 스탬프 삽입 | 
| t_xmax | 거래 ID | 4바이트 | XID 스탬프 삭제 | 
| t_cid | CommandId | 4바이트 | CID 스탬프 삽입 및/또는 삭제(t_xvac와 오버레이) | 
| t_xvac | 거래 ID | 4바이트 | 행 버전을 이동하는 VACUUM 작업을 위한 XID | 
| t_ctid | ItemPointerData | 6바이트 | 이 또는 최신 행 버전의 현재 TID | 
| t_infomask2 | uint16 | 2바이트 | 속성 수 및 다양한 플래그 비트 | 
| t_infomask | uint16 | 2바이트 | 다양한 플래그 비트 | 
| t_hoff | uint8 | 1바이트 | 사용자 롤 토토로 오프셋 | 
모든 세부정보는 다음에서 찾을 수 있습니다.src/include/access/htup_details.h.
실제 데이터 해석은 정보를 통해서만 가능합니다. 대부분 다른 테이블에서 가져옴pg_attribute. 식별하는 데 필요한 핵심 가치 필드 위치는 다음과 같습니다.attlen그리고부착. 직접적으로 방법은 없습니다 고정 너비만 있는 경우를 제외하고 특정 속성을 얻습니다. 필드가 있고 null 값이 없습니다. 이 모든 속임수는 기능heap_getattr, fastgetattr그리고heap_getsysattr.
데이터를 읽으려면 각 속성을 차례로 검사해야 합니다. 먼저 널 비트맵에 따라 필드가 NULL인지 확인하십시오. 그렇다면 다음으로 이동하세요. 그렇다면 당신에게 권리가 있는지 확인하세요 정렬. 필드가 고정 너비 필드인 경우 모든 바이트는 간단하게 배치되어 있습니다. 가변 길이 필드인 경우(attlen = -1) 그러면 좀 더 복잡해집니다. 모든 가변 길이 데이터 유형 공통 헤더 구조를 공유합니다.구조체 바르레나20557_20695토스트테이블; 그것 압축될 수도 있습니다(참조섹션 58.2).
| [1] | 
 실제로 색인 액세스 방법은 이 페이지 형식을 사용할 필요가 없습니다. 기존의 모든 색인 방법은 이 기본 형식을 사용하지만 인덱스 메타페이지에 보관된 데이터는 일반적으로 항목 레이아웃을 따르지 않습니다. 규칙.  |