Nếu bạn đang sử dụng Phiên bản doanh nghiệp, bạn có thể sử dụng Trình quản lý tài nguyên ( Tôi đã viết một whitepaper cho Microsoft về chủ đề này vài năm trước ). Điều này đặc biệt hiệu quả nếu bạn chỉ có thể xác định người dùng này (bằng SUSER_SNAME()
hoặc HOST_NAME()
). Thật không may, điều này không thể được sử dụng để đặt các hạn chế cho chỉ một truy vấn - nó được thực hiện tại thời điểm đăng nhập và ảnh hưởng đến tất cả các truy vấn trong vòng đời của chúng, nhưng bạn chắc chắn có thể hạn chế CPU nói chung. Lưu ý rằng trong SQL Server 2008 & R2, ràng buộc này chỉ được thi hành khi có sự tranh chấp khác trên hộp. Trong SQL Server 2012, có một cài đặt mới ( CAP_CPU_PERCENT
) cho phép bạn giới hạn CPU cho nhóm tài nguyên ngay cả khi chúng là duy nhất trên hộp.
Một cách khác (hoặc một cách bổ sung) để tấn công vấn đề, giả sử bạn có quyền kiểm soát chính văn bản truy vấn (ví dụ: nó không được người dùng hoặc ứng dụng của họ lắp ráp), là để truy vấn cụ thể đó luôn chạy với OPTION (MAXDOP 1)
- nó sẽ chạy vẫn gây ra CPU cao và rất có thể truy vấn sẽ mất nhiều thời gian hơn, nhưng bạn có thể sử dụng cài đặt đó để giới hạn số lượng lịch trình mà nó ảnh hưởng. Vì vậy, trên hộp 16 lõi, bạn sẽ chỉ thấy một CPU tăng vọt là kết quả trực tiếp của truy vấn cụ thể này.