Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
5359_547012 / 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

13.3. kèo bóng đá hom nay rõ ràng

PostgreSQLCung cấp các chế độ kèo bóng đá hom nay khác nhau để kiểm soát truy cập đồng thời vào dữ liệu trong các bảng. Các chế độ này có thể được sử dụng để kèo bóng đá hom nay do ứng dụng kiểm soát trong các tình huống trong đóMVCCKhông đưa ra hành vi mong muốn. Ngoài ra, hầu hếtPostgreSQLCác lệnh tự động có được các kèo bóng đá hom nay của các chế độ thích hợp để đảm bảo rằng các bảng được tham chiếu không bị hủy 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ụ,cắt ngắnKhông thể được thực hiện đồng thời với các hoạt động khác trên cùng một bảng, do đó nó có đượcAccess Exclusivekèo bóng đá hom nay trên bảng để thực thi điều đó.)

Để kiểm tra danh sách các kèo bóng đá hom nay hiện đang nổi bật trong máy chủ cơ sở dữ liệu, hãy sử dụngpg_locksChế độ xem hệ thống. Để biết thêm thông tin về việc giám sát trạng thái của hệ thống con Trình quản lý kèo bóng đá hom nay, hãy tham khảoChương 28.

13.3.1. kèo bóng đá hom nay cấp bảng

Danh sách bên dưới hiển thị các chế độ kèo bóng đá hom nay có sẵn và các 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ỳ kèo bóng đá hom nay nào trong số này một cách rõ ràng với lệnhkèo bóng đá hom nay12802_12902hàngHồi; Tên của các chế độ kèo bóng đá hom nay là lịch sử. Ở một mức độ nào đó, các tên phản ánh việc sử dụng điển hình của mỗi chế độ kèo bóng đá hom nay - nhưng ngữ nghĩa đều giống nhau. Sự khác biệt thực sự duy nhất giữa một chế độ kèo bóng đá hom nay và một chế độ khác là tập hợp các chế độ kèo bóng đá hom nay mà mỗi xung đột (xemBảng 13.213369_13549Access Exclusivekèo bóng đá hom nay và sau đó có đượcChia sẻ truy cậpkèo bóng đá hom nay trên cùng một bảng.) Các chế độ kèo bóng đá hom nay không xung đột có thể được tổ chức đồng thời bởi nhiều giao dịch. Thông báo cụ thể rằng một số chế độ kèo bóng đá hom nay đang tự kết hợp (ví dụ:quyền truy cập độc quyềnkèo bóng đá hom nay không thể được giữ bởi nhiều giao dịch cùng một lúc) trong khi những người khác không tự doChia sẻ truy cậpkèo bóng đá hom nay có thể được tổ chức bởi nhiều giao dịch).

chế độ kèo bóng đá hom nay cấp bảng

Chia sẻ truy cập(AccessSharelock)

Xung đột vớiAccess ExclusiveChỉ chế độ kèo bóng đá hom nay.

TheChọnLệnh có được kèo bóng đá hom nay chế độ này trên các bảng được tham chiếu. Nói chung, bất kỳ truy vấn nào chỉđọcMột bảng và không sửa đổi nó sẽ có được chế độ kèo bóng đá hom nay này.

Chia sẻ hàng(Rowsharelock)

Xung đột vớiĐộc quyềnAccess Exclusivechế độ kèo bóng đá hom nay.

The15043_15051Lệnh có được kèo bóng đá hom nay chế độ này trên tất cả các bảng mà một trong nhữngđể cập nhật, Không có cập nhật kèo bóng đá hom nay, 15236_15247hoặcđể chia sẻ chínhTùy chọn được chỉ định (ngoàiChia sẻ truy cậpkèo bóng đá hom nay trên bất kỳ bảng nào khác được tham chiếu mà không có bất kỳ rõ ràngcho ...Tùy chọn kèo bóng đá hom nay).

ROW ĐỘC QUYỀN(RowExclusiveLock)

Xung đột vớichia sẻ, Chia sẻ độc quyền, Độc quyềnAccess Exclusivechế độ kèo bóng đá hom nay.

Các lệnhCập nhật, Xóa, ChènHợp nhấtLấy chế độ kèo bóng đá hom nay này trên bảng đích (ngoàiChia sẻ truy cậpkèo bóng đá hom nay trên bất kỳ bảng được tham chiếu nào khác). Nói chung, chế độ kèo bóng đá hom nay này sẽ được mua lại bởi bất kỳ lệnh nàosửa đổi dữ liệutrong bảng.

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

