Kiểu chờ PAGEIOLATCH_SH trong SQL Server là gì?


96

Tôi có một truy vấn đang mất nhiều thời gian giữa một giao dịch. Khi tôi nhận được wait_typequy trình thì nó là như vậy PAGEIOLATCH_SH.

Loại chờ đợi này có nghĩa là gì và làm cách nào để giải quyết?

Câu trả lời:


116

Từ tài liệu của Microsoft :

PAGEIOLATCH_SH

Xả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.


Đó là một truy vấn đơn giản thực sự. Chọn * từ <bảng> trong đó <col1> = <giá trị> theo thứ tự <PrimaryKey>. Chúng tôi cũng có một chỉ mục trên col1 và đã thử xây dựng lại chỉ mục.
Ryan

Bạn có thể gợi ý một số nguồn lực cho việc học hiểu biết bạn có những gì là đĩa chuyên sâu, những gì đòi hỏi một chỉ số quét toàn bộ, những gì đòi hỏi một loại vv
Greg B

1
@GregB: nếu bạn đã có kiến ​​thức cơ bản về SQL, bạn có thể đọc sách của Joe Celko (tất cả chúng nhưng đặc biệt là SQL for SmartiesThinking in Sets) và tất nhiên là blog của tôi :)
Quassnoi

3
Điều này đã chỉ ra một lỗi trong hệ thống con đĩa của chúng tôi. Đĩa RAID đã bị lỗi nếu không kích hoạt hệ thống giám sát. Kiểm tra các bản ghi sự kiện thấy rằng SMART đã thực sự đánh dấu một ổ đĩa là xấu.
Gomibushi

7

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à:

  • Hệ thống con I / O gặp sự cố hoặc bị định cấu hình sai
  • Hệ thống con I / O bị quá tải bởi các quy trình khác đang tạo ra hoạt động I / O cao
  • Quản lý chỉ mục kém
  • Nhận thức sai về ổ đĩa logic hoặc ổ đĩa vật lý
  • Sự cố / độ trễ mạng
  • Áp lực bộ nhớ
  • Phản chiếu đồng bộ và AlwaysOn AG

Để thử và giải quyết việc có PAGEIOLATCH_SHloại chờ đợi cao , bạn có thể kiểm tra:

  • SQL Server, truy vấn và chỉ mục, rất thường xuyên, điều này có thể được tìm thấy là nguyên nhân gốc rễ của các PAGEIOLATCH_SHkiểu chờ đợi quá mức
  • Đối với áp lực bộ nhớ trước khi nhảy vào bất kỳ sự cố hệ thống con I / O nào

Luô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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.