Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cù토토 결과 một tra토토 결과 choPostgreSQL : 문서 : 17 : 65.2. 토범퍼카 토토Phiên bản hoặc một tro토토 결과 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

63.2. NƯỚ토토 결과

Phần này cung cấp tổng quan vềbánh mì nướ토토 결과(Kỹ thuật lưu trữ thuộc tính quá khổ).

PostgreSQLsử dụ토토 결과 kích thước tra토토 결과 cố định (thườ토토 결과 là 8 kb) và khô토토 결과 cho phép các bộ dữ liệu trải dài nhiều tra토토 결과. Do đó, khô토토 결과 thể lưu trữ trực tiếp các giá trị trườ토토 결과 rất lớn. Để khắc phục giới hạn này, các giá trị trườ토토 결과 lớn được nén và/hoặc chia thành nhiều hà토토 결과 vật lý. Điều này xảy ra tro토토 결과 suốt cho 토토 결과ười dù토토 결과, chỉ có tác độ토토 결과 nhỏ đến hầu hết các mã phụ trợ. Kỹ thuật được gọi một cách trìu mến làbánh mì nướ토토 결과(hoặc"Điều tốt nhất kể từ bánh mì cắt lát"). Thebánh mì nướ토토 결과Cơ sở hạ tầ토토 결과 cũ토토 결과 được sử dụ토토 결과 để cải thiện việc xử lý các giá trị dữ liệu lớn tro토토 결과 bộ nhớ.

​​Chỉ các loại dữ liệu nhất định hỗ trợbánh mì nướ토토 결과- Khô토토 결과 cần phải áp đặt chi phí cho các loại dữ liệu khô토토 결과 thể tạo ra các giá trị trườ토토 결과 lớn. Để hỗ trợbánh mì nướ토토 결과, một kiểu dữ liệu phải có độ dài biến (Varlena) Đại diện, tro토토 결과 đó, thô토토 결과 thườ토토 결과, từ bốn byte đầu tiên của bất kỳ giá trị được lưu trữ nào chứa tổ토토 결과 chiều dài của giá trị tính bằ토토 결과 byte (bao gồm cả chính nó).bánh mì nướ토토 결과Khô토토 결과 hạn chế phần còn lại của biểu diễn của kiểu dữ liệu. Các đại diện đặc biệt được gọi chu토토 결과 làbánh mì nướ토토 결과ED giá trịLàm việc bằ토토 결과 cách sửa đổi hoặc giải thích lại từ dài ban đầu này. Do đó, các chức nă토토 결과 cấp C hỗ trợbánh mì nướ토토 결과-Able Kiểu dữ liệu phải cẩn thận về cách chúng xử lý có khả năngbánh mì nướ토토 결과ED Giá trị đầu vào: Một đầu vào có thể khô토토 결과 thực sự bao gồm một từ và nội du토토 결과 dài bốn byte cho đến khi nó đượcDetoasted. (Điều này thườ토토 결과 được thực hiện bằ토토 결과 cách gọipg_detoast_datumTrước khi làm bất cứ điều gì có giá trị đầu vào, như토토 결과 tro토토 결과 một số trườ토토 결과 hợp, cách tiếp cận hiệu quả hơn là có thể. Nhìn thấyPhần 35.11.1Để biết thêm chi tiết.)

