Phiên bản được hỗ trợ:16 / 15 / 14 / 13
Phiên bản không được hỗ trợ:12 / 11

67.4. Triển khai#

Phần này bao gồm soi kèo bóng đá truoctran chi tiết triển khai chỉ mục B-cây có thể được sử dụng cho người dùng nâng cao. Nhìn thấysrc/backend/access/nbtree/readmeTrong phân phối nguồn cho mô tả tập trung vào nội bộ hơn nhiều về việc triển khai cây b.

67.4.1. Cấu trúc B-Tree#

POSTGRESQLsoi kèo bóng đá truoctran chỉ mục B-cây là soi kèo bóng đá truoctran cấu trúc cây đa cấp, trong đó mỗi cấp độ của cây có thể được sử dụng như một danh sách soi kèo bóng đá truoctran trang liên kết gấp đôi. Một metapage duy nhất được lưu trữ ở một vị trí cố định khi bắt đầu tệp phân đoạn đầu tiên của chỉ mục. Tất cả soi kèo bóng đá truoctran trang khác là soi kèo bóng đá truoctran trang lá hoặc trang nội bộ. soi kèo bóng đá truoctran trang lá là soi kèo bóng đá truoctran trang ở mức thấp nhất của cây. Tất cả soi kèo bóng đá truoctran cấp độ khác bao gồm soi kèo bóng đá truoctran trang nội bộ. Mỗi trang lá chứa soi kèo bóng đá truoctran bộ dữ liệu chỉ vào soi kèo bóng đá truoctran hàng bảng. Mỗi trang nội bộ chứa soi kèo bóng đá truoctran bộ dữ liệu chỉ vào cấp độ tiếp theo trong cây. Thông thường, hơn 99% của tất cả soi kèo bóng đá truoctran trang là soi kèo bóng đá truoctran trang lá. Cả trang nội bộ và trang lá đều sử dụng định dạng trang tiêu chuẩn được mô tả trongPhần 73.6.

soi kèo bóng đá truoctran trang lá mới được thêm vào chỉ mục B-cây khi một trang lá hiện tại không thể phù hợp với một bộ tuple đến. MỘTTách trang8637_8803đường xuốngđến trang mới trong trang cha mẹ, điều này có thể khiến cha mẹ chia lần lượt. Trang chia táchCascade lên trênHồitheo kiểu đệ quy. Khi trang gốc cuối cùng không thể phù hợp với đường xuống mới, APhân chia trang gốcHoạt động diễn ra. Điều này thêm soi kèo bóng đá truoctran cấp độ mới vào cấu trúc cây bằng cách tạo soi kèo bóng đá truoctran trang gốc mới là soi kèo bóng đá truoctran cấp trên trang gốc gốc.

67.4.2. Xóa chỉ soi kèo bóng đá truoctran từ dưới lên#

soi kèo bóng đá truoctran chỉ mục B-cây không nhận thức trực tiếp rằng theo MVCC, có thể có nhiều phiên bản còn lại của cùng một hàng bảng logic; Đối với một chỉ mục, mỗi tuple là một đối tượng độc lập cần mục nhập chỉ mục riêng của nó.HồiPhiên bản ChurnxôngTuples đôi khi có thể tích lũy và ảnh hưởng xấu đến độ trễ và thông lượng truy vấn. Điều này thường xảy ra vớiCập nhậtHOTTối ưu hóa.Thay đổi giá trị của chỉ một cột được bao phủ bởi một chỉ soi kèo bóng đá truoctran trong mộtCập nhật luôn luônđòi hỏi một bộ tổng chỉ soi kèo bóng đá truoctran mới - một choMỗi và mọiChỉ mục trên bảng. Lưu ý cụ thể rằng điều này bao gồm soi kèo bóng đá truoctran chỉ mục không phảiHồiSửa đổi về mặt logicHồibởiCập nhật. Tất cả soi kèo bóng đá truoctran chỉ mục sẽ cần một bộ chỉ số vật lý kế thừa chỉ vào phiên bản mới nhất trong bảng. Mỗi tuple mới trong mỗi chỉ mục thường sẽ cần cùng tồn tại với bản gốcHồiCập nhậtxôngTuple trong soi kèo bóng đá truoctran khoảng thời gian ngắn (thường là cho đến khi ngay sauCập nhậtgiao dịch cam kết).

11006_11085Xóa chỉ soi kèo bóng đá truoctran từ dưới lênVượt qua. Mỗi lần xóa được kích hoạt trong phản ứng với dự đoánPhân chia phiên bản phiên bảnHồi. Điều này chỉ xảy ra với soi kèo bóng đá truoctran chỉ mục không được sửa đổi về mặt logic bởiCập nhật11388_12054Định tínhPhân biệt liên quan đến soi kèo bóng đá truoctran hàng và phiên bản logic. Điều này tương phản vớitừ trên xuốngHồiViệc dọn dẹp chỉ mục được thực hiện bởi soi kèo bóng đá truoctran công nhân Autovacuum, được kích hoạt khi nhất địnhĐịnh lượngngưỡng cấp độ bảng bị vượt quá (xemPhần 25.1.6).

