PostgreSQLCung cấp các chế độ kèo chấp bóng đá hôm 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 chấp bóng đá hôm 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 chấp bóng đá hôm 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ắn
Khô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, vì vậy nó có đượcAccess Exclusive
kèo chấp bóng đá hôm nay trên bảng để thực thi điều đó.)
Để kiểm tra danh sách các kèo chấp bóng đá hôm nay hiện đang nổi bật trong máy chủ cơ sở dữ liệu, hãy sử dụngpg_locks
Chế độ 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 chấp bóng đá hôm nay, hãy tham khảoChương 27.
Danh sách bên dưới hiển thị các chế độ kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay nào trong số này một cách rõ ràng với lệnhkèo chấp bóng đá hôm nay. Hãy nhớ rằng tất cả các chế độ kèo chấp bóng đá hôm nay này là kèo chấp bóng đá hôm nay cấp bảng, ngay cả khi tên chứa từ13046_13049hàngHồi; Tên của các chế độ kèo chấp bóng đá hôm 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 chấp bóng đá hôm 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 chấp bóng đá hôm nay và một chế độ khác là tập hợp các chế độ kèo chấp bóng đá hôm nay mà mỗi xung đột (xemBảng 13.2). Hai giao dịch không thể giữ các kèo chấp bóng đá hôm nay của các chế độ mâu thuẫn 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 Exclusive
kèo chấp bóng đá hôm nay và sau đó có đượcChia sẻ truy cập
kèo chấp bóng đá hôm nay trên cùng một bảng.) Các chế độ kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay đang tự kết hợp (ví dụ:Truy cập độc quyền
kèo chấp bóng đá hôm 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ập
kèo chấp bóng đá hôm nay có thể được tổ chức bởi nhiều giao dịch).
chế độ kèo chấp bóng đá hôm nay cấp bảng
Chia sẻ truy cập
(14440_14457
)Xung đột vớiAccess Exclusive
Chỉ chế độ kèo chấp bóng đá hôm nay.
14600_14606Chọn
Lệnh có được kèo chấp bóng đá hôm 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ỉđọcBảng và không sửa đổi nó sẽ có được chế độ kèo chấp bóng đá hôm nay này.
Chia sẻ hàng
(Rowsharelock
)Xung đột vớiĐộc quyền
vàAccess Exclusive
chế độ kèo chấp bóng đá hôm nay.
TheChọn
Lệnh có được kèo chấp bóng đá hôm nay chế độ này trên tất cả các bảng trên đó một trong nhữngđể cập nhật
, Không có cập nhật kèo chấp bóng đá hôm nay
, để chia sẻ
hoặcđể chia sẻ chính
Tùy chọn được chỉ định (ngoàiChia sẻ truy cập
kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay).
ROW ĐỘC QUYỀN
(RowExclusiveLock
)Xung đột vớichia sẻ
, Chia sẻ độc quyền
, Độc quyền
vàAccess Exclusive
chế độ kèo chấp bóng đá hôm nay.
Các lệnhCập nhật
, Xóa
, Chèn
vàHợp nhất
Lấy chế độ kèo chấp bóng đá hôm nay này trên bảng đích (ngoàiChia sẻ truy cập
kèo chấp bóng đá hôm nay trên bất kỳ bảng được tham chiếu nào khác). Nói chung, chế độ kèo chấp bóng đá hôm 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ền
(ShareUpDateExclusiveLock
)Xung đột vớiCập nhật chia sẻ độc quyền
, chia sẻ
, Chia sẻ độc quyền
, Độc quyền
vàAccess Exclusive
chế độ kèo chấp bóng đá hôm nay. Chế độ này bảo vệ bảng chống lại các thay đổi lược đồ đồng thời vàVACUUM
Chạy.
Được mua bởiNút hút
(không cóFull
),Phân tích
, tạo chỉ mục đồng thời
, Tạo thống kê
, Nhận xét về
, Reindex đồng thời
và nhất địnhINDEX ALTER
vàBẢNG ALTER
Biế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ền
vàAccess Exclusive
chế độ kèo chấp bóng đá hôm 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ền
vàAccess Exclusive
chế độ kèo chấp bóng đá hôm 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 Trigger
và một số hình thức củaBẢNG ALTER
.
Độ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ền
vàAccess Exclusive
chế độ kèo chấp bóng đá hôm nay. Chế độ này chỉ cho phép đồng thờiChia sẻ truy cập
19690_19798
Đượ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 chấp bóng đá hôm nay của tất cả các chế độ (Chia sẻ truy cập
, Chia sẻ hàng
, Độc quyền
, Cập nhật chia sẻ độc quyền
, chia sẻ
, Chia sẻ độc quyền
, Độc quyền
vàquyề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 đủ
và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 đổi
vàBảng thay đổi
cũng có được kèo chấp bóng đá hôm nay ở cấp độ này. Đây cũng là chế độ kèo chấp bóng đá hôm nay mặc định cho21112_21124
Các câu không chỉ định một chế độ một cách rõ ràng.
chỉ mộtAccess Exclusive
kèo chấp bóng đá hôm nay chặn AChọn
(khôngđể cập nhật/chia sẻ
) câu lệnh.
Sau khi có được, kèo chấp bóng đá hôm nay thường được giữ cho đến khi kết thúc giao dịch. Nhưng nếu kèo chấp bóng đá hôm nay được thu được sau khi thiết lập điểm lưu, kèo chấp bóng đá hôm 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ắcrollback
21757_21860PL/PGSQLKhối ngoại lệ: thoát ra lỗi từ khối phát hành kèo chấp bóng đá hôm nay thu được trong đó.
Bảng 13.2. Các chế độ kèo chấp bóng đá hôm nay mâu thuẫn
Chế độ kèo chấp bóng đá hôm nay được yêu cầu | Chế độ kèo chấp bóng đá hôm nay hiện có | |||||||
---|---|---|---|---|---|---|---|---|
Chia sẻ truy cập |
Chia sẻ hàng |
hàng excl. |
22916_22936 |
chia sẻ |
Chia sẻ hàng excl. |
excl. |
access excl. |
|
Chia sẻ truy cập |
x | |||||||
Chia sẻ hàng |
x | x | ||||||
hàng excr. |
x | x | x | 24565_24568 | ||||
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 |
Ngoài các kèo chấp bóng đá hôm nay cấp bảng, còn có các kèo chấp bóng đá hôm 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.327412_27717nhà văn và tủ kèo chấp bóng đá hôm nayđến cùng một hàng. kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay cấp bảng.
chế độ kèo chấp bóng đá hôm nay cấp độ
để cập nhật
để cập nhật
gây ra các hàng được truy xuất bởiChọn
Tuyên bố sẽ bị kèo chấp bóng đá hôm nay như thể để cập nhật. Điều này ngăn họ bị kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay
, Chọn chia sẻ
hoặcChọn để chia sẻ chính
Trong 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ật
sẽ 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 chấp bóng đá hôm 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ại
hoặcserializable
Giao dịch, tuy nhiên, một lỗi sẽ được ném nếu một hàng bị kèo chấp bóng đá hôm 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ật
Chế độ kèo chấp bóng đá hôm nay cũng được mua lại bởi bất kỳXóa
trê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ật
Trườ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 chấp bóng đá hôm 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 chấp bóng đá hôm nay
Hành xử tương tự nhưđể cập nhật
, Ngoại trừ việc kèo chấp bóng đá hôm nay thu được yếu hơn: kèo chấp bóng đá hôm nay này sẽ không chặnChọn chia sẻ kèo chấp bóng đá hôm nay
Các lệnh cố gắng có được một kèo chấp bóng đá hôm nay trên cùng một hàng. Chế độ kèo chấp bóng đá hôm nay này cũng được mua lại bởi bất kỳCập nhật
Điều đó không có đượcđể cập nhật
kèo chấp bóng đá hôm nay.
để chia sẻ
Hành xử tương tự nhưKhông có cập nhật kèo chấp bóng đá hôm nay
, ngoại trừ việc nó có được kèo chấp bóng đá hôm nay được chia sẻ thay vì kèo chấp bóng đá hôm nay độc quyền trên mỗi hàng được truy xuất. Một kèo chấp bóng đá hôm 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ật
hoặcChọn không cập nhật kèo chấp bóng đá hôm nay
Trê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 chấp bóng đá hôm nay
.
để chia sẻ chính
Hành xử tương tự nhưđể chia sẻ
, ngoại trừ kèo chấp bóng đá hôm nay yếu hơn:Chọn để cập nhật
bị chặn, nhưng khôngChọn không cập nhật kèo chấp bóng đá hôm nay
. kèo chấp bóng đá hôm nay được chia sẻ kèo chấp bóng đá hôm nay chặn các giao dịch khác thực hiệnXóa
hoặc bất kỳCập nhật
thay đổi các giá trị kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay
, Chọn chia sẻ
hoặcChọn chia sẻ kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay cùng một lúc. Tuy nhiên, kèo chấp bóng đá hôm nay một hàng có thể gây ra một đĩa ghi, ví dụ:Chọn để cập nhật
sửa đổi các hàng đã chọn để đánh dấu chúng bị kèo chấp bóng đá hôm nay, và do đó sẽ dẫn đến ghi đĩa.
Bảng 13.3. kèo chấp bóng đá hôm nay cấp độ mâu thuẫn
Chế độ kèo chấp bóng đá hôm nay được yêu cầu | Chế độ kèo chấp bóng đá hôm nay hiện tại | |||
---|---|---|---|---|
để chia sẻ chính | để chia sẻ | Không có cập nhật kèo chấp bóng đá hôm nay | để cập nhật | |
để chia sẻ chính | x | |||
để chia sẻ | x | x | ||
Không có cập nhật kèo chấp bóng đá hôm nay | x | x | x | |
để cập nhật | x | X | x | x |
Ngoài kèo chấp bóng đá hôm nay bảng và hàng, chia sẻ cấp trang/kèo chấp bóng đá hôm 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 chấp bóng đá hôm 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 chấp bóng đá hôm nay cấp trang, nhưng chúng được đề cập ở đây để hoàn thiện.
Việc sử dụng kèo chấp bóng đá hôm nay rõ ràng có thể tăng khả năng củabế tắc35176_35508POSTGRESQLTự độ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.)
35801_36038
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 chấp bóng đá hôm 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ật
Câu lệnh có được thành công kèo chấp bóng đá hôm 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ật
Câu lệnh thấy rằng hàng mà nó đang cố gắng cập nhật đã bị kèo chấp bóng đá hôm nay, vì vậy nó chờ giao dịch thu được kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay cấp hàng trên hàng được chỉ định, nhưng nó không thể: Giao dịch hai đã giữ kèo chấp bóng đá hôm 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.POSTGRESQLsẽ phát hiện tình huống này và hủy bỏ một trong các giao dịch.
Bảo vệ tốt nhất chống lại bế tắc thường là để tránh chúng bằng cách chắc chắn rằng tất cả các ứng dụng sử dụng cơ sở dữ liệu có được kèo chấp bóng đá hôm nay trên nhiều đối tượng theo thứ tự nhất quán. Trong ví dụ trên, nếu cả hai giao dịch đã cập nhật các hàng theo cùng một thứ tự, sẽ không có bế tắc nào xảy ra. Người ta cũng nên đảm bảo rằng kèo chấp bóng đá hôm nay đầu tiên có được trên một đối tượng trong giao dịch là chế độ hạn chế nhất sẽ cần thiết cho đối tượng đó. Nếu không khả thi để xác minh điều này trước, thì bế tắc có thể được xử lý khi đang bay bằng cách thử lại các giao dịch hủy bỏ do bế tắc.
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 chấp bóng đá hôm nay cấp bảng hoặc cấp độ hàng sẽ đợi vô thời hạn để các kèo chấp bóng đá hôm 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).
POSTGRESQLcung cấp một phương tiện để tạo các kèo chấp bóng đá hôm nay có ý nghĩa được xác định ứng dụng. Chúng được gọi làkèo chấp bóng đá hôm 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 chấp bóng đá hôm nay tư vấn có thể hữu ích cho các chiến lược kèo chấp bóng đá hôm nay phù hợp với mô hình MVCC. Ví dụ, việc sử dụng các kèo chấp bóng đá hôm nay tư vấn phổ biến là mô phỏng các chiến lược kèo chấp bóng đá hôm nay bi quan điển hình của cái gọi làTệp phẳngHồi39314_39528
Có hai cách để có được kèo chấp bóng đá hôm nay tư vấn trong39614_3962639631_40959
Giống như tất cả các kèo chấp bóng đá hôm nay trongPostgreSQL41030_41118pg_locks
Chế độ xem hệ thống.
Cả kèo chấp bóng đá hôm nay tư vấn và kèo chấp bóng đá hôm 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_TRANSACTIONvàMax_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 chấp bóng đá hôm nay nào. Điều này áp đặt giới hạn trên đối với số lượng kèo chấp bóng đá hôm 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 chấp bóng đá hôm 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ạn
Các điều khoản, phải cẩn thận để kiểm soát các kèo chấp bóng đá hôm 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ạn
không được đảm bảo sẽ được áp dụng trước khi chức năng kèo chấp bóng đá hôm nay được thực thi. Điều này có thể khiến một số kèo chấp bóng đá hôm nay được thu thập mà ứng dụng không mong đợi và do đó sẽ không phát hành (cho đến khi kết thúc phiên). Từ quan điểm của ứng dụng, các kèo chấp bóng đá hôm nay như vậy sẽ được treo, mặc dù vẫn có thể xem được trongpg_locks
.
Các chức năng được cung cấp để thao tác kèo chấp bóng đá hôm nay tư vấn được mô tả trongPhần 9.28.10.
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 phù hợ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.