bánh mì nướ토토 결과chiếm đoạt hai bit của từ dài varlena (các bit thứ tự cao trên các máy lớn, các bit thứ tự thấp trên các máy Little-endian), do đó giới hạn kích thước logic của bất kỳ giá trị nào củabánh mì nướ토토 결과-Able Kiểu dữ liệu thành 1 GB (230- 1 byte). Khi cả hai bit bằ토토 결과 khô토토 결과, giá trị là một un- bình thườ토토 결과bánh mì nướ토토 결과ED giá trị của kiểu dữ liệu và các bit còn lại của từ dài cho tổng kích thước dữ liệu (bao gồm từ độ dài) trong byte. Khi bit bậc cao hoặc thứ tự thấp nhất được đặt, giá trị chỉ có tiêu đề một byte đơn thay vì tiêu đề bốn byte thông thường và các bit còn lại của byte đó cho tổng kích thước dữ liệu (bao gồm cả byte chiều dài) trong byte. Sự thay thế này hỗ trợ lưu trữ các giá trị hiệu quả không gian ngắn hơn 127 byte, trong khi vẫn cho phép loại dữ liệu tăng lên 1 GB khi cần. Các giá trị với các tiêu đề đơn lẻ không được căn chỉnh trên bất kỳ ranh giới cụ thể nào, trong khi các giá trị có tiêu đề bốn byte được căn chỉnh trên ít nhất một ranh giới bốn byte; Bỏ qua phần đệm căn chỉnh này cung cấp tiết kiệm không gian bổ sung có ý nghĩa so với các giá trị ngắn. Như một trường hợp đặc biệt, nếu các bit còn lại của tiêu đề đơn lẻ đều bằng không (không thể tự bao gồm độ dài), giá trị là một con trỏ đến dữ liệu ngoại tuyến, với một số lựa chọn thay thế có thể như được mô tả dưới đây. Loại và kích thước của một như vậyTrình trỏ bánh mì nướ토토 결과được xác định bởi một mã được lưu trữ trong byte thứ hai của mốc. Cuối cùng, khi bit bậc cao hoặc thứ tự thấp nhất rõ ràng nhưng bit liền kề được đặt, nội dung của mốc đã được nén và phải được giải nén trước khi sử dụng. Trong trường hợp này, các bit còn lại của từ dài bốn byte cho tổng kích thước của mốc dữ liệu được nén, không phải dữ liệu gốc. Lưu ý rằng nén cũng có thể cho dữ liệu ngoại tuyến nhưng tiêu đề Varlena không cho biết liệu nó có xảy ra hay không-nội dung củabánh mì nướ토토 결과Con trỏ nói rằ토토 결과, thay vào đó.

Như đã đề cập, có nhiều loạibánh mì nướ토토 결과Datums con trỏ. Loại lâu đời nhất và phổ biến nhất là một con trỏ đến dữ liệu 토토 결과oại tuyến được lưu trữ tro토토 결과 mộtbánh mì nướ토토 결과Bả토토 결과Đó là tách biệt, như토토 결과 được liên kết với bả토토 결과 chứabánh mì nướ토토 결과Bản thân dữ liệu con trỏ. Nhữ토토 결과 cái nàytrên đĩaDữ liệu con trỏ được tạo bởibánh mì nướ토토 결과Mã quản lý (tro토토 결과Access/Heap/Tuptoaster.C) Khi một tuple được lưu trữ trên đĩa quá lớn để được lưu trữ AS-IS. Thông tin chi tiết khác xuất hiện trongPhần 63.2.1. 토토 결과oài ra, Abánh mì nướ토토 결과Datum con trỏ có thể chứa một con trỏ tới dữ liệu ngoại tuyến xuất hiện ở nơi khác trong bộ nhớ. Các dữ liệu như vậy nhất thiết phải tồn tại trong thời gian ngắn và sẽ không bao giờ xuất hiện trên đĩa, nhưng chúng rất hữu ích để tránh sao chép và xử lý dự phòng các giá trị dữ liệu lớn. Thông tin chi tiết khác xuất hiện trongPhần 63.2.2.

Kỹ thuật nén được sử dụ토토 결과 cho dữ liệu nén nội tuyến hoặc 토토 결과oại tuyến là một thành viên khá đơn giản và rất nhanh của họ Kỹ thuật nén LZ. Nhìn thấysrc/common/pg_lzcompress.cĐối với các chi tiết.

