Câu trả lời:
PAGEIOLATCH_SHXảy ra khi một tác vụ đang đợi chốt cho bộ đệm nằm trong một
I/Oyê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 SCANnếu PRIMARY KEYđược chọn hoặc SORTnếu một chỉ mục trên col1được chọn.
Cả hai đều là những I/Ohoạt động rất tốn đĩa trên các bảng lớn.
SQL for Smartiesvà 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_SHkiểu chờ đợi quá nhiều là:
Để thử và giải quyết việc có PAGEIOLATCH_SHloại chờ đợi cao , bạn có thể kiểm tra:
PAGEIOLATCH_SHkiể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_SHcó 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