Xung đột vớiCập nhật chia sẻ độc quyền, chia sẻ, Chia sẻ độc quyền, Độc quyền16723_16731Access Exclusivechế độ kèo bóng đá hom nay. Chế độ này bảo vệ bảng chống lại các thay đổi lược đồ đồng thời vàVACUUMChạy.

Được mua bởiVACUUM(khôngFull),Phân tích, Tạo chỉ mục đồng thời, Tạo số liệu thống kê, Nhận xét về, Reindex đồng thờivà nhất địnhkèo bóng đátỷ lệ kèo bóngBiến thể (để biết chi tiết đầy đủ, hãy xem tài liệu của các lệnh này).

chia sẻ(Sharelock)

Xung đột vớiROW ĐỘC QUYỀN, Cập nhật chia sẻ độc quyền, Chia sẻ độc quyền, Độc quyềnQuyền truy cập độc quyềnchế độ kèo bóng đá hom nay. Chế độ này bảo vệ bảng chống lại các thay đổi dữ liệu đồng thời.

Được mua bởiTạo chỉ mục(khôngđồng thời).

Chia sẻ độc quyền(SharerowExclusiveLock)

Xung đột vớiROW ĐỘC QUYỀN, Cập nhật chia sẻ độc quyền, chia sẻ, Chia sẻ độc quyền, Độc quyềnAccess Exclusivechế độ kèo bóng đá hom nay. Chế độ này bảo vệ bảng chống lại các thay đổi dữ liệu đồng thời và tự độc quyền để chỉ có một phiên có thể giữ nó tại một thời điểm.

Được mua bởiTạo Triggervà một số hình thức củatỷ lệ kèo bóng.

Độc quyền(ExclusiveLock)

Xung đột vớiChia sẻ hàng, Độc quyền, Cập nhật chia sẻ độc quyền, chia sẻ, Chia sẻ độc quyền, Độc quyền19454_19472chế độ kèo bóng đá hom nay. Chế độ này chỉ cho phép đồng thờiChia sẻ truy cậpkèo bóng đá hom nay, tức là chỉ đọc từ bảng có thể tiến hành song song với giao dịch giữ chế độ kèo bóng đá hom nay này.

Được mua bởiLàm mới chế độ xem vật chất đồng thời.

Access Exclusive(AccessExclusiveLock)

Xung đột với kèo bóng đá hom nay của tất cả các chế độ (Chia sẻ truy cập, Chia sẻ hàng, ROW ĐỘC QUYỀN, Cập nhật chia sẻ độc quyền, chia sẻ, Chia sẻ độc quyền, Độc quyềnquyền truy cập độc quyền). 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 DROP, cắt ngắn, Reindex, cụm, Nút không đầy đủLàm mới chế độ xem vật chất(khôngđồng thời) Các lệnh. Nhiều hình thức củaChỉ số thay đổiBảng thay đổicũng có được kèo bóng đá hom nay ở cấp độ này. Đây cũng là chế độ kèo bóng đá hom nay mặc định choBảng kèo bóng đá hom nay21003_21055

tip

chỉ mộtAccess Exclusivekèo bóng đá hom nay chặn AChọn(khôngđể cập nhật/chia sẻ) câu lệnh.

Sau khi có được, kèo bóng đá hom nay thường được giữ cho đến khi kết thúc giao dịch. Nhưng nếu kèo bóng đá hom nay được thu được sau khi thiết lập điểm lưu, kèo bóng đá hom nay sẽ được phát hành ngay lập tức nếu điểm lưu được cuộn trở lại. Điều này phù hợp với nguyên tắc21616_21626Hủy tất cả các hiệu ứng của các lệnh kể từ điểm lưu. Tương tự giữ cho các kèo bóng đá hom nay có được trong mộtPL/PGSQLKhối ngoại lệ: Lỗi thoát khỏi khối phát hành kèo bóng đá hom nay có được trong đó.

Bảng 13.2. Các chế độ kèo bóng đá hom nay mâu thuẫn

Chế độ kèo bóng đá hom nay được yêu cầu Chế độ kèo bóng đá hom nay hiện có
Chia sẻ truy cập Chia sẻ hàng hàng excl. Cập nhật chia sẻ excl. chia sẻ Chia sẻ hàng excl. excl. Access Excl.
Chia sẻ truy cập x
Chia sẻ hàng x x
hàng excl. x x x x
Cập nhật chia sẻ excl. x x x x x
chia sẻ x x x x X
Chia sẻ hàng excl. x x x x x x
excl. x x x x x x x
Access Excl. x x x x x x x x

13.3.2. kèo bóng đá hom nay cấp độ

