| 롤 토토 : 문서 : 9.5 : 롤 토토 | |||
|---|---|---|---|
| PostgreSQL : 문서 : 9.5 : 데이터베이스 토토 결과 레이아웃 | PostgreSQL : 문서 : 9.5 : 메이저 토토 사이트 물리적 스토리지 | 63장. 토토 결과베이스 물리적 저장소 | 배트맨 토토 : 문서 : 9.5 : 여유 공간지도 |
이 섹션은 다음에 대한 개요를 제공합니다.토스트(대규모 속성 저장 기술).
포스트그레SQL고정된 페이지 크기(일반적으로 8kB)를 사용하며 튜플이 여러 페이지에 걸쳐 있는 것을 허용하지 않습니다. 따라서 매우 큰 필드 값을 직접 저장할 수 없습니다. 이러한 제한을 극복하기 위해 큰 필드 값이 압축되거나 여러 물리적 행으로 분할됩니다. 이는 사용자에게 투명하게 발생하며 대부분의 백엔드 코드에는 약간의 영향만 미칩니다. 이 기술은 애칭으로 알려져 있습니다.토스트(또는"얇게 썬 빵 이후로 가장 좋은 것은").토스트인프라는 메모리 내 대용량 토토 결과 값 처리를 개선하는 데에도 사용됩니다.
특정 데이터 유형만 지원토스트— 큰 필드 값을 생성할 수 없는 데이터 유형에 오버헤드를 부과할 필요가 없습니다. 지원하다토스트, 토토 결과 유형은 가변 길이(발레나) 표현. 일반적으로 저장된 값의 첫 번째 4바이트 단어에는 값의 전체 길이(자체 포함)가 바이트 단위로 포함됩니다.토스트나머지 토토 결과 유형 표현을 제한하지 않습니다. 집합적으로 호출되는 특수 표현토스트ed 값이 초기 길이 단어를 수정하거나 재해석하여 작업하세요. 따라서 다음을 지원하는 C 수준 함수는토스트-able 토토 결과 유형은 잠재적으로 처리하는 방법에 주의해야 합니다.토스트ed 입력 값: 입력은 입력이 완료될 때까지 실제로 4바이트 길이의 단어와 내용으로 구성되지 않을 수 있습니다.디토스트. (이것은 일반적으로 다음을 호출하여 수행됩니다.PG_DETOAST_DATUM입력 값으로 작업을 수행하기 전이지만 경우에 따라 더 효율적인 접근 방식이 가능합니다. 참조섹션 35.11.1자세한 내용은.)
토스트varlena 길이 워드의 2비트(빅엔디안 시스템의 상위 비트, 리틀엔디안 시스템의 하위 비트)를 빼앗아 a의 모든 값의 논리적 크기를 제한합니다.토스트-가능 토토 결과 유형을 1GB(230- 1바이트). 두 비트가 모두 0이면 값은 일반 un-입니다.토스트ed 값과 길이 단어의 나머지 비트는 전체 데이터 크기(길이 단어 포함)를 바이트 단위로 제공합니다. 최상위 또는 최하위 비트가 설정되면 값에는 일반 4바이트 헤더 대신 단일 바이트 헤더만 있고 해당 바이트의 나머지 비트는 총 데이텀 크기(길이 바이트 포함)를 바이트 단위로 제공합니다. 이 대안은 127바이트보다 짧은 값의 공간 효율적인 저장을 지원하는 동시에 필요에 따라 데이터 유형을 1GB까지 늘릴 수 있습니다. 단일 바이트 헤더가 있는 값은 특정 경계에 정렬되지 않는 반면, 4바이트 헤더가 있는 값은 최소한 4바이트 경계에 정렬됩니다. 정렬 패딩을 생략하면 짧은 값에 비해 상당한 추가 공간 절약 효과를 얻을 수 있습니다. 특별한 경우로, 단일 바이트 헤더의 나머지 비트가 모두 0인 경우(자체 포함 길이에는 불가능함) 값은 아래에 설명된 대로 여러 가지 가능한 대안이 있는 라인 외부 데이터에 대한 포인터입니다. 그러한 종류와 크기토스트 포인터데이텀의 두 번째 바이트에 저장된 코드에 의해 결정됩니다. 마지막으로 최상위 또는 최하위 비트가 지워졌지만 인접 비트가 설정된 경우 데이텀의 내용이 압축되었으므로 사용하기 전에 압축을 풀어야 합니다. 이 경우 4바이트 길이 단어의 나머지 비트는 원본 토토 결과가 아닌 압축된 토토 결과의 전체 크기를 제공합니다. 라인 외부 토토 결과에 대해서도 압축이 가능하지만 varlena 헤더는 압축이 발생했는지 여부를 알려주지 않습니다.토스트포인터는 대신에 그것을 알려줍니다.
언급했듯이 여러 유형이 있습니다토스트포인터 데이텀. 가장 오래되고 가장 일반적인 유형은 a에 저장된 라인 외부 토토 결과에 대한 포인터입니다.토스트테이블다음을 포함하는 테이블과 별개이지만 관련되어 있습니다.토스트포인터 데이텀 자체. 이들디스크에포인터 데이텀은 다음에 의해 생성됩니다.토스트관리 코드(inaccess/heap/tuptoaster.c) 디스크에 저장할 튜플이 너무 커서 그대로 저장할 수 없는 경우. 자세한 내용은섹션 63.2.1. 또는,토스트포인터 데이텀은 메모리의 다른 곳에 나타나는 라인 외부 데이터에 대한 포인터를 포함할 수 있습니다. 이러한 데이텀은 반드시 수명이 짧고 디스크에 나타나지 않지만 큰 데이터 값의 복사 및 중복 처리를 방지하는 데 매우 유용합니다. 자세한 내용은섹션 63.2.2.
인라인 또는 아웃오브라인 압축 토토 결과에 사용되는 압축 기술은 LZ 압축 기술 제품군 중 매우 간단하고 빠른 구성원입니다. 참조src/common/pg_lzcompress.c자세한 내용은.
테이블의 열 중 하나가 다음과 같은 경우토스트-가능, 테이블에는 연관된 항목이 있습니다토스트OID가 테이블에 저장되어 있는 테이블pg_class.reltoastrelid항목. 온디스크토스트ed 값은 다음에 보관됩니다.토스트테이블, 아래에 자세히 설명되어 있습니다.
아웃 오브 라인 값은 (사용된 경우 압축 후) 최대의 청크로 나뉩니다.TOAST_MAX_CHUNK_SIZE바이트(기본적으로 이 값은 4개의 청크 행이 페이지에 들어가도록 선택되어 약 2000바이트가 됩니다). 각 청크는에 별도의 행으로 저장됩니다.토스트테이블이 소유 테이블에 속해 있습니다. 매토스트테이블에 열이 있습니다chunk_id(특정 항목을 식별하는 OID토스트ed 값),chunk_seq(해당 값 내 청크의 시퀀스 번호) 및chunk_data(청크의 실제 데이터). 에 대한 고유 인덱스chunk_id그리고chunk_seq값의 빠른 검색을 제공합니다. 아웃오브라인 온디스크를 나타내는 포인터 데이텀토스트16738_16789토스트찾을 테이블과 특정 값의 OID(해당chunk_id). 편의를 위해 포인터 데이텀은 논리적 데이텀 크기(압축되지 않은 원래 데이터 길이)와 물리적으로 저장된 크기(압축이 적용된 경우 다름)도 저장합니다. varlena 헤더 바이트를 허용하면 온디스크의 전체 크기입니다.토스트포인터 데이텀은 표시된 값의 실제 크기에 관계없이 18바이트입니다.
그토스트테이블에 저장될 행 값이 다음보다 넓은 경우에만 관리 코드가 트리거됩니다.TOAST_TUPLE_THRESHOLD바이트(일반적으로 2kB).토스트코드는 행 값이 다음보다 짧아질 때까지 필드 값을 줄 밖으로 압축 및/또는 이동합니다.TOAST_TUPLE_TARGET바이트(일반적으로 2kB) 또는 더 이상 이득을 얻을 수 없습니다. UPDATE 작업 중에 변경되지 않은 필드의 값은 일반적으로 있는 그대로 유지됩니다. 따라서 행을 벗어난 값이 있는 행의 업데이트는 발생하지 않습니다.토스트라인 외부 값이 변경되지 않는 경우 비용.
그토스트관리 코드는 네 가지 저장 전략을 인식합니다.토스트-디스크의 열 가능:
일반압축 또는 오프라인 저장을 방지합니다. 또한 varlena 유형에 대한 단일 바이트 헤더 사용을 비활성화합니다. 이는 비 열에 대해 가능한 유일한 전략입니다.토스트-able 토토 결과 유형.
확장됨압축과 라인 외부 저장을 모두 허용합니다. 이것이 대부분의 기본값입니다.토스트-가능 데이터 유형. 먼저 압축을 시도한 다음 행이 여전히 너무 크면 라인 외부 저장을 시도합니다.
외부out-of-line 저장은 허용하지만 압축은 허용하지 않습니다. 의 사용외부와이드에서 하위 문자열 작업을 수행합니다텍스트그리고바이테아열이 더 빨라집니다(저장 공간이 늘어나지만). 이러한 작업은 압축되지 않은 경우 라인 외부 값의 필수 부분만 가져오도록 최적화되어 있기 때문입니다.
메인압축은 허용하지만 오프라인 저장은 허용하지 않습니다. (실제로 이러한 열에 대해 라인 외부 저장이 계속 수행되지만 행을 페이지에 맞도록 작게 만들 수 있는 다른 방법이 없는 경우 최후의 수단으로만 수행됩니다.)
각각토스트-able 데이터 유형은 해당 데이터 유형의 열에 대한 기본 전략을 지정하지만 지정된 테이블 열에 대한 전략은 다음을 사용하여 변경할 수 있습니다.테이블 세트 저장소 변경.
이 체계는 행 값을 페이지에 걸쳐 허용하는 것과 같은 보다 간단한 접근 방식에 비해 여러 가지 장점이 있습니다. 일반적으로 쿼리가 상대적으로 작은 키 값과의 비교를 통해 한정된다고 가정하면 실행 프로그램의 작업 대부분은 기본 행 항목을 사용하여 수행됩니다. 의 큰 가치토스트ed 속성은 결과 세트가 클라이언트에 전송될 때만 추출됩니다(선택한 경우). 따라서 기본 테이블은 라인 외부 저장소가 없는 경우보다 훨씬 더 작고 공유 버퍼 캐시에 맞는 행이 더 많습니다. 정렬 세트도 축소되고 정렬은 전체 메모리에서 수행되는 경우가 더 많습니다. 약간의 테스트를 통해 일반적인 HTML 페이지와 해당 URL이 포함된 테이블이 다음을 포함한 원시 데이터 크기의 약 절반에 저장되어 있음을 보여주었습니다.토스트테이블, 그리고 기본 테이블에는 전체 데이터(URL 및 일부 작은 HTML 페이지)의 약 10%만 포함되어 있습니다. un-와 비교하여 실행 시간 차이가 없었습니다.토스트모든 HTML 페이지가 적합하도록 7kB로 잘린 비교표입니다.
토스트포인터는 디스크에 없지만 현재 서버 프로세스 메모리의 다른 곳에 있는 데이터를 가리킬 수 있습니다. 그러한 포인터는 확실히 오래 지속될 수는 없지만 그럼에도 불구하고 유용합니다. 현재 두 가지 하위 사례가 있습니다: 포인터간접토토 결과 및 포인터확장토토 결과.
간접토스트포인터는 단순히 메모리 어딘가에 저장된 간접이 아닌 varlena 값을 가리킵니다. 이 사례는 원래 단지 개념 증명으로 생성되었지만 현재는 1GB를 초과하는 물리적 튜플을 생성할 필요를 피하기 위해 논리적 디코딩 중에 사용됩니다(모든 라인 외부 필드 값을 튜플로 가져오는 것처럼). 포인터 데이텀 작성자가 포인터가 존재할 수 있는 동안 참조된 데이터가 유지되도록 하는 데 전적으로 책임이 있고 이를 지원하는 인프라가 없기 때문에 이 사례는 사용이 제한되어 있습니다.
확장됨토스트포인터는 디스크상의 표현이 계산 목적에 특히 적합하지 않은 복잡한 토토 결과 유형에 유용합니다. 예를 들어, a의 표준 varlena 표현은포스트그레SQL배열에는 차원 정보가 포함되어 있으며, null 요소가 있는 경우 null 비트맵이 포함되고 모든 요소의 값이 순서대로 포함됩니다. 요소 유형 자체가 가변 길이인 경우,N'번째 요소는 모든 이전 요소를 검색하는 것입니다. 이 표현은 컴팩트하기 때문에 디스크상의 저장소에 적합하지만 배열을 사용한 계산의 경우에는 다음을 갖는 것이 훨씬 더 좋습니다."확장됨"또는"해체됨"모든 요소 시작 위치가 식별된 표현입니다.토스트포인터 메커니즘은 참조 기준 전달 데이텀이 표준 varlena 값(디스크상의 표현) 또는 a토스트메모리 어딘가의 확장된 표현을 가리키는 포인터입니다. 이 확장된 표현의 세부 사항은 데이터 유형에 따라 다르지만 표준 헤더가 있어야 하고 다음에 제공된 다른 API 요구 사항을 충족해야 합니다.src/include/utils/expandeddatum.h. 데이터 유형을 사용하는 C 수준 함수는 두 표현 중 하나를 처리하도록 선택할 수 있습니다. 확장 표현에 대해 모르지만 간단히 적용하는 함수PG_DETOAST_DATUM입력에 대해 자동으로 전통적인 varlena 표현을 받게 됩니다. 따라서 확장된 표현에 대한 지원은 한 번에 한 기능씩 점진적으로 도입될 수 있습니다.
토스트확장된 값에 대한 포인터는 다음과 같이 더 세분화됩니다.읽기-쓰기그리고읽기 전용포인터. 가리키는 표현은 어느 쪽이든 동일하지만 읽기/쓰기 포인터를 받는 함수는 참조된 값을 내부에서 수정할 수 있는 반면, 읽기 전용 포인터를 받는 함수는 수정하면 안 됩니다. 값의 수정된 버전을 만들려면 먼저 복사본을 만들어야 합니다. 이러한 구별 및 일부 관련 규칙을 통해 쿼리 실행 중에 확장된 값이 불필요하게 복사되는 것을 방지할 수 있습니다.
모든 유형의 인메모리용토스트포인터, 그토스트관리 코드는 그러한 포인터 데이터가 실수로 디스크에 저장되지 않도록 보장합니다. 인메모리토스트포인터는 저장하기 전에 자동으로 일반 인라인 varlena 값으로 확장된 다음 디스크상으로 변환될 수 있습니다.토스트포인터(포함하는 튜플이 너무 큰 경우).
| 이전 | 롤 토토 : 문서 : 9.5 : 롤 토토 9.5.25 문서화 | 배트맨 토토 : 문서 : 9.5 : 여유 공간지도 |
| 토토 결과베이스 파일 레이아웃 | PostgreSQL : 문서 : 9.5 : 메이저 토토 사이트 물리적 스토리지 | 여유 공간 지도 |