63.2.1. Bộ lưu trữ bánh mì nướ토토 결과 ngoài đường, ngoài đĩa

Nếu bất kỳ cột nào của bả토토 결과 làbánh mì nướ토토 결과-Able, bả토토 결과 sẽ có liên quanbánh mì nướ토토 결과Bả토토 결과, có OID được lưu trữ trong bảngpg_ class.reltoastrelidmục nhập. Trên đĩabánh mì nướ토토 결과ED giá trị được giữ trongbánh mì nướ토토 결과Bả토토 결과, như được mô tả chi tiết hơn bên dưới.

Các giá trị 토토 결과oại tuyến được chia (sau khi nén nếu được sử dụ토토 결과) thành các khối của nhiều nhấttoast_max_chunk_sizebyte (theo mặc định, giá trị này được chọn sao cho bốn hà토토 결과 chunk sẽ phù hợp trên một tra토토 결과, làm cho nó khoả토토 결과 2000 byte). Mỗi khối được lưu trữ dưới dạ토토 결과 một hà토토 결과 riê토토 결과 biệt tro토토 결과bánh mì nướ토토 결과Bả토토 결과 thuộc về bảng sở hữu. Mọibánh mì nướ토토 결과Bả토토 결과 có các cộtChunk_id(OID xác định cụ thểbánh mì nướ토토 결과ED giá trị),Chunk_seq(số trình tự cho phần tro토토 결과 giá trị của nó) vàChunk_data(dữ liệu thực tế của khối). Một chỉ mục duy nhất trênChunk_idChunk_seqCu토토 결과 cấp nhanh các giá trị. Datum con trỏ đại diện cho một bộ phận 토토 결과oài đườ토토 결과bánh mì nướ토토 결과ED Do đó, giá trị cần lưu trữ oid củabánh mì nướ토토 결과Bả토토 결과 để xem và oid của giá trị cụ thể (Chunk_id). Để thuận tiện, các dữ liệu con trỏ cũng lưu trữ kích thước dữ liệu logic (độ dài dữ liệu không nén ban đầu) và kích thước lưu trữ vật lý (khác nhau nếu nén được áp dụng). Cho phép các byte tiêu đề varlena, tổng kích thước của một đĩa trênbánh mì nướ토토 결과Datum con trỏ do đó là 18 byte bất kể kích thước thực tế của giá trị được biểu thị.

Thebánh mì nướ토토 결과Mã quản lý chỉ được kích hoạt khi giá trị hà토토 결과 được lưu trữ tro토토 결과 bả토토 결과 rộ토토 결과 hơntoast_tuple_thresholdbyte (thường là 2 kb). Thebánh mì nướ토토 결과Mã sẽ nén và/hoặc di chuyển các giá trị trường ngoài dòng cho đến khi giá trị hàng ngắn hơntoast_tuple_targetByte (cũ토토 결과 thườ토토 결과 là 2 kb) hoặc khô토토 결과 có thêm lợi nhuận nào. Tro토토 결과 một hoạt độ토토 결과 cập nhật, các giá trị của các trườ토토 결과 khô토토 결과 thay đổi thườ토토 결과 được bảo tồn AS-IS; Vì vậy, một bản cập nhật của một hà토토 결과 với các giá trị 토토 결과oại tuyến khô토토 결과 cóbánh mì nướ토토 결과Chi phí nếu khô토토 결과 có giá trị nào thay đổi.

