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

69.2. 토무지개 토토

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

PostgreSQL고정 된 페이지 크기 (일반적으로 8kb)를 사용하며 튜플이 여러 페이지에 걸쳐 있지 않습니다. 따라서 매우 큰 필드 값을 직접 저장할 수 없습니다.토무지개 토토(또는얇게 썬 빵 이후 가장 좋은 것). 그만큼토무지개 토토인프라는 메모리에서 큰 데이터 값의 처리를 개선하는 데 사용됩니다.

특정 데이터 유형 만 지원토무지개 토토- 큰 필드 값을 생성 할 수없는 데이터 유형에 오버 헤드를 부과 할 필요가 없습니다. 지원하려면토무지개 토토, 데이터 유형에는 가변 길이가 있어야합니다 (Varlena) 표현은 일반적으로 저장된 값의 처음 4 바이트 단어에 바이트의 총 길이 (자체 포함)를 포함합니다..토무지개 토토나머지 데이터 유형의 표현을 제한하지 않습니다. 특별한 표현은 총체적으로토무지개 토토ed 값이 초기 길이 단어를 수정하거나 재 해석하여 작업하십시오. 따라서 A를 지원하는 C 수준 기능토무지개 토토-가능한 데이터 유형이 잠재적으로 처리하는 방법에주의해야합니다토무지개 토토ED 입력 값 : 입력은 실제로 4 바이트 길이의 단어와 내용으로 구성되지 않을 수 있습니다.Detoasted. (이것은 일반적으로 호출하여 수행됩니다PG_DETOAST_DATUM입력 값을 가진 작업을 수행하기 전에 더 효율적인 접근 방식이 가능합니다. 보다섹션 38.12.1자세한 내용은)

토무지개 토토varlena 길이 단어의 두 비트 (대기업 기계의 고차 비트, Little-Endian 머신의 저음 비트)의 두 비트를 사용하여 A의 모든 값의 논리적 크기를 제한합니다.토무지개 토토-가능한 데이터 유형에서 1GB (230-1 바이트). 두 비트가 모두 0이면 값은 평범한 un-입니다.토무지개 토토데이터 유형의 ED 값 및 길이 단어의 나머지 비트는 총 데이텀 크기 (길이 단어 포함)를 바이트로 제공합니다. 가장 높은 주문 또는 가장 낮은 주문 비트가 설정되면 값은 일반 4 바이트 헤더 대신 단일 바이트 헤더 만 있으며 해당 바이트의 나머지 비트는 총 기준 크기 (길이 바이트 포함)를 바이트로 제공합니다.토무지개 토토 포인터는 데이텀의 두 번째 바이트에 저장된 코드에 의해 결정됩니다. 마지막으로, 가장 높은 주문 또는 가장 낮은 비트가 명확하지만 인접한 비트가 설정되면, 데이텀의 내용이 압축되어 사용하기 전에 압축을 압축해야합니다.토무지개 토토포인터는 대신 그 말을합니다.

언급했듯이 여러 유형의가 있습니다.토무지개 토토포인터 데이텀. 가장 오래되고 가장 일반적인 유형은 A에 저장된 외부 데이터에 대한 포인터입니다.토무지개 토토테이블그것은를 포함하는 테이블과는 별개이지만 관련이 있지만 관련이 있습니다.토무지개 토토포인터 기준 자체. 이것들온 디스크포인터 데이텀은에 의해 생성됩니다토무지개 토토관리 코드 (inAccess/Heap/Tuptoaster.c) 디스크에 저장 될 튜플이 너무 넓어서 저장되지 않으면 저장됩니다. 자세한 내용은에 나타납니다.섹션 69.2.1. 또는 A토무지개 토토포인터 데이텀에는 메모리의 다른 곳에 나타나는 외부 데이터에 대한 포인터가 포함될 수 있습니다. 이러한 데이텀은 반드시 수명이 짧으며, 온 디스크처럼 보이지 않지만 큰 데이터 값의 복사 및 중복 처리를 피하는 데 매우 유용합니다.섹션 69.2.2.

인라인 또는 외부 압축 데이터에 사용되는 압축 기술은 LZ 제품군의 압축 기술 중 상당히 간단하고 매우 빠른 구성원입니다. 보다src/common/pg_lzcompress.c세부 사항은

