Cách giải quyết các loại chờ đợi RESOURCE_SEMAPHORE và RESOURCE_SEMAPHORE_QUERY_COMPILE


13

Chúng tôi đang cố gắng tìm ra nguyên nhân gốc rễ của các truy vấn máy chủ sql chạy chậm, nhấn / tìm nạp dữ liệu từ một trong các cơ sở dữ liệu, kích thước 300 GB, được lưu trữ trên máy chủ có cấu hình bên dưới:

Máy chủ Windows 2003 R2, SP2, Phiên bản doanh nghiệp, RAM 16 GB, 12 bit CPU 32 bit

Máy chủ SQL 2005, SP4, Phiên bản doanh nghiệp, 32 bit.

Chúng tôi đã thông báo cho doanh nghiệp về việc nâng cấp lên 64 bit, sẽ mất hơn một tháng.

Nhưng đối với vấn đề hiện tại, chúng tôi đang cố gắng thu thập dữ liệu nếu chúng tôi có thể giải quyết áp lực bộ nhớ hoặc cuối cùng đưa ra kết luận để tăng RAM.

Hành động đã hoàn thành: Lập chỉ mục lại và cập nhật số liệu thống kê phù hợp với DB này.

Như được hiển thị bên dưới, chúng tôi đã nhận thấy loại bồi bàn semaphore trong 5 ngày qua, được chạy trong giờ tải:

phục vụ bàn

Vài thông tin sau các truy vấn bên dưới: kích thước của bộ đệm = 137272

SELECT SUM(virtual_memory_committed_kb)
FROM sys.dm_os_memory_clerks
WHERE type='MEMORYCLERK_SQLBUFFERPOOL'

và bộ nhớ semaphore = 644024 mỗi truy vấn bên dưới

 SELECT SUM(total_memory_kb)
FROM sys.dm_exec_query_resource_semaphores

Dưới đây là một số thông tin được thu thập từ dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grantscủa dmv

dmvserror

Vì vậy, từ thông tin trên được thu thập và mỗi sem_Bore dữ liệu tài nguyên SP_Blitz dường như là vấn đề.

Là bộ nhớ 'target_memory_kb' được gán cho id semaphore tài nguyên quá thấp, so với 16 GB RAM có sẵn.

Lưu ý * mỗi phân tích trong 8 giờ chạy 'target_memory_kb' luôn dưới 1 GB, so với 16 GB có sẵn?

vấn đề có thể là gì ở đây và cách giải quyết, vui lòng đề xuất

Cảm ơn


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện . Những bình luận ngoài chủ đề sẽ chỉ bị xóa.
Paul White 9

Câu trả lời:


25

Oh, trời ơi, tôi có một số tin xấu ở đây.

Trên HĐH 32 bit, SQL Server chỉ sử dụng 4GB bộ nhớ đầu tiên cho những thứ như không gian làm việc truy vấn. (Và nó cũng chiến đấu với HĐH cho 4GB đó - mọi ứng dụng đang chạy khác cũng sẽ cạnh tranh cho bộ nhớ đó.)

4GB có vẻ như rất nhiều, nhưng việc viết một truy vấn cần vài GB bộ nhớ để chạy là tương đối dễ dàng. Khi đủ truy vấn cần đủ bộ nhớ, SQL Server sẽ ném RESOURCE_SEMAPHORE chờ vì các truy vấn không thể có đủ bộ nhớ để bắt đầu. RESOURCE_SEMAPHORE_QUERY_COMPILE có nghĩa là họ thậm chí không thể có đủ bộ nhớ để biên dịch kế hoạch thực hiện - và vâng, điều đó khá tệ.

Vậy làm thế nào để bạn sửa chữa nó?

  • Chuyển sang HĐH 64 bit (Dù sao thì HĐH bạn đang chạy cũng không còn hỗ trợ)
  • Chuyển sang bản dựng 64-bit của SQL Server
  • Giảm nhu cầu bộ nhớ trên máy chủ (không chạy bất kỳ ứng dụng nào khác trên hộp này và điều đó đặc biệt quan trọng đối với các hộp 32 bit vì chúng tôi giới hạn ở mức 4GB)
  • Sử dụng nhiều bộ nhớ hơn với các công tắc AWE / PAE - ngoại trừ việc không hoạt động cho RESOURCE_SEMAPHORE chờ đợi vì SQL Server chỉ có thể sử dụng 4GB đầu tiên cho không gian làm việc truy vấn
  • Điều chỉnh truy vấn và chỉ mục để chúng cần ít bộ nhớ hơn

Tôi ngần ngại thậm chí nói điều cuối cùng, bởi vì vấn đề 32 bit rất tệ và thực sự khó khăn với các phiên bản SQL Server cũ hơn. Nếu bạn đang ở trên một hiện tại, bạn có thể đi qua bộ đệm kế hoạch và sắp xếp các truy vấn theo cấp bộ nhớ, tìm người nhận trợ cấp lớn nhất và điều chỉnh chúng. Không phải là một lựa chọn trên cổ này, mặc dù.

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.