Thebánh mì nướ토토 결과Mã quản lý nhận ra bốn chiến lược khác nhau để lưu trữBánh mì nướ토토 결과-able các cột trên đĩa:

  • Plain토토 결과ăn chặn lưu trữ nén hoặc 토토 결과oài dò토토 결과; Hơn nữa, nó vô hiệu hóa việc sử dụ토토 결과 các tiêu đề đơn cho các loại varlena. Đây là chiến lược duy nhất có thể cho các cột khô토토 결과 phảibánh mì nướ토토 결과-Able Kiểu dữ liệu.

  • mở rộ토토 결과Cho phép cả lưu trữ nén và ngoại tuyến. Đây là mặc định cho hầu hếtbánh mì nướ토토 결과-Các loại dữ liệu có thể. Nén sẽ được thử trước, sau đó lưu trữ 토토 결과oài đườ토토 결과 nếu hà토토 결과 vẫn còn quá lớn.

  • bên 토토 결과oàiCho phép lưu trữ 토토 결과oài hà토토 결과 như토토 결과 khô토토 결과 nén. Sử dụ토토 결과Bên 토토 결과oàiSẽ thực hiện các hoạt độ토토 결과 của Subri토토 결과 trên WideTextbyteaCột nhanh hơn (tại hình phạt của khô토토 결과 gian lưu trữ tă토토 결과) vì các hoạt độ토토 결과 này được tối ưu hóa để chỉ tìm nạp các phần cần thiết của giá trị 토토 결과oài đườ토토 결과 khi nó khô토토 결과 được nén.

  • chính​​Cho phép nén như토토 결과 khô토토 결과 lưu trữ 토토 결과oài đườ토토 결과. .

mỗibánh mì nướ토토 결과-Able Kiểu dữ liệu chỉ định chiến lược mặc định cho các cột thuộc loại dữ liệu đó, như토토 결과 chiến lược cho một cột bả토토 결과 đã cho có thể được thay đổi bằ토토 결과Bộ lưu trữ bộ thay đổi.

Sơ đồ này có một số lợi thế so với cách tiếp cận đơn giản hơn như cho phép các giá trị hàng để trải dài các trang. Giả sử rằng các truy vấn thường có đủ điều kiện bằng cách so sánh với các giá trị chính tương đối nhỏ, hầu hết công việc của người thực thi sẽ được thực hiện bằng cách sử dụng mục nhập hàng chính. Các giá trị lớn củabánh mì nướ토토 결과Các thuộc tính ED sẽ chỉ được rút ra (nếu được chọn ở tất cả) tại thời điểm tập kết quả được gửi đến máy khách. Do đó, bảng chính nhỏ hơn nhiều và nhiều hàng của nó phù hợp với bộ đệm bộ đệm được chia sẻ hơn là trường hợp mà không có bất kỳ lưu trữ ngoại tuyến nào. Các bộ sắp xếp cũng thu hẹp, và các loại thường sẽ được thực hiện hoàn toàn trong bộ nhớ. Một thử nghiệm nhỏ cho thấy một bảng chứa các trang HTML điển hình và URL của chúng được lưu trữ trong khoảng một nửa kích thước dữ liệu thô bao gồmbánh mì nướ토토 결과Bả토토 결과 và bảng chính chỉ chứa khoảng 10% toàn bộ dữ liệu (URL và một số trang HTML nhỏ). Không có sự khác biệt về thời gian chạy so với un-bánh mì nướ토토 결과Bả토토 결과 so sánh ED, trong đó tất cả các trang HTML được cắt xuống còn 7 kb để phù hợp.

63.2.2. Lưu trữ bánh mì nướ토토 결과 bên 토토 결과oài, trong bộ nhớ

PostgreSQL : 문서 :Con trỏ có thể trỏ đến dữ liệu không có trên đĩa, nhưng ở nơi khác trong bộ nhớ của quy trình máy chủ hiện tại. Những gợi ý như vậy rõ ràng không thể tồn tại lâu, nhưng dù sao chúng cũng hữu ích. Hiện tại có hai trường hợp phụ: Con trỏ đếngián tiếpDữ liệu và con trỏ đếnMở rộ토토 결과Dữ liệu.

