Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
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ùng một trang chohiện tạiPhiên bản hoặc một trong kèo bóng đá hom nay phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

13.2. Phân lập kèo bóng đá hom nay

TheSQLTiêu chuẩn xác định bốn cấp độ cô lập kèo bóng đá hom nay. Nghiêm ngặt nhất là có thể nối tiếp, được xác định bởi tiêu chuẩn trong một đoạn nói rằng bất kỳ việc thực hiện đồng thời của một tập hợp các kèo bóng đá hom nay có thể nối tiếp được đảm bảo để tạo ra hiệu ứng tương tự như chạy chúng tại một thời điểm theo một thứ tự.

Hiện tượng bị cấm ở kèo bóng đá hom nay cấp độ khác nhau là:

đọc bẩn

Một kèo bóng đá hom nay đọc dữ liệu được viết bởi một kèo bóng đá hom nay không cam kết đồng thời.

không thể lặp lại

Một kèo bóng đá hom nay đọc lại dữ liệu mà nó đã đọc trước đó và thấy rằng dữ liệu đã được sửa đổi bởi một kèo bóng đá hom nay khác (được cam kết kể từ lần đọc ban đầu).

Phantom Read

12907_13113

dị thường tuần tự hóa

Kết quả của việc thực hiện thành công một nhóm kèo bóng đá hom nay không phù hợp với tất cả các thứ tự có thể chạy các kèo bóng đá hom nay đó cùng một lúc.

Tiêu chuẩn SQL và các mức cách ly kèo bóng đá hom nay được thực hiện được mô tả trongBảng 13.1.

Bảng 13.1. Mức cách cô lập kèo bóng đá hom nay

Cấp độ cô kèo bóng đá hom nay đọc bẩn Đọc không lặp lại Phantom Read dị thường tuần tự hóa
Đọc không được cam kết được phép, nhưng không phải trong pg có thể có thể có thể
Đọc cam kết Không thể có thể có thể có thể
Đọc lặp lại Không thể Không thể được phép, nhưng không phải trong pg có thể
serializable Không thể Không thể Không thể Không thể

inPostgreSQL, bạn có thể yêu cầu bất kỳ cấp độ nào trong bốn cấp độ phân lập kèo bóng đá hom nay tiêu chuẩn, nhưng nội bộ chỉ có ba mức cách ly riêng biệt được thực hiện, tức là, chế độ không cam kết của PostgreSQL hành xử như đã đọc. Điều này là do đó là cách hợp lý duy nhất để ánh xạ các mức cách ly tiêu chuẩn cho kiến ​​trúc kiểm soát đồng thời đa dạng của PostgreSQL.

Bảng cũng cho thấy việc thực hiện đọc lặp lại của PostgreSQL không cho phép đọc bóng ma. Điều này có thể chấp nhận được theo tiêu chuẩn SQL vì tiêu chuẩn chỉ định bất thường nào phảikhôngxảy ra ở một số cấp độ cô kèo bóng đá hom nay nhất định; Đảm bảo cao hơn là chấp nhận được.

Để đặt mức cách ly kèo bóng đá hom nay của kèo bóng đá hom nay, sử dụng lệnhĐặt kèo bóng đá hom nay.

quan trọng