69.2.1. 외부, 온 디스크 토무지개 토토 스토리지

테이블의 열이토무지개 토토-가능, 테이블에는 관련이 있습니다토무지개 토토테이블, OID가 테이블에 저장되어 있습니다PG_CLASS.reltoastrelid입력. 온 디스크토무지개 토토ed 값은에 보관됩니다.토무지개 토토테이블, 아래에 자세히 설명 된대로.

외부 값이 나뉘어져 있습니다 (사용한 경우 압축 후) 최대 청크로TOAST_MAX_CHUNK_SIZE바이트 (기본적 으로이 값은 4 개의 청크 행이 페이지에 장착되도록하여 약 2000 바이트가됩니다). 각 청크는에 별도의 행으로 저장됩니다.토무지개 토토소유 테이블에 속하는 테이블. 모든토무지개 토토테이블은 열이 있습니다chunk_id(특정을 식별하는 OID토무지개 토토ed value),Chunk_Seq(값 내에서 청크의 시퀀스 번호) 및chunk_data(청크의 실제 데이터). 독특한 색인chunk_idandChunk_Seq값을 빠르게 검색합니다. 외부 온 디스크를 나타내는 포인터 데이텀토무지개 토토ed 값은의 OID를 저장해야합니다.토무지개 토토특정 값의 외관 및 OID 테이블 (ITSchunk_id). 편의를 위해, 포인터 데이텀은 논리적 데이텀 크기 (원래 압축되지 않은 데이터 길이)와 물리적 저장 크기 (압축이 적용되는 경우)를 저장합니다.토무지개 토토포인터 데이텀은 대표 값의 실제 크기에 관계없이 18 바이트입니다.

the토무지개 토토관리 코드는 테이블에 저장 될 행 값이보다 넓은 경우에만 트리거됩니다TOAST_TUPLE_THRESHOLD바이트 (일반적으로 2 kb). 그만큼토무지개 토토코드는 행 값이 |12647_12665바이트 (일반적으로 2 kb, 조정 가능) 또는 더 이상 이익을 얻을 수 없습니다. 업데이트 작업 중에 변경되지 않은 필드의 값은 일반적으로 AS-IS로 보존됩니다.토무지개 토토불가능한 값이 변경되지 않으면 비용.

the토무지개 토토관리 코드 저장을위한 4 가지 전략을 인식토무지개 토토-디스크의-가능한 열 :

  • 일반압축 또는 외부 스토리지를 방지합니다. 이것은 비의 열에 대한 유일한 전략입니다.토무지개 토토-가능한 데이터 유형.

  • 확장압축 및 외부 스토리지를 모두 허용합니다. 이것은 대부분의 기본입니다토무지개 토토-가능한 데이터 유형. 압축이 먼저 시도되고 행이 너무 커지면 외부 저장소가 있습니다.

  • 외부외부 저장소는 허용하지만 압축은 허용되지 않습니다. 사용외부wide에서 서브 무지개 토토링 작업을 할 것입니다텍무지개 토토andBYTEA열이 더 빨리 (저장 공간의 페널티에서) 더 빨리 (이 작업은 압축되지 않을 때 외부 값의 필요한 부분 만 가져 오도록 최적화되어 있기 때문에).

  • Main압축은 허용하지만 외부 저장 공간은 허용되지 않습니다. (실제로, 외부 스토리지는 그 열에 대해 여전히 수행 될 것이지만, 페이지에 맞게 행을 작게 만들 수있는 다른 방법이없는 경우에만 최후의 수단으로 만 수행됩니다.)

토무지개 토토-가능한 데이터 유형 해당 데이터 유형의 열에 대한 기본 전략을 지정하지만 주어진 테이블 열에 대한 전략은로 변경 될 수 있습니다.ALTER 테이블 ... 스토리지 설정.

12647_12665를 사용하여 각 테이블에 대해 조정할 수 있습니다ALTER 테이블 ... SET (TOAST_TUPLE_TARGET = N)