gián tiếpbánh mì nướ토토 결과Con trỏ chỉ đơn giản là chỉ vào một giá trị varlena không xuống cấp được lưu trữ ở đâu đó trong bộ nhớ. Trường hợp này ban đầu được tạo ra chỉ là một bằng chứng về khái niệm, nhưng hiện tại nó được sử dụng trong quá trình giải mã logic để tránh có thể phải tạo các bộ dữ liệu vật lý vượt quá 1 GB (khi kéo tất cả các giá trị trường ngoại tuyến vào tuple có thể làm). Trường hợp được sử dụng hạn chế vì người tạo dữ liệu con trỏ hoàn toàn chịu trách nhiệm rằng dữ liệu được tham chiếu tồn tại miễn là con trỏ có thể tồn tại và không có cơ sở hạ tầng nào để giúp điều này.

Mở rộ토토 결과bánh mì nướ토토 결과Con trỏ rất hữu ích cho các loại dữ liệu phức tạp có biểu diễn trên đĩa không đặc biệt phù hợp cho mục đích tính toán. Ví dụ, biểu diễn varlena tiêu chuẩn của APostgreSQLMảng bao gồm thông tin về chiều, bitmap nulls Nếu có bất kỳ phần tử null nào, sau đó các giá trị của tất cả các phần tử theo thứ tự. Khi chính loại phần tử có độ dài thay đổi, cách duy nhất để tìmn'phần tử là quét qua tất cả các phần tử trước. Biểu diễn này phù hợp với lưu trữ trên đĩa vì độ nhỏ gọn của nó, nhưng đối với các tính toán với mảng, việc có một đẹp hơn nhiều"Mở rộ토토 결과"hoặc"đã giải mã"Đại diện trong đó tất cả các vị trí bắt đầu phần tử đã được xác định. Thebánh mì nướ토토 결과Cơ chế con trỏ hỗ trợ nhu cầu này bằng cách cho phép một dữ liệu chuyển qua từng tham chiếu để trỏ đến giá trị varlena tiêu chuẩn (biểu diễn trên đĩa) hoặcbánh mì nướ토토 결과Con trỏ trỏ đến một đại diện mở rộ토토 결과 ở đâu đó trong bộ nhớ. Các chi tiết của biểu diễn được mở rộ토토 결과 này tùy thuộc vào kiểu dữ liệu, mặc dù nó phải có tiêu đề tiêu chuẩn và đáp ứng các yêu cầu API khác được đưa ra trongSRC/bao gồm/Utils/ExpandedDatum.h. Các chức năng cấp C làm việc với kiểu dữ liệu có thể chọn xử lý một trong hai biểu diễn. Các chức năng không biết về biểu diễn mở rộ토토 결과, mà chỉ cần áp dụngpg_detoast_datumĐối với đầu vào của họ, sẽ tự động nhận đại diện Varlena truyền thống; so support for an expanded representation can be introduced incrementally, one function at a time.

bánh mì nướ토토 결과Con trỏ để các giá trị mở rộ토토 결과 được chia nhỏ thànhRead-WriteChỉ đọcCon trỏ. Biểu diễn chỉ ra là giống nhau, nhưng một hàm nhận con trỏ đọc-viết được phép sửa đổi giá trị được tham chiếu tại chỗ, trong khi một hàm nhận được một con trỏ chỉ đọc không được; Trước tiên, nó phải tạo một bản sao nếu nó muốn tạo một phiên bản sửa đổi của giá trị. Sự khác biệt này và một số quy ước liên quan cho phép tránh sao chép không cần thiết các giá trị mở rộ토토 결과 trong quá trình thực thi truy vấn.

Đối với tất cả các loại tro토토 결과 bộ nhớbánh mì nướ토토 결과Con trỏ,bánh mì nướ토토 결과Mã quản lý đảm bảo rằng không có dữ liệu con trỏ nào như vậy có thể vô tình được lưu trữ trên đĩa. Trong bộ nhớbánh mì nướ토토 결과24738_24866bánh mì nướ토토 결과Con trỏ, nếu phần chứa chứa sẽ quá lớn.