Một sốPostgreSQLCác loại dữ liệu và chức năng có các quy tắc đặc biệt liên quan đến hành vi kèo bóng đá hom nay. Cụ thể, các thay đổi được thực hiện thành một chuỗi (và do đó là bộ đếm của một cột được khai báo bằng cách sử dụngsê -ri16091_16222Phần 9.16Phần 8.1.4.

13.2.1. Đọc mức độ cô kèo bóng đá hom nay cam kết

Đọc cam kếtlà mức cách ly mặc định trongPOSTGRESQL. Khi một kèo bóng đá hom nay sử dụng cấp độ cô lập này, mộtChọnTruy vấn (không cóđể cập nhật/chia sẻmệnh đề) chỉ thấy dữ liệu được cam kết trước khi truy vấn bắt đầu; Nó không bao giờ thấy dữ liệu không được cam kết hoặc các thay đổi được thực hiện trong quá trình thực hiện truy vấn bằng các kèo bóng đá hom nay đồng thời.ChọnTruy vấn thấy một ảnh chụp nhanh của cơ sở dữ liệu kể từ khi truy vấn bắt đầu chạy. Tuy nhiên,ChọnKhông thấy hiệu ứng của các bản cập nhật trước được thực hiện trong kèo bóng đá hom nay của chính nó, mặc dù chúng chưa được cam kết. Cũng lưu ý rằng hai liên tiếpChọnCác lệnh có thể xem dữ liệu khác nhau, mặc dù chúng nằm trong một kèo bóng đá hom nay duy nhất, nếu các kèo bóng đá hom nay khác thực hiện thay đổi sau lần đầu tiênChọnbắt đầu và trước lần thứ haiChọnbắt đầu.

Cập nhật, Xóa, Chọn để cập nhậtChọn để chia sẻkèo bóng đá hom nay lệnh hoạt động giống nhưChọnVề mặt tìm kiếm các hàng mục tiêu: Họ sẽ chỉ tìm thấy các hàng mục tiêu được thực hiện theo thời gian bắt đầu lệnh. Tuy nhiên, một hàng mục tiêu như vậy có thể đã được cập nhật (hoặc bị xóa hoặc bị khóa) bởi một kèo bóng đá hom nay đồng thời khác vào thời điểm nó được tìm thấy.WHEREmệnh đề) được đánh giá lại để xem phiên bản cập nhật của hàng có phù hợp với điều kiện tìm kiếm không. Nếu vậy, trình cập nhật thứ hai tiến hành hoạt động của nó bằng phiên bản cập nhật của hàng.Chọn để cập nhậtChọn chia sẻ, Điều này có nghĩa là phiên bản cập nhật của hàng được khóa và trả lại cho máy khách.

Chènvớitrên xung đột do cập nhậtmệnh đề hoạt động tương tự. Trong chế độ đọc cam kết, mỗi hàng được đề xuất để chèn sẽ chèn hoặc cập nhật.Chèn, TheCập nhậtmệnh đề sẽ ảnh hưởng đến hàng đó, mặc dù có thểkhôngPhiên bản của hàng đó có thể hiển thị theo lệnh.

Chènvớivề xung đột không làm gìmệnh đề có thể đã chèn không tiến hành một hàng do kết quả của một kèo bóng đá hom nay khác mà các hiệu ứng không hiển thị đối vớiChènẢnh chụp nhanh. Một lần nữa, đây chỉ là trường hợp trong chế độ đã cam kết.

Vì kèo bóng đá hom nay quy tắc trên, có thể một lệnh cập nhật để xem một ảnh chụp nhanh không nhất quán: Nó có thể thấy kèo bóng đá hom nay hiệu ứng của kèo bóng đá hom nay lệnh cập nhật đồng thời trên cùng một hàng mà nó đang cố gắng cập nhật, nhưng nó không thấy hiệu ứng của kèo bóng đá hom nay lệnh đó trên kèo bóng đá hom nay hàng khác trong cơ sở dữ liệu. Hành vi này làm cho chế độ cam kết không phù hợp với kèo bóng đá hom nay lệnh liên quan đến kèo bóng đá hom nay điều kiện tìm kiếm phức tạp;

Bắt đầu;

Nếu hai kèo bóng đá hom nay như vậy đồng thời cố gắng thay đổi số dư của tài khoản 12345, chúng tôi rõ ràng muốn kèo bóng đá hom nay thứ hai bắt đầu với phiên bản cập nhật của hàng tài khoản. Bởi vì mỗi lệnh chỉ ảnh hưởng đến một hàng được xác định trước, cho phép nó xem phiên bản cập nhật của hàng không tạo ra bất kỳ sự không nhất quán rắc rối nào.

Cách sử dụng phức tạp hơn có thể tạo ra kết quả không mong muốn trong chế độ đã cam kết đọc. Ví dụ: xem xét mộtXóalệnh hoạt động trên dữ liệu đang được thêm và xóa khỏi tiêu chí hạn chế của nó bởi một lệnh khác, ví dụ: giả sửTrang weblà bảng hai hàng vớitrang web.hitsBình đẳng910:

