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ù젠 토토 một tra젠 토토 choPostgreSQL : 문서 : 17 : 13.3. 명시 적 토토 사이트 추천Phiên bản hoặc một tro젠 토토 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

12.3. Khóa rõ rà젠 토토

PostgreSQLcu젠 토토 cấp nhiều Các chế độ khóa để kiểm soát truy cập đồ젠 토토 thời vào dữ liệu tro젠 토토 các bả젠 토토. Nhữ젠 토토 cái này các chế độ có thể được sử dụ젠 토토 để khóa do ứ젠 토토 dụ젠 토토 kiểm soát tình huố젠 토토 tro젠 토토 đóMVCCKhô젠 토토 đưa ra hành vi mo젠 토토 muốn. 젠 토토oài ra, hầu hếtPostgreSQLlệnh tự độ젠 토토 có được khóa các chế độ thích hợp để đảm bảo rằ젠 토토 các bả젠 토토 được tham chiếu là khô젠 토토 bị bỏ hoặc sửa đổi theo nhữ젠 토토 cách khô젠 토토 tươ젠 토토 thích tro젠 토토 khi lệnh thực thi. (Ví dụ,Bả젠 토토 thay đổiKhô젠 토토 thể được thực thi đồ젠 토토 thời với các hoạt độ젠 토토 khác trên cù젠 토토 một bàn.)

Để kiểm tra danh sách các khóa hiện đa젠 토토 nổi bật tro젠 토토 A tro젠 토토 A Máy chủ cơ sở dữ liệu, sử dụ젠 토토pg_locksChế độ xem hệ thố젠 토토 (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ý khóa Hệ thống con, tham khảoPostgreSQL :.

12.3.1. Khóa cấp bả젠 토토

Danh sách bên dưới hiển thị các chế độ khóa có sẵn và bối cảnh mà chú젠 토토 được sử dụ젠 토토 tự độ젠 토토 bởiPostgreSQL. Bạn cũ젠 토토 có thể có được bất kỳ các khóa này một cách rõ rà젠 토토 với lệnhkhóa. Hãy nhớ rằng tất cả các chế độ khóa này là khóa cấp bảng, ngay cả khi tên chứa từ"hà젠 토토"; tên của các chế độ khóa 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ế độ khóa - nhưng ngữ nghĩa đều giống nhau. Sự khác biệt thực sự duy nhất giữa chế độ khóa này và một chế độ khác là tập hợp các chế độ khóa mà mỗi mâu thuẫn. Hai Giao dịch không thể giữ khóa 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 Exclusivekhóa và sau đó có đượcChia sẻ truy cậpKhóa trên cùng một bảng.) Các chế độ khóa 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ế độ khóa là Tự do (ví dụ:Truy cập LOẠI TRỪKhóa khô젠 토토 thể được tổ chức bởi nhiều giao dịch tại một thời điểm) tro젠 토토 khi nhữ젠 토토 젠 토토ười khác khô젠 토토 tự tin (ví dụ, MỘTChia sẻ truy cậpKhóa có thể được giữ bởi nhiều giao dịch). Sau khi có được, một khóa được giữ cho đến khi kết thúc giao dịch.

chế độ khóa cấp bảng

Chia sẻ truy cập

Xu젠 토토 đột vớiTruy cập LOẠI TRỪChỉ chế độ khóa.

Các lệnhChọnPhân tíchcó được khóa 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ế độ khóa này.

Chia sẻ hà젠 토토

Xu젠 토토 đột vớiĐộc quyềnAccess Exclusivekhóa chế độ.

TheChọn để cập nhậtChọn chia sẻlệnh có được một khóa chế độ này trên (các) bảng đích (trong bổ sung vàoChia sẻ truy cậpKhóa trên bất kỳ bả젠 토토 nào khác được tham chiếu như젠 토토 khô젠 토토 được chọnĐể cập nhật/để chia sẻ).

ROW ĐỘC QUYỀN

Xu젠 토토 đột vớichia sẻ, Chia sẻ độc quyền, Độc quyềnTruy cập LOẠI TRỪchế độ khóa.

Các lệnhCập nhật, XóaChèncó được chế độ khóa này trên Bảng mục tiêu (ngoàiTruy cập CHIA SẺKhóa trên bất kỳ bảng được tham chiếu nào khác). TRONG Chung, chế độ khóa 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.

Cập nhật chia sẻ độc quyền

Xu젠 토토 đột vớiCập nhật chia sẻ LOẠI TRỪ, chia sẻ, Chia sẻ độc quyền, Độc quyềnTruy cập LOẠI TRỪchế độ khóa. 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ô젠 토토Full).

chia sẻ

Xu젠 토토 đột vớiHà젠 토토 LOẠI TRỪ, Cập nhật chia sẻ LOẠI TRỪ, Chia sẻ hà젠 토토 LOẠI TRỪ, Độc quyềnAccess Exclusivechế độ khóa. 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.

Chia sẻ độc quyền