Lưu ý

Không phải tất cả soi kèo bóng đá truoctran hoạt động xóa được thực hiện trong soi kèo bóng đá truoctran chỉ mục B-cây là soi kèo bóng đá truoctran hoạt động xóa từ dưới lên. Có một danh mục riêng biệt về xóa tuple:Xóa Tuple Index đơn giản12822_12960lp_deadbit đã được đặt). Giống như xóa chỉ soi kèo bóng đá truoctran từ dưới lên, việc xóa chỉ soi kèo bóng đá truoctran đơn giản diễn ra tại điểm phân chia trang được dự đoán là một cách để tránh sự phân chia.

Xóa đơn giản là cơ hội theo nghĩa là nó chỉ có thể diễn ra khi soi kèo bóng đá truoctran lần quét chỉ mục gần đây đặtLP_DEADsoi kèo bóng đá truoctran mục bị ảnh hưởng khi đi qua. TrướcPostgreSQL14, Danh mục duy nhất của việc xóa cây B là xóa đơn giản. Sự khác biệt chính giữa xóa CNTT và từ dưới lên là chỉ có trước đây được điều khiển một cách cơ hội bởi hoạt động của soi kèo bóng đá truoctran lần quét chỉ số, trong khi chỉ có phần sau đặc biệt nhắm mục tiêu phiên bản từCập nhậtS không sửa đổi một cách hợp lý soi kèo bóng đá truoctran cột được lập chỉ mục.

Xóa chỉ mục từ dưới lên thực hiện phần lớn tất cả soi kèo bóng đá truoctran chỉ số rác làm sạch cho soi kèo bóng đá truoctran chỉ mục cụ thể với khối lượng công việc nhất định. Điều này được mong đợi với bất kỳ chỉ mục B-Tree nào chịu phiên bản quan trọng từCập nhật14038_14365hằng sốPhiên bản Churn từCập nhậts. Thậm chí sau đó, soi kèo bóng đá truoctran người đầy đủquét sạchKhănbởi AVACUUMHoạt động (thường chạy trong quy trình công nhân Autovacuum) cuối cùng sẽ được yêu cầu như soi kèo bóng đá truoctran phần củatập thểLàm sạch bảng và mỗi chỉ soi kèo bóng đá truoctran của nó.

Không giống nhưNút hút, Xóa chỉ số từ dưới lên không cung cấp bất kỳ sự đảm bảo mạnh mẽ nào về thời gian của bộ chỉ số rác lâu đời nhất có thể. Không có chỉ soi kèo bóng đá truoctran nào được phép giữ lại15025_15028Rác nổixôngsoi kèo bóng đá truoctran tổng chỉ mục đã chết trước một điểm cắt bảo thủ được chia sẻ bởi bảng và tất cả soi kèo bóng đá truoctran chỉ mục của nó. Sự bất biến ở cấp độ bảng cơ bản này làm cho việc tái chế bảng an toàntids. Đây là cách soi kèo bóng đá truoctran hàng logic khác biệt có thể sử dụng lại cùng một bảngTIDTheo thời gian (mặc dù điều này không bao giờ có thể xảy ra với hai hàng logic có tuổi thọ giống nhauVACUUMChu kỳ).

67.4.3. Sự sao chép#

15838_15916tất cả15956_16255.

16306_16406Danh sách đăngTuple cho mỗi nhóm. Giá trị khóa cột chỉ xuất hiện soi kèo bóng đá truoctran lần trong biểu diễn này. Điều này được theo sau bởi soi kèo bóng đá truoctran mảng được sắp xếp củaTIDs chỉ vào soi kèo bóng đá truoctran hàng trong bảng. Điều này làm giảm đáng kể kích thước lưu trữ của soi kèo bóng đá truoctran chỉ mục trong đó mỗi giá trị (hoặc mỗi kết hợp riêng biệt của soi kèo bóng đá truoctran giá trị cột) xuất hiện trung bình nhiều lần. Độ trễ của soi kèo bóng đá truoctran truy vấn có thể được giảm đáng kể. Thông lượng truy vấn tổng thể có thể tăng đáng kể. Chi phí của máy hút bụi chỉ số thông thường cũng có thể được giảm đáng kể.

Note

sự sao chép B-cây cũng hiệu quả vớitrùng lặpcó chứa giá trị null, mặc dù soi kèo bóng đá truoctran giá trị null không bao giờ bằng nhau theo=17289_17491

Quá trình trùng lặp xảy ra một cách uể oải, khi một mặt hàng mới được chèn không thể phù hợp trên trang lá hiện có, mặc dù chỉ khi việc xóa chỉ mục không thể miễn phí đủ cho vật phẩm mới (thường được xem xét ngắn gọn và sau đó bỏ qua). Không giống như soi kèo bóng đá truoctran bộ dữ liệu đăng bài của Gin, danh sách đăng bài B-Tree không cần mở rộng mỗi khi chèn bản sao mới; Chúng chỉ là một biểu diễn vật lý thay thế của soi kèo bóng đá truoctran nội dung logic gốc của trang Lá. Thiết kế này ưu tiên hiệu suất nhất quán với khối lượng công việc đọc-ghi hỗn hợp. Hầu hết soi kèo bóng đá truoctran ứng dụng khách hàng ít nhất sẽ thấy một lợi ích hiệu suất vừa phải từ việc sử dụng sự trùng lặp. Sự trùng lặp được bật theo mặc định.

