Postgresql 9.3.25 Tài cách đọc kèo bóng đá | ||||
---|---|---|---|---|
Prev | UP | Chương 58. Cơ sở dữ cách đọc kèo bóng đá Lưu trữ vật lý | NEXT |
Phần này cung cấp tổng quan về định dạng cách đọc kèo bóng đá được sử dụng trongPostgreSQLBảng và chỉ mục.[1]Chuỗi vàbánh mì nướngBảng được định dạng chỉ như một bảng thông thường.
Trong phần giải thích sau, AbyteIS Giả sử chứa 8 bit. Ngoài ra, thuật ngữMụcđề cập đến một giá trị dữ liệu riêng lẻ đó là Được lưu trữ trên một cách đọc kèo bóng đá. Trong một bảng, một mục là một hàng; trong một chỉ mục, một Mục là một mục nhập chỉ mục.
Mỗi bảng và chỉ mục được lưu trữ dưới dạng một mảngcách đọc kèo bóng đácó kích thước cố định (thường là 8 kb, mặc dù Kích thước cách đọc kèo bóng đá khác nhau có thể được chọn khi biên dịch máy chủ). TRONG một bảng, tất cả các cách đọc kèo bóng đá đều tương đương về mặt logic, vì vậy một Mục (hàng) có thể được lưu trữ trong bất kỳ cách đọc kèo bóng đá nào. Trong các chỉ mục, cách đọc kèo bóng đá đầu tiên là thường được bảo lưu dưới dạngMetapageGiữ thông tin kiểm soát và có thể có nhiều loại cách đọc kèo bóng đá khác nhau Trong chỉ mục, tùy thuộc vào phương thức truy cập chỉ mục.
Bảng 58-2Hiển thị bố cục tổng thể của một cách đọc kèo bóng đá. Có năm phần cho mỗi phần cách đọc kèo bóng đá.
Bảng 58-2. Bố cục cách đọc kèo bóng đá tổng thể
Mục | Mô tả |
---|---|
PageHeaderData | 24 byte dài. Chứa thông tin chung về cách đọc kèo bóng đá, bao gồm các con trỏ không gian trống. |
itemiddata | Mảng (bù, chiều dài) Các cặp chỉ vào các mục thực tế. 4 byte cho mỗi mục. |
không gian trống | Không gian không phân bổ. Con trỏ mục mới được phân bổ từ Bắt đầu khu vực này, các mục mới từ cuối. |
Mục | Bản thân các mục thực tế. |
không gian đặc biệt | Phương pháp truy cập chỉ mục Dữ cách đọc kèo bóng đá cụ thể. Phương pháp khác nhau lưu trữ Dữ cách đọc kèo bóng đá khác nhau. Trống trong các bảng thông thường. |
24 byte đầu tiên của mỗi cách đọc kèo bóng đá bao gồm một tiêu đề cách đọc kèo bóng đá (PageHeaderData). Định dạng của nó là chi tiết trongBảng 58-3. Các Trường đầu tiên theo dõi mục WAL gần đây nhất liên quan đến cách đọc kèo bóng đá này. Trường thứ hai chứa kiểm tra cách đọc kèo bóng đá nếuKiểm tra dữ cách đọc kèo bóng đálà Đã bật. Tiếp theo là trường 2 byte chứa bit cờ. Đây là theo sau là ba trường số nguyên 2 byte (PD_LOWER, PD_UPPER,, Vàpd_special). Chúng chứa byte bù đắp từ cách đọc kèo bóng đá bắt đầu cho đến khi bắt đầu không gian không được phân bổ, đến Sự kết thúc của không gian không được phân bổ, và bắt đầu không gian. 2 byte tiếp theo của tiêu đề cách đọc kèo bóng đá,pd_pagesize_version, Lưu trữ cả kích thước cách đọc kèo bóng đá và một chỉ báo phiên bản. Bắt đầu vớiPostgreSQL8.3 Số phiên bản là 4;PostgreSQL8.1 và 8.2 đã sử dụng Phiên bản số 3;PostgreSQL8.0 Phiên bản đã sử dụng số 2;PostgreSQL7.3 và 7.4 Phiên bản đã sử dụng số 1; Phiên bản phát hành trước đã sử dụng Số 0. (Bố cục cách đọc kèo bóng đá cơ bản và định dạng tiêu đề không thay đổi Trong hầu hết các phiên bản này, nhưng bố cục của các tiêu đề hàng Heap có.) Kích thước cách đọc kèo bóng đá về cơ bản chỉ có mặt dưới dạng kiểm tra chéo; Có Không có hỗ trợ để có nhiều hơn một kích thước cách đọc kèo bóng đá trong một cài đặt. Trường cuối cùng là một gợi ý cho thấy việc cắt tỉa cách đọc kèo bóng đá này có phải là có khả năng mang lại lợi nhuận: nó theo dõi Xmax chưa được giới thiệu lâu đời nhất trên cách đọc kèo bóng đá.
Bảng 58-3. PageHeaderData Layout
trường | loại | length | Mô tả |
---|---|---|---|
PD_LSN | PageXLogRecptr | 8 byte | LSN: Byte tiếp theo sau byte cuối cùng của bản ghi XLOG cho thay đổi cuối cùng đến cách đọc kèo bóng đá này |
pd_checksum | UINT16 | 2 byte | Tổng kiểm tra cách đọc kèo bóng đá |
PD_FLAGS | UINT16 | 2 byte | BIT cờ |
PD_LOWER | Vị trí Index | 2 byte | Offset để bắt đầu không gian trống |
PD_UPPER | Vị trí Index | 2 byte | bù vào cuối không gian trống |
pd_special | Vị trí Index | 2 byte | Offset để bắt đầu không gian đặc biệt |
pd_pagesize_version | UINT16 | 2 byte | Kích thước cách đọc kèo bóng đá và thông tin số phiên bản bố cục |
pd_prune_xid | Giao dịchID | 4 byte | Xmax không hợp nhất lâu đời nhất trên cách đọc kèo bóng đá hoặc không nếu không |
Tất cả các chi tiết có thể được tìm thấy trongsrc/bao gồm/lưu trữ/bufpage.h.
Theo tiêu đề cách đọc kèo bóng đá là các định danh mục (itemiddata), mỗi người yêu cầu bốn byte. Một mặt hàng Định danh chứa một byte offset để bắt đầu một mục, nó độ dài tính bằng byte và một vài bit thuộc tính ảnh hưởng đến Giải thích. Mã định danh mục mới được phân bổ khi cần thiết từ Sự khởi đầu của không gian không được phân bổ. Số lượng mặt hàng số nhận dạng có mặt có thể được xác định bằng cách xemPD_LOWER, được tăng lên để phân bổ một cái mới định danh. Bởi vì một định danh mục không bao giờ được di chuyển cho đến khi nó Freed, chỉ số của nó có thể được sử dụng trên cơ sở dài hạn để tham khảo mục, ngay cả khi bản thân mặt hàng được di chuyển trên cách đọc kèo bóng đá để không gian trống nhỏ gọn. Trên thực tế, mọi con trỏ đến một mục (itemPulum, còn được gọi làCTID) được tạo bởiPostgreSQLbao gồm số cách đọc kèo bóng đá và chỉ mục của một định danh mục.
Bản thân các mặt hàng được lưu trữ trong không gian được phân bổ ngược Từ cuối không gian không phân bổ. Cấu trúc chính xác khác nhau Tùy thuộc vào những gì bảng chứa. Bảng và trình tự Cả hai đều sử dụng một cấu trúc có tênHeaptupleHeaderData, được mô tả bên dưới.
Phần cuối cùng là"Đặc biệt phần"có thể chứa bất cứ điều gì phương thức truy cập mong muốn Để lưu trữ. Ví dụ: các chỉ mục B-Tree LIÊN SÁCH liên kết đến cách đọc kèo bóng đá của cách đọc kèo bóng đá anh chị em trái và phải, cũng như một số dữ liệu khác có liên quan đến Cấu trúc chỉ số. Bảng thông thường không sử dụng phần đặc biệt tại tất cả (được chỉ định bởi cài đặtpd_specialbằng kích thước cách đọc kèo bóng đá).
Tất cả các hàng bảng được cấu trúc theo cùng một cách. Có a Tiêu đề kích thước cố định (chiếm 23 byte trên hầu hết các máy), theo sau bởi một bitmap null tùy chọn, trường ID đối tượng tùy chọn và dữ cách đọc kèo bóng đá người dùng. Tiêu đề được chi tiết trongBảng 58-4. Dữ cách đọc kèo bóng đá người dùng thực tế (các cột của hàng) bắt đầu Offset được chỉ định bởiT_HOFF, mà phải Luôn luôn là bội số của khoảng cách Maxalign cho nền tảng. Các null bitmap chỉ có mặt nếuHEAP_HASNULLbit được đặt trongT_INFOMASK. Nếu nó có mặt, nó chỉ bắt đầu sau khi tiêu đề cố định và chiếm đủ byte để có một bit mỗi cột dữ cách đọc kèo bóng đá (nghĩa làt_nattsbit toàn bộ). Trong danh sách các bit này, 1 bit cho biết không null, 0 Bit là một null. Khi bitmap không có mặt, tất cả các cột là giả định không null. ID đối tượng chỉ có mặt nếuHEAP_HASOIDbit được đặt trongt_infomask. Nếu có mặt, nó xuất hiện ngay trước TheT_HOFFranh giới. Bất kỳ đệm cần thiết để làmT_HOFFMaxalign Nhiều sẽ xuất hiện giữa bitmap null và ID đối tượng. (Điều này lần lượt đảm bảo rằng ID đối tượng được căn chỉnh phù hợp.)
Bảng 58-4. Bố cách đọc kèo bóng đá HeaptupleHeaderData
trường | loại | LEGN | Mô tả |
---|---|---|---|
t_xmin | TranstercentID | 4 byte | Chèn tem XID |
T_XMAX | Giao dịchID | 4 byte | Xóa tem XID |
T_CID | CommandID | 4 byte | Chèn và/hoặc xóa tem CID (lớp phủ với T_XVAC) |
T_XVAC | TranstercentID | 4 byte | XID cho hoạt động chân không di chuyển phiên bản hàng |
T_CTID | itempulinterdata | 6 byte | TiD hiện tại của phiên bản hàng này hoặc mới hơn |
T_INFOMASK2 | UINT16 | 2 byte | Số lượng thuộc tính, cộng với các bit cờ khác nhau |
t_infomask | UINT16 | 2 byte | BIT cờ khác nhau |
T_HOFF | UINT8 | 1 byte | OFFSET TO DỮ LIỆU |
Tất cả các chi tiết có thể được tìm thấy trongsrc/bao gồm/truy cập/htup_details.h.
Giải thích dữ cách đọc kèo bóng đá thực tế chỉ có thể được thực hiện với thông tin thu được từ các bảng khác, chủ yếu làPG_Attribution. Các giá trị chính cần thiết để xác định Vị trí trường làAttlenvàAttalign. Không có cách nào để trực tiếp Nhận một thuộc tính cụ thể, ngoại trừ khi chỉ có chiều rộng cố định Các trường và không có giá trị null. Tất cả những mánh khóe này được gói gọn trong Chức năngHEAP_GETATTR, FastGetAttrvàheap_getSysAttr.
Để đọc dữ cách đọc kèo bóng đá bạn cần lần lượt kiểm tra từng thuộc tính. Trước tiên, hãy kiểm tra xem trường có phải là null theo bitmap null hay không. Nếu là, đi đến tiếp theo. Sau đó, hãy chắc chắn rằng bạn có quyền liên kết. Nếu trường là trường chiều rộng cố định, thì tất cả các byte được đặt đơn giản. Nếu đó là trường Độ dài thay đổi (Attlen = -1) Sau đó, nó phức tạp hơn một chút. Tất cả các loại dữ cách đọc kèo bóng đá có độ dài thay đổi Chia sẻ cấu trúc tiêu đề chungCấu trúc varlena, bao gồm tổng chiều dài của giá trị được lưu trữ Và một số bit cờ. Tùy thuộc vào các cờ, dữ cách đọc kèo bóng đá có thể là nội tuyến hoặc trong mộtkèo bóng đá euro:Bảng; Nó cũng có thể bị nén (xemPhần 58.2).
[1] |
Trên thực tế, các phương thức truy cập chỉ mục không cần sử dụng định dạng cách đọc kèo bóng đá này. Tất cả các phương thức chỉ mục hiện có sử dụng định dạng cơ bản này, nhưng Dữ liệu được giữ trên các mục tiêu chỉ mục thường không tuân theo bố cục mục quy tắc. |
prev | PostgreSQL: cách đọc kèo | Tiếp theo |
Việc khởi tạo Cái nĩa | UP | BKIGiao diện phụ trợ |