Tôi đã nhận được một cuộc gọi ngày hôm qua từ một khách hàng đang phàn nàn về việc sử dụng CPU cao trên SQL Server của họ. Chúng tôi đang sử dụng SQL Server 2012 64 bit SE. Máy chủ đang chạy Windows Server 2008 R2 Standard, Intel Xeon 2.20 GHz (4 lõi), RAM 16 GB.
Sau khi chắc chắn rằng thủ phạm thực sự là SQL Server, tôi đã xem xét các trường hợp chờ đợi hàng đầu bằng cách sử dụng truy vấn DMV ở đây . Hai chờ đợi hàng đầu là: (1) PREEMPTIVE_OS_DELETESECURITYCONTEXT
và (2) SOS_SCHEDULER_YIELD
.
EDIT : Đây là kết quả của "truy vấn chờ đợi hàng đầu" (mặc dù ai đó đã khởi động lại máy chủ sáng nay theo mong muốn của tôi):
Chúng tôi thực hiện rất nhiều tính toán / chuyển đổi mạnh mẽ, vì vậy tôi có thể hiểu SOS_SCHEDULER_YIELD
. Tuy nhiên, tôi rất tò mò về PREEMPTIVE_OS_DELETESECURITYCONTEXT
loại chờ đợi và tại sao nó có thể là cao nhất.
Mô tả / thảo luận tốt nhất mà tôi có thể tìm thấy về loại chờ này có thể được tìm thấy ở đây . Nó đề cập đến:
Các loại chờ PREEMPTIVE_OS_ là các cuộc gọi rời khỏi cơ sở dữ liệu, thường là API Win32 và đang thực hiện mã bên ngoài SQL Server cho các tác vụ khác nhau. Trong trường hợp này, nó đang xóa một bối cảnh bảo mật được sử dụng trước đây để truy cập tài nguyên từ xa. API liên quan thực sự có tên là DeleteSecurityContext ()
Theo hiểu biết của tôi, chúng tôi không có bất kỳ tài nguyên bên ngoài nào như máy chủ được liên kết hoặc tập tin. Và chúng tôi không thực hiện bất kỳ hành vi mạo danh nào, v.v. Có thể một bản sao lưu đã khiến điều này tăng đột biến hoặc có thể là bộ điều khiển miền bị lỗi?
Cái quái gì có thể khiến điều này trở thành kiểu chờ đợi thống trị? Làm thế nào tôi có thể theo dõi loại chờ này hơn nữa?
Chỉnh sửa 2: Tôi đã kiểm tra nội dung của Nhật ký bảo mật Windows. Tôi thấy một vài mục có thể được quan tâm, nhưng tôi không chắc liệu đây có phải là bình thường không:
Special privileges assigned to new logon.
Subject:
Security ID: NT SERVICE\MSSQLServerOLAPService
Account Name: MSSQLServerOLAPService
Account Domain: NT Service
Logon ID: 0x3143c
Privileges: SeImpersonatePrivilege
Special privileges assigned to new logon.
Subject:
Security ID: NT SERVICE\MSSQLSERVER
Account Name: MSSQLSERVER
Account Domain: NT Service
Logon ID: 0x2f872
Privileges: SeAssignPrimaryTokenPrivilege
SeImpersonatePrivilege
Chỉnh sửa 3 : @Jon Seigel, như bạn yêu cầu, đây là kết quả của truy vấn của bạn. Một chút khác biệt so với Paul:
Chỉnh sửa 4: Tôi thừa nhận, tôi là người dùng Sự kiện mở rộng lần đầu tiên. Tôi đã thêm loại chờ này vào sự kiện Wait_info_external và thấy hàng trăm mục nhập. Không có văn bản sql hoặc xử lý kế hoạch, chỉ có một ngăn xếp cuộc gọi. Làm thế nào tôi có thể theo dõi thêm nguồn?