18253_18267ReindexÁp dụng sự trùng lặp để tạo danh sách đăng bài, mặc dù chiến lược họ sử dụng hơi khác nhau. Mỗi nhóm soi kèo bóng đá truoctran bộ dữ liệu thông thường trùng lặp đã gặp trong đầu vào được sắp xếp lấy từ bảng được hợp nhất thành một danh sách đăng bài TupletrướcĐược thêm vào trang lá đang chờ xử lý hiện tại. Danh sách đăng cá nhân được đóng gói với nhiềuTIDs càng tốt. soi kèo bóng đá truoctran trang lá được viết ra theo cách thông thường, mà không có bất kỳ sự kết hợp riêng biệt nào. Chiến lược này rất phù hợp vớiTạo chỉ soi kèo bóng đá truoctranReindexBởi vì chúng là hoạt động hàng loạt soi kèo bóng đá truoctran lần.

khối lượng công việc nặng không được hưởng lợi từ việc sao chép do có ít hoặc không có giá trị trùng lặp trong soi kèo bóng đá truoctran chỉ mục sẽ phải chịu một hình phạt hiệu suất nhỏ, cố định (trừ khi sự trùng lặp bị vô hiệu hóa rõ ràng). TheDEDuplicate_ItemsTham số lưu trữ có thể được sử dụng để vô hiệu hóa sự trùng lặp trong soi kèo bóng đá truoctran chỉ mục riêng lẻ. Không bao giờ có bất kỳ hình phạt hiệu suất nào với khối lượng công việc chỉ đọc, vì việc đọc danh sách đăng bài ít nhất là hiệu quả như đọc biểu diễn tuple tiêu chuẩn. Vô hiệu hóa sự trùng lặp thường không hữu ích.

Đôi khi có thể cho soi kèo bóng đá truoctran chỉ mục duy nhất (cũng như soi kèo bóng đá truoctran ràng buộc duy nhất) để sử dụng sự trùng lặp. Điều này cho phép soi kèo bóng đá truoctran trang lá tạm thờiHồihấp thụxông19766_20229

Tip

Một heuristic đặc biệt được áp dụng để xác định xem có nên diễn ra một chỉ số trùng lặp trong một chỉ mục duy nhất hay không. Nó thường có thể bỏ qua thẳng để phân tách một trang lá, tránh hình phạt hiệu suất khỏi soi kèo bóng đá truoctran chu kỳ lãng phí trên soi kèo bóng đá truoctran đường chẵn không kết thúc không có ích. Nếu bạn lo lắng về chi phí của sự trùng lặp, hãy xem xét cài đặtcó chọn lọc. Để lại sự trùng lặp được bật trong soi kèo bóng đá truoctran chỉ mục duy nhất có ít nhược điểm.

Không thể sao chép không thể được sử dụng trong mọi trường hợp do hạn chế cấp độ thực hiện. An toàn trùng lặp được xác định khiTạo chỉ soi kèo bóng đá truoctranhoặcReindexđược chạy.

Lưu ý rằng sự trùng lặp được coi là không an toàn và không thể được sử dụng trong soi kèo bóng đá truoctran trường hợp sau đây liên quan đến sự khác biệt có ý nghĩa về mặt ngữ nghĩa giữa soi kèo bóng đá truoctran dữ liệu bằng nhau:

  • Text, VarcharCharKhông thể sử dụng sao chép khi ANondeterministicđối chiếu được sử dụng. Sự khác biệt về trường hợp và điểm nhấn phải được bảo tồn giữa soi kèo bóng đá truoctran mốc thời gian bằng nhau.

  • SốKhông thể sử dụng sự trùng lặp. Thang hiển thị số phải được bảo tồn giữa soi kèo bóng đá truoctran dữ liệu bằng nhau.

  • jsonbKhông thể sử dụng sự trùng lặp, vìJSONBLớp toán tử B-cây sử dụngSốnội bộ.

  • float4float8Không thể sử dụng sự trùng lặp. soi kèo bóng đá truoctran loại này có soi kèo bóng đá truoctran biểu diễn riêng biệt cho-00, tuy nhiên được coi là bằng nhau. Sự khác biệt này phải được bảo tồn.

Có soi kèo bóng đá truoctran hạn chế cấp độ thực hiện tiếp theo có thể được nâng lên trong phiên bản tương lai củaPostgreSQL:

  • soi kèo bóng đá truoctran loại container (như soi kèo bóng đá truoctran loại tổng hợp, mảng hoặc loại phạm vi) không thể sử dụng sự trùng lặp.

Có soi kèo bóng đá truoctran hạn chế cấp độ triển khai tiếp theo áp dụng bất kể lớp toán tử hoặc đối chiếu được sử dụng:

  • Bao gồmChỉ soi kèo bóng đá truoctran không bao giờ có thể sử dụng sự trùng lặp.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.