Ngoài các kèo bóng đá hom nay cấp bảng, còn có các kèo bóng đá hom nay cấp hàng, được liệt kê như dưới đây với các bối cảnh mà chúng được sử dụng tự động bởiPostgreSQL. Nhìn thấyBảng 13.3Đối với một bảng hoàn chỉnh các xung đột kèo bóng đá hom nay cấp độ hàng. Lưu ý rằng một giao dịch có thể giữ các kèo bóng đá hom nay mâu thuẫn trên cùng một hàng, ngay cả trong các phép trừ khác nhau; Nhưng ngoài ra, hai giao dịch không bao giờ có thể giữ các kèo bóng đá hom nay mâu thuẫn trên cùng một hàng. kèo bóng đá hom nay cấp hàng không ảnh hưởng đến truy vấn dữ liệu; họ chỉ chặnnhà văn và tủ kèo bóng đá hom nayđến cùng một hàng. kèo bóng đá hom nay cấp độ hàng được phát hành ở cuối giao dịch hoặc trong quá trình rollback savePoint, giống như kèo bóng đá hom nay cấp bảng.

chế độ kèo bóng đá hom nay cấp hàng

để cập nhật

để cập nhậtgây ra các hàng được truy xuất bởiChọnCâu lệnh sẽ bị kèo bóng đá hom nay như thể để cập nhật. Điều này ngăn họ bị kèo bóng đá hom nay, sửa đổi hoặc bị xóa bởi các giao dịch khác cho đến khi giao dịch hiện tại kết thúc. Nghĩa là, các giao dịch khác cố gắngCập nhật, Xóa, Chọn để cập nhật, Chọn không cập nhật kèo bóng đá hom nay, Chọn chia sẻhoặcChọn chia sẻ kèo bóng đá hom nayTrong số các hàng này sẽ bị chặn cho đến khi giao dịch hiện tại kết thúc; Ngược lại,Chọn để cập nhậtSẽ chờ một giao dịch đồng thời đã chạy bất kỳ lệnh nào trong cùng một hàng, và sau đó sẽ kèo bóng đá hom nay và trả lại hàng cập nhật (hoặc không có hàng, nếu hàng bị xóa). Trong aĐọc lặp lạihoặcserializableGiao dịch, tuy nhiên, một lỗi sẽ được ném nếu một hàng bị kèo bóng đá hom nay đã thay đổi kể từ khi giao dịch bắt đầu. Để thảo luận thêm, xemPhần 13.4.

Theđể cập nhậtChế độ kèo bóng đá hom nay cũng được mua bởi bất kỳXóatrên một hàng, và cả bởi mộtCập nhậtĐiều chỉnh các giá trị của các cột nhất định. Hiện tại, tập hợp các cột được xem xét choCập nhậtTrường hợp là những trường hợp có chỉ số duy nhất trên chúng có thể được sử dụng trong kèo bóng đá hom nay nước ngoài (vì vậy các chỉ mục một phần và chỉ mục biểu thức không được xem xét), nhưng điều này có thể thay đổi trong tương lai.

Không có cập nhật kèo bóng đá hom nay

Hành xử tương tự nhưđể cập nhật, ngoại trừ kèo bóng đá hom nay thu được yếu hơn: kèo bóng đá hom nay này sẽ không chặnChọn để chia sẻ kèo bóng đá hom nay30046_30146Cập nhậtmà không có đượcđể cập nhậtkèo bóng đá hom nay.

để chia sẻ

Hành xử tương tự nhưKhông có cập nhật kèo bóng đá hom nay, ngoại trừ việc nó có được kèo bóng đá hom nay được chia sẻ thay vì kèo bóng đá hom nay độc quyền trên mỗi hàng được truy xuất. Một kèo bóng đá hom nay được chia sẻ chặn các giao dịch khác thực hiệnCập nhật, Xóa, Chọn để cập nhậthoặcChọn không cập nhật kèo bóng đá hom nayTrên các hàng này, nhưng nó không ngăn chúng thực hiệnChọn để chia sẻhoặcChọn để chia sẻ kèo bóng đá hom nay.

để chia sẻ chính

Hành xử tương tự nhưđể chia sẻ, ngoại trừ kèo bóng đá hom nay yếu hơn:Chọn để cập nhậtbị chặn, nhưng khôngChọn không cập nhật kèo bóng đá hom nay. kèo bóng đá hom nay được chia sẻ kèo bóng đá hom nay chặn các giao dịch khác thực hiệnXóahoặc bất kỳCập nhậtĐiều đó thay đổi các giá trị kèo bóng đá hom nay, nhưng không phải khácCập nhật, Và nó cũng không ngăn đượcChọn không cập nhật kèo bóng đá hom nay, 31596_31614hoặcChọn chia sẻ kèo bóng đá hom nay.

