Liệu @os_run_p Warriority trong sp_add_jobstep có thực sự hoạt động trong SQL Server 2008 R2 không?


13

Liệu @os_run_prioritytrong sp_add_jobstepthực tế công việc, trong SQL Server 2008 R2?

Nó được mô tả là "dành riêng" hoặc "không có giấy tờ". Tuy nhiên, tôi thấy nó trong sp_add_jobstepđịnh nghĩa:

@os_run_priority INT = 0, -- -15 = Idle, -1 = Below Normal, 0 = Normal, 1 = Above Normal, 15 = Time Critical)

Tôi nghi ngờ rằng đây chỉ là báo cáo @os_run_p Warriority đã được sử dụng, thay vì cho bạn cơ hội để tác động đến mức độ ưu tiên. Nếu vậy, văn bản chỉ giúp bạn tìm ra ưu tiên nào đã được sử dụng.
RLF

Câu trả lời:


11

Đây là một phần của định nghĩa bước công việc và thậm chí bạn có thể thấy nó có các giá trị được sử dụng hoặc được xác định trong các lĩnh vực khác.

Sau khi xem mã nguồn (tôi làm việc tại Microsoft và có quyền truy cập), trong khi giá trị thực sự được chuyển qua như một phần thông tin bước công việc được gửi đến từng hệ thống con, tôi không thể tìm thấy một nơi thực sự đặt giá trị làm một phần của bước thực hiện công việc. Tuy nhiên, có các luồng chạy ở các mức ưu tiên khác nhau như là một phần của SQL Server Agent và các luồng đó có thể hoặc không thể giúp với chức năng bước công việc hoặc các hệ thống con có vai trò cụ thể.

Mặc dù tôi đã không thực hiện kiểm tra toàn diện, nhưng sẽ tốt nhất khi cho rằng giá trị này là - như được mô tả - "dành riêng". Chỉ vì nó dường như không được sử dụng không có nghĩa là nó không thể ở bất kỳ điểm nào khác khi hệ thống ống nước tồn tại.


4

Mặc dù giá trị này được lưu dưới dạng một phần của bước công việc, tôi không thể tìm thấy bằng chứng nào cho thấy giá trị được sử dụng.

Nếu tôi đặt giá trị bằng cách thêm tham số , @os_run_priority = Xvào EXEC msdb.dbo.sp_update_jobstep, thì nó sẽ hiển thị chính xác trong os_run_prioritycột củamsdb.dbo.sysjobsteps .

Tôi đã tạo một công việc với 2 bước: một bước T-SQL và một bước Hệ điều hành (CmdExec). Tôi giả định rằng nhiều khả năng một tùy chọn như "ưu tiên chạy os" sẽ ảnh hưởng đến bước CmdExec, nhưng thật tốt khi kiểm tra cả hai.

Mỗi bước làm một WAITFOR DELAY '00:00:30.000'cái để nó sẽ chạy xung quanh trong khi tôi nhìn vào các quy trình đang chạy để xem mức độ ưu tiên đã thay đổi.

Tôi đã kiểm tra các quy trình bằng Process Explorer . Theo như tôi có thể nói, các giá trị (và tôi đã cố gắng 1, 15-1) không có hiệu lực. Tôi đã thử sử dụng cả SQL Server 2012 và 2016 trên Windows 10.

Tôi cũng đã thử trên SQL Server 2008 R2 chạy trên Windows XP. Tôi một lần nữa thấy không có dấu hiệu nào cho thấy thuộc tính này có bất kỳ ảnh hưởng nào đến quá trình SQLAGENT hoặc quá trình SQLCMD (mà tôi đang sử dụng trong bước CmdExec để gọi lại vào SQL Server để thực hiệnWAITFOR DELAY ).

Tất nhiên, cần lưu ý rằng chính quá trình này cần một số quyền nhất định để thay đổi mức độ ưu tiên của một luồng. Khi đại lý SQL Server đang chạy như tài khoản Hệ thống cục bộ, nó có thể không có quyền như vậy. Tuy nhiên, tôi đã kiểm tra (chỉ dành cho SQL Server 2016) bằng cách sử dụng Đăng nhập Windows của riêng tôi làm tài khoản dịch vụ cho đại lý SQL Server và không thấy dấu hiệu nào của thuộc tính này được sử dụng.


1
Nó được chuyển trong cấu trúc công việc cho từng hệ thống con và mỗi hệ thống con có trách nhiệm chọn những gì nó làm với điều này. Tôi không thể tìm thấy một hệ thống con đã triển khai mã như vậy trên các bản vá lỗi thiết bị đầu cuối 2008R2.
Sean nói loại bỏ Sara Chipps

@SeanGallardy Tom đã cập nhật câu trả lời của bạn với phần còn thiếu để xóa mọi lo ngại :-). Tôi không biết bạn có quyền truy cập vào nguồn và thường mọi người đủ để nói mọi thứ rất tự tin / dứt khoát, như thể có kiến ​​thức trực tiếp, quan sát được và đó chỉ là phỏng đoán tốt nhất. Tôi đã nêu lên câu trả lời của bạn, nhưng sẽ giữ câu trả lời của tôi vì nó cung cấp một số thông tin bổ sung về các ưu tiên cũng như cách điều tra các vấn đề tương tự.
Solomon Rutzky
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.