Bắt đầu;

TheXóasẽ không có hiệu lực mặc dù cótrang web.hits = 10hàng trước và sauCập nhật. Điều này xảy ra do giá trị hàng trước ngày9bị bỏ qua và khiCập nhậtHoàn thành vàXóacó được khóa, giá trị hàng mới không còn10nhưng11, không còn khớp với kèo bóng đá hom nay tiêu chí.

Bởi vì Chế độ đã cam kết bắt đầu mỗi lệnh với một ảnh chụp nhanh mới bao gồm tất cả các kèo bóng đá hom nay được thực hiện cho đến các lệnh tiếp theo, trong cùng một kèo bóng đá hom nay sẽ thấy các tác động của kèo bóng đá hom nay đồng thời đã cam kết trong mọi trường hợp. Điểm tại vấn đề ở trên là liệu có hay khôngđơnLệnh thấy một cái nhìn hoàn toàn nhất quán của cơ sở dữ liệu.

Phân lập kèo bóng đá hom nay một phần được cung cấp bởi Chế độ đã cam kết là đủ cho nhiều ứng dụng và chế độ này nhanh chóng và đơn giản để sử dụng; Tuy nhiên, nó không đủ cho tất cả các trường hợp.

13.2.2. Mức độ cô kèo bóng đá hom nay đọc lặp lại

TheĐọc lặp lạiMức cách ly chỉ thấy dữ liệu được cam kết trước khi kèo bóng đá hom nay bắt đầu; Nó không bao giờ thấy dữ liệu không được cam kết hoặc thay đổi đã thực hiện trong quá trình thực hiện kèo bóng đá hom nay theo các kèo bóng đá hom nay đồng thời.SQLTiêu chuẩn cho mức độ cô kèo bóng đá hom nay này và ngăn chặn tất cả các hiện tượng được mô tả trongBảng 13.1Ngoại trừ kèo bóng đá hom nay dị thường tuần tự hóa. Như đã đề cập ở trên, điều này được cho phép cụ thể bởi tiêu chuẩn, chỉ mô tảTối thiểuBảo vệ mỗi cấp độ cô kèo bóng đá hom nay phải cung cấp.

24341_24522kèo bóng đá hom nay, không phải là bắt đầu câu lệnh hiện tại trong kèo bóng đá hom nay. Do đó, liên tiếpChọnlệnh trong mộtđơnkèo bóng đá hom nay xem cùng một dữ liệu, tức là họ không thấy các thay đổi được thực hiện bởi các kèo bóng đá hom nay khác đã thực hiện sau khi kèo bóng đá hom nay của chính họ bắt đầu.

Các ứng dụng sử dụng cấp độ này phải được chuẩn bị để thử lại các kèo bóng đá hom nay do lỗi tuần tự hóa.

Cập nhật, Xóa, Chọn để cập nhậtChọn để chia sẻkèo bóng đá hom nay lệnh hoạt động giống nhưChọnVề mặt tìm kiếm các hàng mục tiêu: Họ sẽ chỉ tìm thấy các hàng mục tiêu được thực hiện kể từ thời gian bắt đầu kèo bóng đá hom nay. Tuy nhiên, một hàng mục tiêu như vậy có thể đã được cập nhật (hoặc bị xóa hoặc bị khóa) bởi một kèo bóng đá hom nay đồng thời khác vào thời điểm nó được tìm thấy.

Lỗi: Không thể tuần tự hóa quyền truy cập do cập nhật đồng thời

Bởi vì kèo bóng đá hom nay đọc lặp lại không thể sửa đổi hoặc khóa các hàng thay đổi bởi các kèo bóng đá hom nay khác sau khi kèo bóng đá hom nay đọc lặp lại bắt đầu.

Khi một ứng dụng nhận được thông báo lỗi này, nó sẽ hủy bỏ kèo bóng đá hom nay hiện tại và thử lại toàn bộ kèo bóng đá hom nay ngay từ đầu. Lần thứ hai qua, kèo bóng đá hom nay sẽ thấy sự thay đổi được cam kết trước đó là một phần của quan điểm ban đầu về cơ sở dữ liệu, do đó không có xung đột logic trong việc sử dụng phiên bản mới của hàng làm điểm bắt đầu cho bản cập nhật của kèo bóng đá hom nay mới.