이 체계에는 행 값이 페이지에 걸쳐있는 등의보다 간단한 접근 방식과 비교하여 여러 가지 장점이 있습니다. 쿼리가 일반적으로 비교적 작은 키 값과 비교하여 자격이 있다고 가정하면, 유언 집행자의 대부분의 작업은 메인 행 항목을 사용하여 수행됩니다.토무지개 토토ED 속성은 결과 세트가 클라이언트로 전송 될 때만 (전혀 선택된 경우) 만 꺼집니다 (전혀 선택한 경우). 따라서 메인 테이블은 훨씬 작으며 공유 버퍼 캐시에 적합한 줄이없는 저장소가없는 경우보다 더 많은 행이 공유 버퍼 캐시에 적합합니다.토무지개 토토테이블 및 메인 테이블에는 전체 데이터의 약 10% (URL 및 일부 작은 HTML 페이지)가 포함되어 있습니다. UN-에 비해 실행 시간 차이가 없었습니다.토무지개 토토Ed 비교 테이블, 모든 HTML 페이지가 7kb로 잘라 내기.

69.2.2. 외곽, 메모리 토무지개 토토 스토리지

토무지개 토토포인터는 디스크에 있지 않지만 현재 서버 프로세스의 메모리의 다른 곳에있는 데이터를 가리킬 수 있습니다. 그러한 포인터는 분명히 오래 지속될 수는 없지만 그럼에도 불구하고 유용합니다.간접데이터 및 포인터 to확장데이터.

간접토무지개 토토포인터는 단순히 메모리 어딘가에 저장된 비 종교적 Varlena 값을 가리 킵니다. 이 사례는 원래 개념 증명으로 만 생성되었지만 현재 논리적 디코딩 중에 1GB를 초과하는 물리적 튜플을 생성하지 않도록 현재 사용되어 있습니다 (모든 라인 외 필드 값을 튜플로 끌어 당기는 것이 가능함에 따라).

확장토무지개 토토포인터는 온 디스크 표현이 계산 목적에 특히 적합하지 않은 복잡한 데이터 유형에 유용합니다. 예를 들어, a의 표준 varlena 표현PostgreSQL배열에는 차원 정보, NULLS 비트 맵이 포함되어있는 경우 널 요소가 있으면 모든 요소의 값이 순서대로 포함됩니다. 요소 유형 자체가 가변 길이 인 경우를 찾는 유일한 방법입니다.N'th 요소는 이전의 모든 요소를 ​​스캔하는 것입니다. 이 표현은 컴팩트 함 때문에 온 디스크 스토리지에 적합하지만 배열로 계산하려면확장또는해체모든 요소 시작 위치가 식별 된 표현. 그만큼토무지개 토토포인터 메커니즘은 Pass-by-reference Datum이 표준 Varlena 값 (온 디스크 표현) 또는 a를 가리킬 수 있도록함으로써 이러한 요구를 지원합니다.토무지개 토토메모리 어딘가에 확장 된 표현을 가리키는 포인터. 이 확장 된 표현의 세부 사항은 데이터 유형에 달려 있지만 표준 헤더가 있어야하며에 제공된 다른 API 요구 사항을 충족해야합니다.src/include/utils/expededdatum.h. 데이터 유형으로 작업하는 C 수준 기능은 두 가지 표현을 처리하도록 선택할 수 있습니다.PG_DETOAST_DATUM입력에 대한 기존의 Varlena 표현을 자동으로받습니다. 따라서 확장 된 표현에 대한 지원은 한 번에 하나의 기능을 점차적으로 도입 할 수 있습니다.

토무지개 토토확장 된 값에 대한 포인터는 더욱 분해됩니다읽기 쓰기and읽기 전용포인터. 뾰족한 표현은 어느 쪽이든 동일하지만, 읽기 쓰기 포인터를 수신하는 함수는 참조 된 값을 장소에서 수정할 수 있지만, 읽기 전용 포인터를 수신하는 것은 안됩니다.

모든 유형의 인 메모리토무지개 토토포인터,토무지개 토토관리 코드는 그러한 포인터 데이텀이 실수로 디스크에 저장 될 수 없도록합니다. 인 메모리토무지개 토토​​포인터는 스토리지 전에 정상 인라인 Varlena 값으로 자동 확장 된 다음 ON-DISK로 변환 할 수 있습니다토무지개 토토포인터, 포함 된 튜플이 너무 큰 경우.