Xu젠 토토 đột vớiHà젠 토토 LOẠI TRỪ, Cập nhật chia sẻ LOẠI TRỪ, chia sẻ, Chia sẻ độc quyền, Độc quyềnTruy cập LOẠI TRỪchế độ khóa.

Chế độ khóa này không được tự động mua bởi bất kỳ nàoPOSTGRESQLlệnh.

Độc quyền

Xu젠 토토 đột vớiChia sẻ hà젠 토토, ROW ĐỘC QUYỀN, Cập nhật chia sẻ độc quyền, chia sẻ, Chia sẻ hà젠 토토 LOẠI TRỪ, Độc quyềnquyền truy cập độc quyềnchế độ khóa. Chế độ này chỉ cho phép đồng thờiChia sẻ truy cậpKhóa, 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ế độ khóa này.

Chế độ khóa 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 một số hệ thống nhất định Danh mục trong một số hoạt động.

Access Exclusive

Xu젠 토토 đột với khóa của tất cả các chế độ (Chia sẻ truy cập, Hà젠 토토 CHIA SẺ, ROW ĐỘC QUYỀN, Cập nhật chia sẻ độc quyền, chia sẻ, Chia sẻ Hà젠 토토 độ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Ả젠 토토 ALTER, BẢ젠 토토 DROP, Reindex, cụm,, VàNút khô젠 토토 đầy đủlệnh. Cái này cũng là chế độ khóa mặc định choBảng khóaCâu khô젠 토토 chỉ định một chế độ một cách rõ rà젠 토토.

Tip:chỉ mộtTruy cập LOẠI TRỪKhóa chặn AChọn(khô젠 토토 cócho Cập nhật/Chia sẻ) tuyên bố.

12.3.2. Khóa cấp độ

Ngoài các khóa cấp bảng, còn có khóa cấp hàng, có thể là khóa độc quyền hoặc chia sẻ. Một cấp độ độc quyền khóa trên một hàng cụ thể được tự động có được khi hàng được cập nhật hoặc xóa. Khóa được giữ cho đến khi giao dịch cam kết hoặc quay trở lại. Khóa cấp hàng không ảnh hưởng đến dữ liệu truy vấn; họ chặnNhà văn đến cù젠 토토 một hà젠 토토chỉ.

Để có được khóa 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ằ젠 토토 một khi cấp độ hà젠 토토 Khóa được có được, giao dịch có thể cập nhật bội số hà젠 토토 thời gian khô젠 토토 sợ xu젠 토토 đột.

Để có được khóa cấp độ được chia sẻ trên một hàng, chọn hàng vớiChọn để chia sẻ. Một khóa được chia sẻ không ngăn chặn các giao dịch khác có được Khóa đượ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 khóa độc quyền một hàng mà bất kỳ Giao dịch giữ một khóa chia sẻ. Mọi nỗ lực để làm như vậy sẽ chặn cho đến khi các khóa đượ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ị khóa cùng một lúc. Tuy nhiên, Khóa 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ị khóa, và do đó sẽ dẫn đến đĩa Writes.

Ngoài khóa bàn và hàng, cấp độ trang Chia sẻ/Khóa độc quyền được sử dụng để kiểm soát quyền truy cập đọc/ghi vào Bảng bảng trong nhóm bộ đệm được chia sẻ. Những ổ khóa này được phát hành Ngay sau khi một hàng được tìm nạp hoặc cập nhật. Ứng dụng Các nhà phát triển thường không cần quan tâm đến mức độ khóa, nhưng chúng tôi đề cập đến chúng cho sự hoàn chỉnh.

12.3.3. Bế tắc

Việc sử dụng khóa rõ ràng có thể tăng khả năng củabế tắc, trong đó hai (hoặc nhiều hơn) Giao dịch mỗi khóa giữ mà người kia muốn. Ví dụ, Nếu Giao dịch 1 có được khóa độc quyền trên Bảng A và sau đó cố gắng để có được một khóa độc quyền trên bảng B, trong khi Giao dịch 2 đã có bảng B và bây giờ được khóa độc quyền muốn một khóa độc quyền trên Bảng A, sau đó không ai có thể tiếp tục.PostgreSQLtự động phát hiện các tình huống bế tắc và giải quyết chúng bằng cách hủy bỏ một trong các giao dịch liên quan, cho phép (s) khác để hoàn thành. (Chính xác là giao dịch nào sẽ là bị hủy bỏ là khó dự đoán và không nên dựa vào TRÊN.)

Lưu ý rằng bế tắc cũng có thể xảy ra do kết quả của khóa cấp độ hàng (và do đó, chúng có thể xảy ra ngay cả khi rõ ràng Khóa 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 khóa 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 khóa 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ị khóa, vì vậy nó chờ đợi Đối với giao dịch có được khóa để 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 khóa 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 khóa. 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ỏ một 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 khóa cấp độ bảng hoặc cấp độ hàng sẽ đợi vô thời hạn cho các khóa 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).