Lưu ý rằng chỉ cập nhật các kèo bóng đá hom nay có thể cần phải được thử lại; Các kèo bóng đá hom nay chỉ đọc sẽ không bao giờ có xung đột tuần tự hóa.

Chế độ đọc lặp lại cung cấp một đảm bảo nghiêm ngặt mà mỗi kèo bóng đá hom nay thấy một cái nhìn hoàn toàn ổn định của cơ sở dữ liệu. Tuy nhiên, quan điểm này sẽ không nhất thiết luôn luôn phù hợp với một số lần thực hiện nối tiếp (một lần) các kèo bóng đá hom nay đồng thời cùng cấp.khôngXem một trong các bản ghi chi tiết là một phần logic của lô vì nó đọc bản sửa đổi trước đó của bản ghi điều khiển. Nỗ lực thực thi các quy tắc kinh doanh bằng các kèo bóng đá hom nay đang chạy ở cấp độ cô lập này không có khả năng hoạt động chính xác mà không sử dụng cẩn thận các khóa rõ ràng để chặn các kèo bóng đá hom nay xung đột.

Mức cách cô kèo bóng đá hom nay lặp lại được triển khai bằng cách sử dụng một kỹ thuật được biết đến trong tài liệu cơ sở dữ liệu học thuật và trong một số sản phẩm cơ sở dữ liệu khác làBắn hiệu cô kèo bóng đá hom nay. Sự khác biệt về hành vi và hiệu suất có thể được quan sát khi so sánh với kèo bóng đá hom nay hệ thống sử dụng kỹ thuật khóa truyền thống làm giảm sự đồng thời.[Berenson95].

Lưu ý

trướcPostgreSQLPhiên bản 9.1, một yêu cầu về mức cách ly kèo bóng đá hom nay có thể nối tiếp được cung cấp chính xác cùng một hành vi được mô tả ở đây. Để giữ lại hành vi có thể nối tiếp di sản, nên đọc lặp lại bây giờ nên được yêu cầu.

13.2.3. Cấp độ cô kèo bóng đá hom nay có thể nối tiếp

TheserializableMức cách ly cung cấp sự cô lập kèo bóng đá hom nay nghiêm ngặt nhất. Cấp độ này mô phỏng việc thực hiện kèo bóng đá hom nay nối tiếp cho tất cả các kèo bóng đá hom nay đã cam kết;Sự bất thường của tuần tự hóasẽ kích hoạt AThất bại tuần tự hóa.

làm ví dụ, hãy xem xét một bảngMyTab, ban đầu chứa:

Lớp | giá trị

Giả sử kèo bóng đá hom nay có thể nối tiếp A Tính toán:

Chọn tổng (giá trị) từ mytab trong đó lớp = 1;

và sau đó chèn kết quả (30) làGiá trịTrong một hàng mới vớiclass = 2. Đồng thời, kèo bóng đá hom nay có thể nối tiếp B Tính toán:

Chọn tổng (giá trị) từ mytab trong đó lớp = 2;

và thu được kết quả 300, nó chèn vào một hàng mới vớiclass = 1. Sau đó, cả hai kèo bóng đá hom nay cố gắng cam kết.

Lỗi: Không thể tuần tự hóa quyền truy cập do các phụ thuộc đọc/ghi giữa các kèo bóng đá hom nay

31325_31498

Khi dựa vào các kèo bóng đá hom nay có thể nối tiếp để ngăn chặn sự bất thường, điều quan trọng là bất kỳ dữ liệu nào được đọc từ bảng người dùng vĩnh viễn không được coi là hợp lệ cho đến khi kèo bóng đá hom nay đọc nó đã cam kết thành công. Điều này đúng ngay cả đối với các kèo bóng đá hom nay chỉ đọc, ngoại trừ dữ liệu đó được đọc trong mộtcó thể hoãn lạikèo bóng đá hom nay chỉ đọc được biết là có hiệu lực ngay khi nó được đọc, bởi vì một kèo bóng đá hom nay đó chờ đợi cho đến khi nó có thể có được một ảnh chụp nhanh được đảm bảo không có vấn đề như vậy trước khi bắt đầu đọc bất kỳ dữ liệu nào. Trong tất cả các trường hợp khác, các ứng dụng không được phụ thuộc vào kết quả đọc trong một kèo bóng đá hom nay sau đó bị hủy bỏ;

