Câu trả lời:
PAGEIOLATCH_SH
Xảy ra khi một tác vụ đang đợi chốt cho bộ đệm nằm trong một
I/O
yêu cầu. Yêu cầu chốt đang ở chế độ Chia sẻ. Chờ đợi lâu có thể chỉ ra sự cố với hệ thống con của đĩa.
Trong thực tế, điều này hầu như luôn xảy ra do các lần quét lớn trên các bảng lớn. Nó hầu như không bao giờ xảy ra trong các truy vấn sử dụng chỉ mục một cách hiệu quả.
Nếu truy vấn của bạn như thế này:
Select * from <table> where <col1> = <value> order by <PrimaryKey>
, hãy kiểm tra xem bạn đã bật chỉ mục tổng hợp chưa (col1, col_primary_key)
.
Nếu bạn không có, thì bạn sẽ cần một bảng đầy đủ INDEX SCAN
nếu PRIMARY KEY
được chọn hoặc SORT
nếu một chỉ mục trên col1
được chọn.
Cả hai đều là những I/O
hoạt động rất tốn đĩa trên các bảng lớn.
SQL for Smarties
và Thinking in Sets
) và tất nhiên là blog của tôi :)
PAGEIOLATCH_SH
loại đợi thường xuất hiện do chỉ mục bị phân mảnh hoặc chưa được tối ưu hóa.
Thường thì các lý do cho PAGEIOLATCH_SH
kiểu chờ đợi quá nhiều là:
Để thử và giải quyết việc có PAGEIOLATCH_SH
loại chờ đợi cao , bạn có thể kiểm tra:
PAGEIOLATCH_SH
kiểu chờ đợi quá mứcLuôn ghi nhớ rằng trong trường hợp tính năng Phản chiếu an toàn cao hoặc tính khả dụng cam kết đồng bộ trong AlwaysOn AG, PAGEIOLATCH_SH
có thể tăng / quá mức .
Bạn có thể tìm thêm chi tiết về chủ đề này trong bài viết Xử lý các kiểu chờ SQL Server PAGEIOLATCH_SH quá mức