Postgresql 8.1.23 Tài liệu | ||||
---|---|---|---|---|
Prev | Backward nhanh | Chương 12. Điều khiển đồng thời | Chuyển tiếp nhanh | Tiếp theo |
PostgreSQLcung cấp nhiều Các chế độ kèo bóng đá pháp để kiểm soát truy cập đồng thời vào dữ liệu trong các bảng. Những cái này các chế độ có thể được sử dụng để kèo bóng đá pháp do ứng dụng kiểm soát tình huống trong đóMVCCKhông đưa ra hành vi mong muốn. Ngoài ra, hầu hếtPostgreSQLlệnh tự động có được kèo bóng đá pháp các chế độ thích hợp để đảm bảo rằng các bảng được tham chiếu là không bị bỏ hoặc sửa đổi theo những cách không tương thích trong khi lệnh thực thi. (Ví dụ,Bảng thay đổiKhông thể được thực thi đồng thời với các hoạt động khác trên cùng kèo bóng đá pháp bàn.)
Để kiểm tra danh sách các kèo bóng đá pháp hiện đang nổi bật trong A trong A Máy chủ cơ sở dữ liệu, sử dụngpg_locksChế độ xem hệ thống (Phần 42.37). Vì Thêm thông tin về giám sát trạng thái của Trình quản lý kèo bóng đá pháp Hệ thống con, tham khảoChương 24.
Danh sách bên dưới hiển thị các chế độ kèo bóng đá pháp có sẵn và bối cảnh mà chúng được sử dụng tự động bởiPostgreSQL. Bạn cũng có thể có được bất kỳ các kèo bóng đá pháp này một cách rõ ràng với lệnhkèo bóng đá pháp. Hãy nhớ rằng tất cả các chế độ kèo bóng đá pháp này là kèo bóng đá pháp cấp bảng, ngay cả khi tên chứa từ"hàng"; tên của các chế độ kèo bóng đá pháp là lịch sử. Ở một mức độ nào đó, các tên phản ánh điển hình Việc sử dụng từng chế độ kèo bóng đá pháp - nhưng ngữ nghĩa đều giống nhau. Sự khác biệt thực sự duy nhất giữa chế độ kèo bóng đá pháp này và một chế độ khác là tập hợp các chế độ kèo bóng đá pháp mà mỗi mâu thuẫn. Hai Giao dịch không thể giữ kèo bóng đá pháp các chế độ xung đột trên cùng một bảng cùng một lúc. (Tuy nhiên, một giao dịch không bao giờ xung đột với chính nó. Ví dụ: nó có thể có đượcAccess Exclusivekèo bóng đá pháp và sau đó có đượcChia sẻ truy cậpkèo bóng đá pháp trên cùng một bảng.) Các chế độ kèo bóng đá pháp không xung đột có thể được tổ chức đồng thời bởi nhiều giao dịch. Đặc biệt chú ý rằng một số chế độ kèo bóng đá pháp là Tự do (ví dụ:Truy cập LOẠI TRỪkèo bóng đá pháp không thể được tổ chức bởi nhiều giao dịch tại một thời điểm) trong khi những người khác không tự tin (ví dụ, MỘTChia sẻ truy cậpkèo bóng đá pháp có thể được giữ bởi nhiều giao dịch). Sau khi có được, một kèo bóng đá pháp được giữ cho đến khi kết thúc giao dịch.
chế độ kèo bóng đá pháp cấp bảng
Xung đột vớiTruy cập LOẠI TRỪChỉ chế độ kèo bóng đá pháp.
Các lệnhChọnvàPhân tíchcó được kèo bóng đá pháp này Chế độ trên các bảng được tham chiếu. Nói chung, bất kỳ truy vấn nào chỉ đọc một bảng và không sửa đổi nó sẽ có được Chế độ kèo bóng đá pháp này.
Xung đột vớiĐộc quyềnvàAccess Exclusivekèo bóng đá pháp chế độ.
TheChọn để cập nhậtvàChọn chia sẻ14056_14155Chia sẻ truy cậpkèo bóng đá pháp trên bất kỳ bảng nào khác được tham chiếu nhưng không được chọnĐể cập nhật/để chia sẻ).
Xung đột vớichia sẻ, Chia sẻ độc quyền, Độc quyềnvàTruy cập LOẠI TRỪchế độ kèo bóng đá pháp.
Các lệnhCập nhật, XóavàChèncó được chế độ kèo bóng đá pháp này trên Bảng mục tiêu (ngoàiTruy cập CHIA SẺkèo bóng đá pháp trên bất kỳ bảng được tham chiếu nào khác). TRONG Chung, chế độ kèo bóng đá pháp này sẽ được nhận bởi bất kỳ lệnh nào điều chỉnh dữ liệu trong bảng.
Xung đột vớiCập nhật chia sẻ LOẠI TRỪ, chia sẻ, Chia sẻ độc quyền, Độc quyềnvàTruy cập LOẠI TRỪchế độ kèo bóng đá pháp. Chế độ này bảo vệ một bảng chống lại sự thay đổi lược đồ đồng thời vàVACUUMchạy.
Được mua bởiVacuum(khôngFull).
Xung đột vớiHàng LOẠI TRỪ, Cập nhật chia sẻ LOẠI TRỪ, Chia sẻ hàng LOẠI TRỪ, Độc quyền16009_16027Access Exclusivechế độ kèo bóng đá pháp. Chế độ này bảo vệ bảng chống lại dữ liệu đồng thời thay đổi.
Được mua bởiTạo chỉ mục.
Xung đột vớiHàng LOẠI TRỪ, Cập nhật chia sẻ LOẠI TRỪ, chia sẻ, Chia sẻ độc quyền, Độc quyềnvàTruy cập LOẠI TRỪchế độ kèo bóng đá pháp.
Chế độ kèo bóng đá pháp này không được tự động mua bởi bất kỳ nàoPOSTGRESQLlệnh.
Xung đột vớiChia sẻ hàng, ROW ĐỘC QUYỀN, Cập nhật chia sẻ độc quyền, chia sẻ, Chia sẻ hàng LOẠI TRỪ, Độc quyềnvàquyền truy cập độc quyềnchế độ kèo bóng đá pháp. Chế độ này chỉ cho phép đồng thờiChia sẻ truy cậpkèo bóng đá pháp, tức là chỉ đọc từ Bảng có thể tiến hành song song với một giao dịch giữ chế độ kèo bóng đá pháp này.
Chế độ kèo bóng đá pháp này không tự động có được trên người dùng bảng bởi bất kỳPostgreSQLlệnh. Tuy nhiên nó được mua trên kèo bóng đá pháp số hệ thống nhất định Danh mục trong kèo bóng đá pháp số hoạt động.
Xung đột với kèo bóng đá pháp của tất cả các chế độ (Chia sẻ truy cập, Hàng CHIA SẺ, ROW ĐỘC QUYỀN, Cập nhật chia sẻ độc quyền, chia sẻ, Chia sẻ Hàng độc quyền, Độc quyền,, VàAccess Exclusive). Chế độ này đảm bảo rằng chủ sở hữu là giao dịch duy nhất truy cập bảng theo bất kỳ cách nào.
Được mua bởiBẢNG ALTER, BẢNG DROP, Reindex, cụm,, VàNút không đầy đủlệnh. Cái này cũng là chế độ kèo bóng đá pháp mặc định choBảng kèo bóng đá phápCâu không chỉ định một chế độ một cách rõ kèo bóng đá pháp.
Tip:chỉ kèo bóng đá phápTruy cập LOẠI TRỪkèo bóng đá pháp chặn AChọn(không cócho Cập nhật/Chia sẻ) tuyên bố.
19254_19603Nhà văn đến cùng kèo bóng đá pháp hàngchỉ.
Để có được kèo bóng đá pháp cấp độ hàng độc quyền trên một hàng mà không có thực sự sửa đổi hàng, chọn hàng vớiChọn để cập nhật. Lưu ý rằng một khi cấp độ hàng kèo bóng đá pháp được có được, giao dịch có thể cập nhật bội số hàng thời gian không sợ xung đột.
Để có được kèo bóng đá pháp cấp độ được chia sẻ trên một hàng, chọn hàng vớiChọn để chia sẻ. Một kèo bóng đá pháp được chia sẻ không ngăn chặn các giao dịch khác có được kèo bóng đá pháp được chia sẻ. Tuy nhiên, không có giao dịch nào được phép cập nhật, xóa hoặc kèo bóng đá pháp độc quyền một hàng mà bất kỳ Giao dịch giữ một kèo bóng đá pháp chia sẻ. Mọi nỗ lực để làm như vậy sẽ chặn cho đến khi các kèo bóng đá pháp được chia sẻ đã được phát hành.
PostgreSQLKhông nhớ bất kỳ thông tin nào về các hàng đã sửa đổi trong bộ nhớ, vì vậy nó không có giới hạn số lượng hàng bị kèo bóng đá pháp cùng một lúc. Tuy nhiên, kèo bóng đá pháp một hàng có thể gây ra một đĩa ghi; Vì vậy, ví dụ,Chọn để cập nhậtSẽ sửa đổi đã chọn hàng để đánh dấu chúng bị kèo bóng đá pháp, và do đó sẽ dẫn đến đĩa Writes.
20824_21181
21371_21436bế tắc21468_21824PostgreSQL21865_22125
Lưu ý rằng bế tắc cũng có thể xảy ra do kết quả của kèo bóng đá pháp cấp độ hàng (và do đó, chúng có thể xảy ra ngay cả khi rõ ràng kèo bóng đá pháp không được sử dụng). Xem xét trường hợp có hai Giao dịch đồng thời sửa đổi một bảng. Đầu tiên Thực thi giao dịch:
Cập nhật tài khoản đặt số dư = cân bằng + 100.00 trong đó acctnum = 11111;
Điều này có được kèo bóng đá pháp cấp hàng trên hàng với quy định Số tài khoản. Sau đó, giao dịch thứ hai thực thi:
Cập nhật tài khoản đặt số dư = cân bằng + 100.00 trong đó acctnum = 22222; Cập nhật tài khoản đặt số dư = số dư - 100.00 trong đó acctnum = 11111;
Đầu tiênCập nhậtTuyên bố Có được thành công kèo bóng đá pháp cấp độ hàng trên hàng được chỉ định, vì vậy Nó thành công trong việc cập nhật hàng đó. Tuy nhiên, thứ haiCập nhậtTuyên bố thấy rằng hàng nó đang cố gắng cập nhật đã bị kèo bóng đá pháp, vì vậy nó chờ đợi Đối với giao dịch có được kèo bóng đá pháp để hoàn thành. Giao dịch hai hiện đang chờ giao dịch một để hoàn thành Trước khi nó tiếp tục thực hiện. Bây giờ, giao dịch một thực thi:
Cập nhật tài khoản đặt số dư = cân bằng - 100.00 trong đó acctnum = 22222;
Giao dịch Một lần cố gắng có được kèo bóng đá pháp cấp hàng trên Hàng được chỉ định, nhưng nó không thể: Giao dịch hai đã được tổ chức Thật là một kèo bóng đá pháp. Vì vậy, nó chờ giao dịch hai để hoàn thành. Như vậy, Giao dịch một bị chặn trên giao dịch hai và giao dịch Hai bị chặn trên giao dịch một: Điều kiện bế tắc.PostgreSQLsẽ phát hiện điều này tình huống và hủy bỏ kèo bóng đá pháp trong các giao dịch.
23886_24502
Miễn là không phát hiện tình huống bế tắc, một giao dịch Tìm kiếm kèo bóng đá pháp cấp độ bảng hoặc cấp độ hàng sẽ đợi vô thời hạn cho các kèo bóng đá pháp mâu thuẫn sẽ được phát hành. Điều này có nghĩa là Đó là một ý tưởng tồi cho các ứng dụng để các giao dịch mở cho Thời gian dài (ví dụ: trong khi chờ đợi đầu vào của người dùng).