Để đảm bảo khả năng nối tiếp thực sựPostgreSQLsử dụngKhóa vị ngữ, có nghĩa là nó giữ các khóa cho phép nó xác định khi nào một bản ghi sẽ có tác động đến kết quả đọc trước đó từ một kèo bóng đá hom nay đồng thời, nó đã chạy trước. TRONGPOSTGRESQLNhững khóa này không gây ra bất kỳ chặn nào và do đó không thểkhôngChơi bất kỳ phần nào trong việc gây bế tắc. Chúng được sử dụng để xác định và gắn cờ các phụ thuộc giữa các kèo bóng đá hom nay nối tiếp đồng thời mà trong một số kết hợp nhất định có thể dẫn đến các bất thường tuần tự hóa.Chọn để cập nhậthoặcChọn để chia sẻĐiều này không chỉ có thể chặn các kèo bóng đá hom nay khác mà còn gây ra truy cập đĩa.

Khóa vị ngữ trongPostgreSQL, giống như trong hầu hết các hệ thống cơ sở dữ liệu khác, dựa trên dữ liệu thực sự được truy cập bởi một kèo bóng đá hom nay. Chúng sẽ xuất hiện trongpg_locksChế độ xem hệ thống với AModecủaSireadlock. Các khóa cụ thể có được trong quá trình thực hiện truy vấn sẽ phụ thuộc vào kế hoạch được sử dụng bởi truy vấn và nhiều khóa hạt mịn hơn (ví dụ: khóa tuple) có thể được kết hợp thành ít khóa hạt hơn (ví dụ, khóa trang) trong quá trình kèo bóng đá hom nay để ngăn chặn sự cạn kiệt của bộ nhớ được sử dụng để theo dõi khóa.Chỉ đọckèo bóng đá hom nay có thể có thể phát hành khóa Siread của mình trước khi hoàn thành, nếu phát hiện rằng không có xung đột nào vẫn có thể xảy ra có thể dẫn đến sự bất thường của tuần tự hóa. Trong thực tế,Chỉ đọckèo bóng đá hom nay thường có thể thiết lập thực tế đó khi khởi động và tránh thực hiện bất kỳ khóa dự đoán nào. Nếu bạn yêu cầu rõ ràngserializable chỉ đọc bảo trìkèo bóng đá hom nay, nó sẽ chặn cho đến khi nó có thể thiết lập thực tế này. (Đây làchỉTrường hợp khối kèo bóng đá hom nay có thể nối tiếp nhưng các kèo bóng đá hom nay đọc lặp lại không.) Mặt khác, khóa Sriead thường cần được giữ quá trình kèo bóng đá hom nay trong quá khứ, cho đến khi chồng chéo đọc kèo bóng đá hom nay ghi hoàn tất.

Sử dụng nhất quán các kèo bóng đá hom nay có thể nối tiếp có thể đơn giản hóa sự phát triển. Đảm bảo rằng bất kỳ bộ kèo bóng đá hom nay hàng loạt có thể thực hiện đồng thời có thể thực hiện thành công sẽ có tác dụng tương tự như khi chúng được chạy tại một thời điểm có nghĩa là nếu bạn có thể chứng minh rằng một kèo bóng đá hom nay duy nhất, như đã viết, sẽ làm đúng khi tự mình thực hiện, bạn có thể tự tin rằng nó sẽ không thành công.Chọn để cập nhậthoặcChọn để chia sẻ, kèo bóng đá hom nay có thể nối tiếp là lựa chọn hiệu suất tốt nhất cho một số môi trường.

