이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 65.2. 토범퍼카 토토버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

52.2. 토스트

이 섹션은에 대한 개요를 제공합니다.토스트(대형 부여 저장 기술).

토토 캔고정 페이지를 사용합니다 크기 (일반적으로 8 kb), 튜플이 다중에 걸쳐 있지 않도록합니다. 페이지. 따라서 매우 큰 필드를 저장할 수 없습니다. 직접 가치. 이 제한을 극복하기 위해 큰 필드 값 압축 및/또는 여러 물리적 행으로 나뉩니다. 이것 대부분의 영향을 미치면 사용자에게 투명하게 발생합니다. 백엔드 코드의. 이 기술은 애정 적으로로 알려져 있습니다.토스트(또는"얇게 썬 빵 이후 가장 좋은 것").

특정 데이터 유형 만 지원토스트- 부과 할 필요가 없습니다 큰 필드 값을 생성 할 수없는 데이터 유형의 오버 헤드. 에게 지원하다토스트, 토토 캔 유형 가변 길이가 있어야합니다 (Varlena) 표현, 저장된 첫 32 비트 단어 값은 바이트의 값의 총 길이를 포함합니다 ( 그 자체).토스트그렇지 않습니다 나머지 표현을 제한합니다. 모든 C 수준 A 지원 기능토스트-가능한 토토 캔 유형은 조심해야합니다 핸들토스트ed 입력 값. (이것은 일반적으로 호출하여 수행됩니다PG_DETOAST_DATUM입력 값이지만 경우에 따라 더 효율적인 접근 방식은 가능한.)

토스트고차를 사용합니다 Varlena 길이 단어의 두 비트로 논리를 제한합니다. a의 크기토스트-가능한 토토 캔 유형에서 1GB (230-1 바이트). 두 비트가 모두 0이면 값은 평범합니다. un-토스트데이터 값 유형. 이 비트 중 하나는 설정된 경우 값이 압축되었으며 사용하기 전에 압축을 압축해야합니다. 다른 하나 비트, 설정하면 값이 저장되었음을 나타냅니다. 외부. 이 경우 나머지 값은 실제로 포인터 일뿐 아니라 올바른 데이터를 다른 곳에서 찾아야합니다. 두 비트가 모두 설정되면 외부 데이터가 압축되었습니다. 도. 각각의 경우 Varlena의 저차 비트의 길이 단어는 감압에 의해 추출 될 논리적 값 또는 외부 데이터 가져 오기.

12494_12533토스트-가능, 테이블에는 관련이 있습니다토스트테이블 테이블에 저장pg_class.reltoastrelid입력. 외부토스트ed 값은에 보관됩니다.토스트테이블에 설명 된대로 아래의 자세한 내용.

사용 된 압축 기술은 상당히 간단하고 매우 LZ 제품군 압축 기술의 빠른 구성원. 보다src/backend/utils/adt/pg_lzcompress.c세부 사항은

외부 값이 나뉘어져 있습니다 (사용시 압축 후) 최대의 덩어리로TOAST_MAX_CHUNK_SIZE바이트 (이 값은 약간입니다 미만blcksz/4또는 약 2000 바이트 기본적으로). 각 청크는에 별도의 행으로 저장됩니다.토스트소유를위한 테이블 테이블. 모든토스트테이블이 있습니다 열chunk_id(OID 특정 식별토스트ed value),chunk_seq(청크의 시퀀스 번호 그 가치 내에서) 및chunk_data(청크의 실제 데이터). 독특한 색인chunk_idandchunk_seq빠른 검색을 제공합니다 값. 외부를 나타내는 포인터 데이텀토스트ED 값은 필요합니다 의 OID를 저장하려면토스트특정 값의 외관 및 OID 테이블 (ITSchunk_id). 편의를 위해 포인터 데이텀은 또한 논리적 기준 크기를 저장합니다 (원래 원래 압축되지 않은 원래 데이터 길이) 및 실제 저장된 크기 (압축이 다른 경우 다른 경우 적용된). Varlena 헤더 단어를 허용하는 총 크기 에이토스트포인터 기준입니다 따라서 실제 크기에 관계없이 20 바이트 대표 가치.

the토스트코드가 트리거됩니다 테이블에 저장 될 행 값이보다 넓은 경우에만blcksz/4바이트 (일반적으로 2 kb). 그만큼토스트코드가 압축됩니다 및/또는 행 값이 보다 짧음blcksz/4바이트 또는 더 이상 이익은 가질 수 있습니다. 업데이트 작업 중에 변경되지 않았습니다 필드는 일반적으로 as-is로 보존됩니다. 그래서 행의 업데이트 외부 값은 NO가 발생합니다.토스트불가능한 값이없는 경우 비용 변화.

the토스트코드가 인식됩니다 저장을위한 4 가지 전략토스트-가능한 열 :

  • 일반압축을 방지합니다 또는 외부 스토리지. 이것이 유일한 전략입니다 비의 열토스트-가능한 토토 캔 유형.

  • 확장두 압축을 허용합니다 그리고 외부 저장소. 이것은 대부분의 기본입니다토스트-가능한 토토 캔 유형. 압축은 먼저 시도한 다음 외부 저장을 시도합니다 줄이 아직 너무 크면.

  • 외부외부를 허용합니다 저장하지만 압축은 아닙니다. 사용외부하위 문자열 작업을 수행합니다 넓은텍스트andBYTEA열이 더 빠릅니다 (증가 된 페널티에서 저장 공간) 이러한 작업은 최적화 되었기 때문입니다 외부 값의 필요한 부분 만 가져올 때 압축되지 않습니다.

  • Main압축은 허용하지만 그렇지 않습니다 외부 저장소. (실제로, 외부 스토리지는 할 것입니다 여전히 그러한 열에 대해 수행되지만 마지막으로 만 수행됩니다. 줄을 작게 만들 수있는 다른 방법이 없을 때 리조트 충분한.)

토스트-가능한 토토 캔 유형 해당 토토 캔 유형의 열에 대한 기본 전략을 지정하지만 주어진 테이블 열에 대한 전략은로 변경 될 수 있습니다.Alter Table Set Storage.

이 체계는 더 많은 것과 비교하여 여러 가지 장점이 있습니다. 행 값이 범위에 걸리는 것과 같은 간단한 접근 방식 페이지. 쿼리가 일반적으로 비교에 의해 자격이 있다고 가정합니다 비교적 작은 주요 값에 대해 집행자는 메인 행 항목을 사용하여 수행됩니다. 의 큰 가치토스트Ed 속성은 전용입니다 결과 세트가 다음과 같은 시점에 (전혀 선택된 경우) 고객에게 보냈습니다. 따라서 메인 테이블은 훨씬 작고 더 많습니다 공유 버퍼 캐시에 적합한 행은 사실보다 외부 저장소없이. 정렬 세트는 수축을 줄이고 정렬합니다 더 자주 기억하면서 더 자주 수행됩니다. 약간의 테스트가 나타났습니다 일반적인 HTML 페이지와 해당 URL이 포함 된 테이블은 를 포함하여 원시 데이터 크기의 약 절반에 저장토스트테이블 및 그 메인 테이블에는 전체 데이터의 약 10% 만 포함되어 있습니다 (URL 및 일부 작은 HTML 페이지). 비교하여 실행 시간 차이가 없었습니다 un-토스트Ed 비교 모든 HTML 페이지가 7kb로 절단 된 테이블 맞다.