Gibt es @os_run_priority
in sp_add_jobstep
tatsächlich Arbeit, in SQL Server 2008 R2?
Es wird als "reserviert" oder "undokumentiert" beschrieben. Ich sehe es jedoch in der sp_add_jobstep
Definition:
@os_run_priority INT = 0, -- -15 = Idle, -1 = Below Normal, 0 = Normal, 1 = Above Normal, 15 = Time Critical)
sql-server
sql-server-2008-r2
jobs
benik9
quelle
quelle
Antworten:
Dies ist Teil der Jobschrittdefinition, und Sie sehen möglicherweise sogar, dass Werte in anderen Bereichen verwendet oder definiert werden.
Nachdem ich mir den Quellcode angesehen habe (ich arbeite bei Microsoft und habe Zugriff), konnte ich keinen Ort finden, an dem der Wert tatsächlich als Teil festgelegt wurde, obwohl der Wert tatsächlich als Teil der an die einzelnen Subsysteme gesendeten Jobschrittinformationen übergeben wurde der Jobschrittausführung. Es gibt jedoch Threads, die als Teil des SQL Server-Agenten in unterschiedlichen Prioritätsstufen ausgeführt werden, und diese Threads können bei der Jobschrittfunktionalität oder bei Subsystemen, die eine bestimmte Rolle ausfüllen, hilfreich sein oder auch nicht.
Ich habe zwar keine vollständige Überprüfung durchgeführt, aber es wäre sicher am besten anzunehmen, dass dieser Wert - wie beschrieben - "reserviert" ist. Nur weil es nicht verwendet zu werden scheint, heißt das noch lange nicht, dass es an keiner anderen Stelle sein kann, da die Rohrleitungen vorhanden sind.
quelle
Während dieser Wert als Teil des Auftragsschritts gespeichert wird, kann ich keinen Hinweis darauf finden, dass der Wert verwendet wird.
Wenn ich den Wert durch Hinzufügen des Parameters
, @os_run_priority = X
zu setzeEXEC msdb.dbo.sp_update_jobstep
, wird er in deros_run_priority
Spalte von korrekt angezeigtmsdb.dbo.sysjobsteps
.Ich habe einen Job mit zwei Schritten erstellt: einem T-SQL-Schritt und einem Betriebssystemschritt (CmdExec). Ich gehe davon aus, dass es wahrscheinlicher ist, dass eine Option wie "os run priority" einen CmdExec-Schritt beeinflusst, aber es ist gut, beide zu testen.
Bei jedem Schritt wurde eine ausgeführt
WAITFOR DELAY '00:00:30.000'
, damit die Zeit vergeht, während ich die ausgeführten Prozesse betrachtete, um festzustellen, ob sich die Priorität geändert hatte.Ich habe die Prozesse mit dem Process Explorer überprüft . Soweit ich das beurteilen kann, die Werte (und ich versuchte
1
,15
und-1
) haben keine Wirkung. Ich habe versucht, SQL Server 2012 und 2016 unter Windows 10 zu verwenden.Ich habe es auch mit SQL Server 2008 R2 unter Windows XP versucht. Ich sah wieder keinen Hinweis auf diese Eigenschaft, die sich auf den SQLAGENT-Prozess oder den SQLCMD-Prozess auswirkte (den ich im CmdExec-Schritt verwendet habe, um in SQL Server zurückzukehren, um das auszuführen
WAITFOR DELAY
).Natürlich sollte beachtet werden, dass der Prozess selbst bestimmte Berechtigungen benötigt, um die Prioritätsstufe eines Threads zu ändern. Wenn der SQL Server-Agent als lokales Systemkonto ausgeführt wird, verfügt er möglicherweise nicht über solche Rechte. Ich habe jedoch einen Test (nur SQL Server 2016) mit meiner eigenen Windows-Anmeldung als Dienstkonto für den SQL Server-Agenten durchgeführt und keine Anzeige für die Verwendung dieser Eigenschaft erhalten.
quelle