2009-03-06 20 views
87

Tôi có một truy vấn mất nhiều thời gian ở giữa giao dịch. Khi tôi nhận được số wait_type của quá trình, nó là PAGEIOLATCH_SH.Kiểu chờ PAGEIOLATCH_SH trong SQL Server là gì?

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

Trả lời

107

Từ MSDN:

PAGEIOLATCH_SH

Xảy ra khi một nhiệm vụ đang chờ đợi vào một chốt cho một bộ đệm đó là trong một yêu cầu I/O. Yêu cầu chốt đang ở chế độ Chia sẻ. Chờ đợi lâu có thể cho biết vấn đề với hệ thống con đĩa.

Thực tế, điều này hầu như luôn xảy ra do 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 các chỉ mục một cách hiệu quả.

Nếu truy vấn của bạn là như thế này:

Select * from <table> where <col1> = <value> order by <PrimaryKey> 

, kiểm tra xem bạn có một chỉ số tổng hợp trên (col1, col_primary_key).

Nếu bạn không có, thì bạn sẽ cần hoặc là nếu PRIMARY KEY được chọn hoặc SORT nếu chỉ mục trên col1 được chọn.

Cả hai đều rất đĩa I/O hoạt động tiêu thụ trên các bảng lớn.

+0

Đó là một truy vấn đơn giản thực sự. Chọn * từ

trong đó = đặt hàng theo số . Chúng tôi cũng có chỉ mục trên col1 và đã cố gắng xây dựng lại chỉ mục. – Ryan

+0

Bạn có thể đề xuất một số tài nguyên để tìm hiểu sự hiểu biết của bạn về đĩa chuyên sâu hay không, cái gì yêu cầu quét toàn bộ chỉ mục, yêu cầu sắp xếp vv –

+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 cho Smarties' và' Suy nghĩ trong Bộ') và blog của tôi tất nhiên :) – Quassnoi

4

PAGEIOLATCH_SH loại chờ thường xuất hiện dưới dạng kết quả của chỉ mục bị phân mảnh hoặc không được tối ưu hóa.

Thường nguyên nhân quá mức loại PAGEIOLATCH_SH chờ đợi là:

  • I/O hệ thống con có một vấn đề hoặc là cấu hình sai
  • quá tải I/O hệ thống phụ bởi các quá trình khác đang sản xuất các hoạt động tôi cao/O
  • quản lý index Bad
  • logic hay vật lý ổ đĩa quan niệm sai lầm
  • vấn đề Mạng/độ trễ
  • Memory áp
  • Synchronous Mirroring và AlwaysOn AG

Để cố gắng và giải quyết có cao PAGEIOLATCH_SH loại chờ đợi, bạn có thể kiểm tra:

  • SQL Server, truy vấn và lập chỉ mục, như rất thường xuyên này có thể được tìm thấy là nguyên nhân gốc của các loại chờ đợi quá mức PAGEIOLATCH_SH
  • Để biết áp lực bộ nhớ trước khi chuyển 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 có độ an toàn cao Tính năng sao chép hoặc cam kết đồng bộ trong AlwaysOn AG, có thể tăng/quá mức PAGEIOLATCH_SH.

Bạn có thể tìm thêm thông tin chi tiết về chủ đề này trong bài viết Handling excessive SQL Server PAGEIOLATCH_SH wait types

Các vấn đề liên quan