Ngăn chặn một truy vấn duy nhất từ ​​tất cả các tài nguyên


7

Tôi có một máy chủ cơ sở dữ liệu sản xuất chạy SQL Server 2008 R2. Làm cách nào tôi có thể giữ một truy vấn người dùng trên một cơ sở dữ liệu khỏi việc ăn cắp tất cả các tài nguyên hệ thống và làm chậm tất cả các cơ sở dữ liệu trên máy chủ?

Vấn đề cụ thể tôi gặp phải là với một truy vấn có con trỏ chạy dài. Bất cứ khi nào truy vấn được chạy, việc sử dụng CPU sẽ đạt 100% trên tất cả các lõi và thậm chí các truy vấn đơn giản trên các cơ sở dữ liệu khác bị chậm hoặc hết thời gian. Đây có phải là bình thường và các thực hành tốt nhất để ngăn chặn điều này là gì?


1
Tôi sẽ xem xét việc sửa truy vấn trước ...
gbn

1
@gbn - Thông thường đó sẽ là trọng tâm của tôi, nhưng trong trường hợp này, người dùng đã viết \ chạy truy vấn thậm chí không thuộc nhóm của tôi nên tôi tự hỏi liệu có thể "hộp cát" cơ sở dữ liệu từ quan điểm hiệu suất.
Joseph Sturtevant

Phiên bản doanh nghiệp?
Aaron Bertrand

@AaronBertrand - Vâng. (Phiên bản doanh nghiệp 2008 R2)
Joseph Sturtevant

Tôi đoán năm 2008 sắp kết thúc cuộc đời. Tự hỏi tại sao bạn vẫn sử dụng nó?
Learning_DBAdmin

Câu trả lời:


9

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.

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.