Postgresql 9.2.24 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 52. Định nghĩa giao diện phương thức truy cập chỉ kèo bóng đá c1 | NEXT |
Phương pháp truy cập chỉ kèo bóng đá c1 phải xử lý các bản cập nhật đồng thời của chỉ kèo bóng đá c1 bằng nhiều quá trình. LõiPostgreSQLHệ thống thu đượcAccessSharelockTrên chỉ kèo bóng đá c1 trong quá trình quét chỉ kèo bóng đá c1, VàRowExclusiveLockKhi cập nhật chỉ kèo bóng đá c1 (bao gồm cả đơn giảnVACUUM). Từ Các loại khóa này không xung đột, phương pháp truy cập là Chịu trách nhiệm xử lý bất kỳ khóa hạt mịn mà nó có thể cần. Một khóa độc quyền trên toàn bộ chỉ kèo bóng đá c1 sẽ chỉ được thực hiện Trong quá trình tạo chỉ kèo bóng đá c1, phá hủy hoặcReindex.
Xây dựng loại chỉ kèo bóng đá c1 hỗ trợ các bản cập nhật đồng thời thường yêu cầu phân tích sâu rộng và tinh tế về các yêu cầu hành vi. Đối với các loại chỉ kèo bóng đá c1 b-cây và băm, bạn có thể đọc về Các quyết định thiết kế liên quan đếnsrc/backend/access/nbtree/readmevàSRC/Backend/Access/Hash/Readme.
Ngoài các yêu cầu nhất quán nội bộ của chỉ kèo bóng đá c1, Cập nhật đồng thời tạo các vấn đề về tính nhất quán giữa Bảng cha (TheHeap) và chỉ kèo bóng đá c1. Bởi vìPostgreSQLtách biệt truy cập và cập nhật các đống từ các chỉ kèo bóng đá c1, ở đó là Windows trong đó chỉ kèo bóng đá c1 có thể không phù hợp với đống. Chúng tôi xử lý vấn đề này với các quy tắc sau:
Một kèo bóng đá c1 nhập đống mới được thực hiện trước khi thực hiện các kèo bóng đá c1 nhập chỉ kèo bóng đá c1 của nó. (Do đó, quét chỉ kèo bóng đá c1 đồng thời có thể không thấy các kèo bóng đá c1 nhập đống. Điều này không sao vì người đọc chỉ kèo bóng đá c1 sẽ Dù sao cũng không quan tâm đến một hàng không cam kết. Nhưng xemPhần 52.5.)
Khi một kèo bóng đá c1 nhập đống sẽ bị xóa (bởiVACUUM), tất cả các kèo bóng đá c1 nhập chỉ kèo bóng đá c1 của nó phải được xóa Đầu tiên.
12151_12245Amgettuple
vàAmbulkdelete
Không thể xóa các kèo bóng đá c1 từ
các trang được ghim bởi các phụ trợ khác. Nhu cầu này
Quy tắc được giải thích bên dưới.
Không có quy tắc thứ ba, có thể một đầu đọc chỉ kèo bóng đá c1
Xem kèo bóng đá c1 nhập chỉ kèo bóng đá c1 ngay trước khi nó bị xóa bởiVACUUM, và sau đó đến nơi tương ứng
kèo bóng đá c1 nhập đống sau đó đã bị xóa bởiVACUUM. Điều này không tạo ra vấn đề nghiêm trọng nào nếu điều đó
Số kèo bóng đá c1 vẫn chưa được sử dụng khi người đọc đạt được nó, vì một
khe trống sẽ bị bỏ qua bởiheap_fetch ()
12950_13247snapshotnow), có thể
chấp nhận và trả lại một hàng không thực tế khớp với việc quét
chìa khóa. Chúng tôi có thể bảo vệ chống lại kịch bản này bằng cách yêu cầu quét
chìa khóa được kiểm tra lại đối với hàng đống trong mọi trường hợp, nhưng đó
là quá đắt. Thay vào đó, chúng tôi sử dụng một mã PIN trên trang chỉ kèo bóng đá c1 như một
proxy để chỉ ra rằng người đọc vẫn có thể là"Trong chuyến bay"Từ kèo bóng đá c1 nhập chỉ kèo bóng đá c1 đến phù hợp
HEAP LIÊN QUAN. LàmAmbulkdelete
Block on a pin như vậy đảm bảo rằngNút hút13830_14030
Giải pháp này yêu cầu chỉ số quét là"Đồng bộ": Chúng ta phải tìm nạp từng đống Ngay sau khi quét kèo bóng đá c1 nhập chỉ kèo bóng đá c1 tương ứng. Đây là đắt tiền vì một số lý do. MỘT"Không đồng bộ"14312_14686
trong mộtAmgetbitmap
SCAN INDEX,
Phương thức truy cập không giữ một pin chỉ kèo bóng đá c1 trên bất kỳ
trả lại bộ dữ liệu. Do đó chỉ an toàn khi sử dụng các lần quét như vậy với
Ảnh chụp nhanh tuân thủ MVCC.
KhiAmpredlocksCờ thì không đặt, mọi quét sử dụng phương thức truy cập chỉ kèo bóng đá c1 đó trong một Giao dịch có thể nối tiếp sẽ có được một vị ngữ không chặn Khóa trên toàn bộ chỉ kèo bóng đá c1. Điều này sẽ tạo ra một cuộc xung đột đọc đọc với việc chèn bất kỳ tuple nào vào chỉ kèo bóng đá c1 đó bởi một Giao dịch có thể nối tiếp. Nếu một số mô hình đọc-write nhất định Xung đột được phát hiện giữa một tập hợp có thể nối tiếp đồng thời giao dịch, một trong những giao dịch đó có thể bị hủy Bảo vệ tính toàn vẹn dữ liệu. Khi cờ được đặt, nó chỉ ra rằng Phương pháp truy cập chỉ kèo bóng đá c1 thực hiện vị ngữ hạt mịn hơn Khóa, sẽ có xu hướng giảm tần số như vậy hủy giao dịch.