Est -ce que @os_run_priority
dans le sp_add_jobstep
travail fait, dans SQL Server 2008 R2?
Il est décrit comme "réservé" ou "non documenté". Cependant, je le vois dans la sp_add_jobstep
définition:
@os_run_priority INT = 0, -- -15 = Idle, -1 = Below Normal, 0 = Normal, 1 = Above Normal, 15 = Time Critical)
Réponses:
Cela fait partie de la définition de l'étape de travail et vous pouvez même voir qu'il a des valeurs utilisées ou définies dans d'autres domaines.
Après avoir jeté un coup d'œil dans le code source (je travaille chez Microsoft et y ai accès), alors que la valeur est en effet transmise dans le cadre des informations d'étape de travail envoyées à chaque sous-système, je n'ai pas pu trouver un endroit qui définisse réellement la valeur comme faisant partie de l'exécution de l'étape de travail. Il existe cependant des threads qui s'exécutent à différents niveaux de priorité dans le cadre de l'Agent SQL Server et ces threads peuvent ou non aider avec la fonctionnalité d'étape de travail ou les sous-systèmes qui remplissent un rôle spécifique.
Bien que je n'aie pas effectué une vérification exhaustive, il serait préférable de supposer que cette valeur est - comme décrit - "réservée". Ce n'est pas parce qu'il ne semble pas être utilisé qu'il ne peut l'être à aucun autre moment que la plomberie existe.
la source
Bien que cette valeur soit enregistrée dans le cadre de l'étape du travail, je ne trouve aucune preuve que la valeur est utilisée.
Si je fixe la valeur en ajoutant le paramètre
, @os_run_priority = X
àEXEC msdb.dbo.sp_update_jobstep
, alors il apparaît correctement dans laos_run_priority
colonne demsdb.dbo.sysjobsteps
.J'ai créé un travail en 2 étapes: une étape T-SQL et une étape du système d'exploitation (CmdExec). Je suppose qu'il est plus probable qu'une option telle que "OS Run Priority" affecte une étape CmdExec, mais il est bon de tester les deux.
Chaque étape a fait en
WAITFOR DELAY '00:00:30.000'
sorte qu'elle traîne pendant que je regarde les processus en cours d'exécution pour voir si la priorité a changé.J'ai vérifié les processus en utilisant Process Explorer . Pour autant que je peux dire, les valeurs (et j'ai essayé
1
,15
et-1
) n'a aucun effet. J'ai essayé d'utiliser SQL Server 2012 et 2016 sur Windows 10.J'ai également essayé sur SQL Server 2008 R2 fonctionnant sous Windows XP. Je n'ai encore vu aucune indication de cette propriété ayant un effet sur le processus SQLAGENT ou le processus SQLCMD (que j'utilisais à l'étape CmdExec pour rappeler dans SQL Server pour le faire
WAITFOR DELAY
).Bien sûr, il convient de noter que le processus lui-même a besoin de certaines autorisations pour modifier le niveau de priorité d'un thread. Lorsque l'agent SQL Server s'exécute en tant que compte système local, il peut ne pas disposer de tels droits. Cependant, j'ai testé (SQL Server 2016 uniquement) en utilisant ma propre connexion Windows comme compte de service pour l'agent SQL Server, et je n'ai vu aucune indication de l'utilisation de cette propriété.
la source