PostgreSQLKhông nhớ bất kỳ thông tin nào về các hàng được sửa đổi trong bộ nhớ, do đó không có giới hạn về số lượng hàng bị kèo bóng đá hom nay cùng một lúc. Tuy nhiên, kèo bóng đá hom nay một hàng có thể gây ra một đĩa ghi, ví dụ:Chọn để cập nhật31995_32076

Bảng 13.3. kèo bóng đá hom nay cấp độ mâu thuẫn

Chế độ kèo bóng đá hom nay được yêu cầu Chế độ kèo bóng đá hom nay hiện tại
để chia sẻ chính để chia sẻ Không có cập nhật kèo bóng đá hom nay để cập nhật
để chia sẻ chính x
để chia sẻ x x
Không có cập nhật kèo bóng đá hom nay x x x
để cập nhật x x x x

13.3.3. kèo bóng đá hom nay cấp trang

Ngoài kèo bóng đá hom nay bảng và hàng, chia sẻ cấp độ trang/kèo bóng đá hom nay độc quyền được sử dụng để kiểm soát quyền truy cập đọc/ghi vào các trang bảng trong nhóm bộ đệm được chia sẻ. Các kèo bóng đá hom nay 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. Các nhà phát triển ứng dụng thường không cần quan tâm đến kèo bóng đá hom nay cấp trang, nhưng chúng được đề cập ở đây để hoàn thiện.

13.3.4. Bế tắc

34811_34872bế tắc, trong đó hai (hoặc nhiều) giao dịch mỗi kèo bóng đá hom nay giữ mà cái kia muốn. Ví dụ: nếu Giao dịch 1 có được kèo bóng đá hom nay độc quyền trên Bảng A và sau đó cố gắng có được kèo bóng đá hom nay độc quyền trên Bảng B, trong khi Giao dịch 2 đã bị kèo bóng đá hom nay độc quyền B và bây giờ muốn kèo bóng đá hom nay độc quyền trên Bảng A, thì không ai có thể tiến hành.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 (các) (các) khác hoàn thành. (Chính xác là giao dịch nào sẽ bị hủy bỏ rất khó dự đoán và không nên dựa vào.)

Lưu ý rằng bế tắc cũng có thể xảy ra do kết quả của kèo bóng đá hom nay cấp hàng (và do đó, chúng có thể xảy ra ngay cả khi kèo bóng đá hom nay rõ ràng không được sử dụng). Xem xét trường hợp trong đó hai giao dịch đồng thời sửa đổi một bảng. Giao dịch đầu tiên thực hiện:

Cập nhật tài khoản đặt số dư = số dư + 100.00 trong đó acctnum = 11111;

Điều này có được kèo bóng đá hom nay cấp hàng trên hàng với số tài khoản được chỉ định. 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ậtCâu lệnh có được thành công kèo bóng đá hom nay cấp hàng trên hàng được chỉ định, do đó, 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 mà nó đang cố gắng cập nhật đã bị kèo bóng đá hom nay, vì vậy nó chờ giao dịch thu được kèo bóng đá hom nay 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 đá hom nay cấp hàng trên hàng được chỉ định, nhưng không thể: Giao dịch hai đã giữ kèo bóng đá hom nay như vậy. Vì vậy, nó chờ giao dịch hai để hoàn thành. Do đó, 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.POSTGRESQL37122_37186

37196_37780

Miễn là không phát hiện ra tình huống bế tắc nào, một giao dịch tìm kiếm kèo bóng đá hom nay cấp bảng hoặc cấp độ hàng sẽ đợi vô thời hạn để các kèo bóng đá hom nay mâu thuẫn đượ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 để giữ các giao dịch mở trong thời gian dài (ví dụ: trong khi chờ đợi đầu vào của người dùng).

13.3.5. kèo bóng đá hom nay tư vấn

POSTGRESQLcung cấp một phương tiện để tạo các kèo bóng đá hom nay có ý nghĩa được xác định ứng dụng. Chúng được gọi làkèo bóng đá hom nay tư vấn, vì hệ thống không thực thi việc sử dụng chúng - tùy thuộc vào ứng dụng để sử dụng chúng một cách chính xác. kèo bóng đá hom nay tư vấn có thể hữu ích cho các chiến lược kèo bóng đá hom nay phù hợp với mô hình MVCC. Ví dụ, việc sử dụng các kèo bóng đá hom nay tư vấn phổ biến là mô phỏng các chiến lược kèo bóng đá hom nay bi quan điển hình của cái gọi làTệp phẳngHệ thống quản lý dữ liệu. Mặc dù một lá cờ được lưu trữ trong bảng có thể được sử dụng cho cùng một mục đích, các kèo bóng đá hom nay tư vấn nhanh hơn, tránh phình ra và được máy chủ tự động dọn dẹp vào cuối phiên.