trong khiPostgreSQLMức cách ly kèo bóng đá hom nay có thể nối tiếp chỉ cho phép các kèo bóng đá hom nay đồng thời thực hiện nếu nó có thể chứng minh rằng có một thứ tự thực thi nối tiếp sẽ tạo ra hiệu ứng tương tự, nó không luôn luôn ngăn chặn các lỗi được nêu ra sẽ không xảy ra trong thực hiện nối tiếp thực sự. Cụ thể, có thể thấy các vi phạm ràng buộc độc đáo gây ra bởi xung đột với các kèo bóng đá hom nay có thể nối tiếp chồng chéo ngay cả sau khi kiểm tra rõ ràng rằng khóa không có trước khi cố gắng chèn nó.tất cảCác kèo bóng đá hom nay có thể nối tiếp chèn các khóa có khả năng mâu thuẫn kiểm tra rõ ràng xem chúng có thể làm như vậy trước không. Ví dụ: hãy tưởng tượng một ứng dụng yêu cầu người dùng cho một khóa mới và sau đó kiểm tra xem nó chưa tồn tại bằng cách cố gắng chọn nó trước hoặc tạo khóa mới bằng cách chọn khóa tối đa hiện có và thêm một khóa.

Để thực hiện tối ưu khi dựa vào các kèo bóng đá hom nay có thể nối tiếp để kiểm soát đồng thời, những vấn đề này sẽ được xem xét:

  • khai báo kèo bóng đá hom nay làChỉ đọckhi có thể.

  • Kiểm soát số lượng kết nối hoạt động, sử dụng nhóm kết nối nếu cần. Đây luôn là một sự xem xét hiệu suất quan trọng, nhưng nó có thể đặc biệt quan trọng trong một hệ thống bận rộn bằng cách sử dụng các kèo bóng đá hom nay có thể nối tiếp.

  • Đừng đặt nhiều hơn vào một kèo bóng đá hom nay duy nhất cần thiết cho mục đích toàn vẹn.

  • Không để lại kết nốinhàn rỗi trong kèo bóng đá hom naydài hơn mức cần thiết. Tham số cấu hìnhidle_in_transaction_session_timeoutcó thể được sử dụng để tự động ngắt kết nối kèo bóng đá hom nay phiên kéo dài.

  • Loại bỏ kèo bóng đá hom nay khóa rõ ràng,Chọn để cập nhậtChọn để chia sẻnơi không còn cần thiết do các biện pháp bảo vệ tự động được cung cấp bởi các kèo bóng đá hom nay có thể nối tiếp.

  • Khi hệ thống buộc phải kết hợp kèo bóng đá hom nay khóa dự đoán cấp độ nhiều trang thành một khóa định vị cấp quan hệ duy nhất vì bảng khóa dự đoán thiếu bộ nhớ, có thể xảy ra tốc độ thất bại tuần tự hóa. Bạn có thể tránh điều này bằng cách tăngMAX_PRED_LOCKS_PER_TRANSACTION, MAX_PRED_LOCKS_PER_RELATION, và/hoặcMAX_PRED_LOCKS_PER_PAGE.

  • Quét tuần tự sẽ luôn cần một khóa dự đoán cấp độ quan hệ. Điều này có thể dẫn đến tăng tỷ lệ thất bại tuần tự hóa.ngẫu nhiên_page_costvà/hoặc tăngcpu_tuple_cost. Hãy chắc chắn cân nhắc mọi sự sụt giảm trong các cuộc chạy lại kèo bóng đá hom nay và khởi động lại so với bất kỳ thay đổi tổng thể nào trong thời gian thực hiện truy vấn.

Mức cách cô kèo bóng đá hom nay có thể nối tiếp được thực hiện bằng cách sử dụng một kỹ thuật được biết đến trong tài liệu cơ sở dữ liệu học thuật là cách ly ảnh chụp nhanh có thể nối tiếp, xây dựng dựa trên sự cô kèo bóng đá hom nay bằng cách thêm kiểm tra cho các bất thường hóa tuần tự. Một số khác biệt về hành vi và hiệu suất có thể được quan sát khi so sánh với các hệ thống khác sử dụng kỹ thuật khóa truyền thống.[Ports12]Để biết thông tin chi tiết.