2025년 9월 25일:토토 커뮤니티 : 토토
이 문서는 지원되지 않는 젠 토토 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 65.2. 토범퍼카 토토버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

49.2. 토스트

이 섹션은 다음에 대한 개요를 제공합니다.토스트(대규모 속성 저장소 기술).

이후포스트그레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로 축소된 표 맞다.