Có hai cách để có được kèo bóng đá hom nay tư vấn trongPostgreSQL: ở cấp độ phiên hoặc ở cấp độ giao dịch. Sau khi có được ở cấp độ phiên, kèo bóng đá hom nay tư vấn được giữ cho đến khi phát hành rõ ràng hoặc phiên kết thúc. Không giống như các yêu cầu kèo bóng đá hom nay tiêu chuẩn, các yêu cầu kèo bóng đá hom nay tư vấn cấp phiên không tôn trọng ngữ nghĩa giao dịch: kèo bóng đá hom nay có được trong một giao dịch sau đó sẽ được quay lại vẫn sẽ được giữ sau khi quay lại và tương tự như vậy, việc mở kèo bóng đá hom nay có hiệu lực ngay cả khi giao dịch gọi không thành công sau đó. Một kèo bóng đá hom nay có thể có được nhiều lần bằng quá trình sở hữu của nó; Đối với mỗi yêu cầu kèo bóng đá hom nay đã hoàn thành, phải có một yêu cầu mở kèo bóng đá hom nay tương ứng trước khi kèo bóng đá hom nay thực sự được phát hành. Mặt khác, các yêu cầu kèo bóng đá hom nay cấp giao dịch, hoạt động giống như các yêu cầu kèo bóng đá hom nay thông thường: Chúng được tự động phát hành vào cuối giao dịch và không có hoạt động mở kèo bóng đá hom nay rõ ràng. Hành vi này thường thuận tiện hơn so với hành vi cấp phiên để sử dụng ngắn hạn của kèo bóng đá hom nay tư vấn. Yêu cầu kèo bóng đá hom nay cấp độ phiên và cấp độ giao dịch cho cùng một định danh kèo bóng đá hom nay tư vấn sẽ chặn nhau theo cách dự kiến. Nếu một phiên đã giữ một kèo bóng đá hom nay tư vấn nhất định, các yêu cầu bổ sung của nó sẽ luôn thành công, ngay cả khi các phiên khác đang chờ kèo bóng đá hom nay; Tuyên bố này là đúng bất kể việc giữ kèo bóng đá hom nay hiện tại và yêu cầu mới ở cấp độ phiên hay cấp độ giao dịch.

Giống như tất cả các kèo bóng đá hom nay trongPostgreSQL, một danh sách đầy đủ các kèo bóng đá hom nay tư vấn hiện có thể được tổ chức bởi bất kỳ phiên nào có thể được tìm thấy trongpg_locksChế độ xem hệ thống.

Cả kèo bóng đá hom nay tư vấn và kèo bóng đá hom nay thông thường đều được lưu trữ trong nhóm bộ nhớ dùng chung có kích thước được xác định bởi các biến cấu hìnhMAX_LOCKS_PER_TRANSACTIONMax_Connections. Phải cẩn thận để không làm cạn kiệt bộ nhớ này hoặc máy chủ sẽ không thể cấp bất kỳ kèo bóng đá hom nay nào. Điều này áp đặt giới hạn trên đối với số lượng kèo bóng đá hom nay tư vấn có thể được cấp bởi máy chủ, thường là trong hàng chục đến hàng trăm ngàn người tùy thuộc vào cách cấu hình máy chủ.

Trong một số trường hợp nhất định sử dụng các phương thức kèo bóng đá hom nay tư vấn, đặc biệt là trong các truy vấn liên quan đến đặt hàng rõ ràng vàGiới hạnCác điều khoản, phải cẩn thận để kiểm soát các kèo bóng đá hom nay thu được do thứ tự được đánh giá các biểu thức SQL. Ví dụ:

chọn pg_advisory_lock (id) từ foo trong đó id = 12345; -- Được rồi
Chọn pg_advisory_lock (id) từ foo trong đó id 12345 giới hạn 100; -- sự nguy hiểm!
Chọn PG_Advisory_Lock (q.id) từ
.
  Chọn ID từ Foo WHERE ID 12345 Giới hạn 100
) Q; -- Được rồi

Trong các truy vấn trên, mẫu thứ hai là nguy hiểm vìgiới hạn42209_42529pg_locks.

Các chức năng được cung cấp để thao tác kèo bóng đá hom nay tư vấn được mô tả trongPhần 9.27.10.

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.