이 섹션은 다음에 대한 개요를 제공합니다.토스트(대규모 속성 저장소 기술).
이후포스트그레SQL고정을 사용합니다 페이지 크기(일반적으로 8Kb)이며 튜플이 확장되는 것을 허용하지 않습니다. 여러 페이지의 경우 매우 큰 필드를 저장할 수 없습니다. 가치를 직접적으로 평가합니다. 이전젠 토토7.1 하드 제한이 있었습니다 넣을 수 있는 전체 데이터 양 중 한 페이지 바로 아래 테이블 행으로. 릴리스 7.1 이상에서는 이 제한이 다음과 같습니다. 큰 필드 값을 압축하여 극복하거나 여러 개의 물리적 행으로 분할됩니다. 이런 일은 투명하게 일어난다 대부분의 백엔드 코드에 미치는 영향은 미미합니다. 이 기술은 애칭으로 알려져 있습니다.토스트(또는"가장 좋은 점은 빵을 썰어서부터").
특정 데이터 유형만 지원토스트— 강요할 필요가 없습니다.
큰 필드 값을 생성할 수 없는 데이터 유형에 대한 오버헤드입니다. 받는 사람
지원토스트, 젠 토토 유형
가변 길이(발레나)
저장된 모든 단어의 첫 번째 32비트 단어를 나타내는 표현입니다.
값에는 값의 전체 길이(바이트 단위)가 포함됩니다.
자체).토스트하지 않습니다
나머지 표현을 제한합니다. 모든 C레벨
a를 지원하는 함수토스트-able 데이터 유형은 다음 사항에 주의해야 합니다.
핸들토스트ed 입력 값입니다.
(이것은 일반적으로 다음을 호출하여 수행됩니다.PG_DETOAST_DATUM어떤 일을 하기 전에
입력값; 그러나 어떤 경우에는 더 효율적인 접근 방식이 있습니다.
가능합니다.)
토스트상위권을 빼앗는다 varlena 길이 단어의 2비트로 인해 논리적 제한이 발생합니다. a 값의 크기토스트-가능 젠 토토 유형을 1GB(230- 1바이트). 두 비트가 모두 0이면 값은 일반 값입니다. 유엔-토스트11950_12588
테이블의 열 중 하나가 다음과 같은 경우토스트-가능, 테이블에는 연관된 항목이 있습니다토스트OID가 다음과 같은 테이블 테이블에 저장됨pg_class.reltoastrelid항목. 오프라인토스트ed 값은 다음에 보관됩니다.토스트테이블에 설명된 대로 자세한 내용은 아래에서 확인하세요.
사용된 압축 기술은 매우 간단하고 매우 LZ 압축 기술 제품군의 빠른 구성원입니다. 참조src/backend/utils/adt/pg_lzcompress.c자세한 내용은.
라인 외부 값이 나누어집니다(사용된 경우 압축 후) 최대의 덩어리로TOAST_MAX_CHUNK_SIZE바이트(이 값은 약간 미만BLCKSZ/4, 또는 약 2000바이트 기본적으로). 각 청크는에 별도의 행으로 저장됩니다.토스트소유용 테이블 테이블. 매토스트테이블에는 열chunk_id(OID 특정을 식별토스트ed 값),chunk_seq(청크의 시퀀스 번호 해당 값 내에서) 및chunk_data(청크의 실제 데이터). 에 대한 고유 인덱스chunk_id그리고chunk_seq빠른 검색을 제공합니다. 가치. 라인 아웃을 나타내는 포인터 데이텀토스트14261_14314토스트찾을 테이블과 특정 값의 OID(해당chunk_id). 편의상 포인터 데이텀은 논리적 데이텀 크기(원본 비압축)도 저장합니다. 데이터 길이) 및 실제 저장된 크기(압축이 적용된 경우 다름) 적용됨). varlena 헤더 단어를 허용하면 전체 크기는 에토스트포인터 데이텀은 다음과 같습니다. 따라서 실제 크기에 관계없이 20바이트입니다. 표현된 값입니다.
그토스트코드가 트리거되었습니다 테이블에 저장될 행 값이 다음보다 넓은 경우에만BLCKSZ/4바이트(일반적으로 2Kb).토스트코드가 압축됩니다 및/또는 행 값이 다음과 같을 때까지 필드 값을 줄 밖으로 이동합니다. 보다 짧음BLCKSZ/4바이트 이하 이득을 얻을 수 있습니다. UPDATE 작업 중에 값은 변경되지 않습니다. 필드는 일반적으로 있는 그대로 보존됩니다. 그래서 행의 업데이트 라인을 벗어난 값은 발생하지 않습니다.토스트라인을 벗어난 값이 없는 경우 비용 변경합니다.
그토스트코드가 인식합니다 저장을 위한 네 가지 다른 전략토스트-가능 열:
일반압축을 방지합니다. 또는 오프라인 저장. 이것이 유일한 가능한 전략이다 비- 열의 경우토스트-able 젠 토토 유형.
확장두 가지 압축을 모두 허용합니다. 그리고 오프라인 저장. 이것이 대부분의 기본값입니다.토스트-가능 데이터 유형. 먼저 압축을 시도한 다음 라인 외부 저장을 시도합니다. 행이 여전히 너무 큰 경우.
외부라인 외부 허용 저장은 되지만 압축은 안 됩니다. 의 사용외부다음에 하위 문자열 작업을 수행합니다. 넓은텍스트그리고바이테아열이 더 빨라집니다(단, 증가된 페널티 있음). 저장 공간) 이러한 작업은 다음에 최적화되어 있기 때문입니다. 다음과 같은 경우 라인 외부 값의 필수 부분만 가져옵니다. 압축되지 않았습니다.
메인압축은 허용하지만 압축은 허용하지 않음 오프라인 저장. (실제로 오프라인 스토리지는 그러한 열에 대해서는 여전히 수행되지만 마지막으로만 수행됩니다. 행을 작게 만드는 다른 방법이 없을 때 리조트를 이용하세요. 충분합니다.)
각각토스트-able 데이터 유형 해당 데이터 유형의 열에 대한 기본 전략을 지정하지만 주어진 테이블 열에 대한 전략은 다음을 사용하여 변경할 수 있습니다.테이블 세트 저장소 변경.
이 계획은 다른 계획에 비해 많은 장점이 있습니다. 행 값의 범위를 허용하는 등의 간단한 접근 방식 페이지. 쿼리는 일반적으로 비교를 통해 한정된다고 가정합니다. 상대적으로 작은 키 값에 대해 대부분의 작업은 실행자는 기본 행 항목을 사용하여 수행됩니다. 의 큰 가치토스트ed 속성은 결과 집합이 선택될 때 꺼내집니다(선택한 경우). 클라이언트에게 전송됩니다. 따라서 메인 테이블은 훨씬 더 작고 더 많습니다. 해당 행 중 일부가 실제보다 공유 버퍼 캐시에 맞습니다. 오프라인 저장 없이. 정렬 세트도 축소되고 정렬됩니다. 전체가 메모리에서 수행되는 경우가 더 많습니다. 약간의 테스트 결과 일반적인 HTML 페이지와 해당 URL이 포함된 테이블은 포함된 원시 데이터 크기의 약 절반에 저장됩니다.토스트테이블이 있고 그 메인은 테이블에는 전체 데이터의 약 10%만 포함되어 있습니다(URL 및 일부 작은 HTML 페이지). 비교해 보면 런타임 차이가 없었습니다. un-에게토스트에드 비교 모든 HTML 페이지가 7Kb로 축소된 표 맞다.