Eu tenho um trabalho configurado no SQL Server Agent para executar uma consulta de atualização. Quero que esse trabalho seja executado todas as noites entre meia-noite e cinco da manhã e que ele se repita a cada 5 minutos durante esse período. Mas eu só quero que o trabalho seja executado se a CPU estiver ociosa, ou seja, a utilização da CPU está abaixo de 20%. Sei que posso configurar o agendamento e também posso configurar o requisito de inatividade da CPU separadamente. Existe uma maneira de configurá-lo para que ambos os 'cronogramas' sejam verdadeiros para que o trabalho seja executado?
obrigado
fonte
Configure o SQL Agent através da janela Propriedades avançadas para Condição de CPU inativa . Você definiria o valor "O uso médio da CPU cai abaixo" para 20% e, em seguida, quanto tempo precisará manter nesse nível antes da execução da tarefa.
Depois disso, configure a etapa do trabalho para verificar o tempo, garantindo que esteja dentro da sua janela, se dentro da janela emitir o comando update.
Agora, o requisito para cada 5 minutos pode não atender exatamente a essa configuração. Não foi possível encontrar nada neste tipo de agendamento que indique com que frequência o trabalho seria executado. [por exemplo, se você definir "e permanecer abaixo desse nível" para 30 segundos para a condição de CPU ociosa, ele executa o trabalho com tanta frequência?] Isso exigiria um pouco de teste, pois nunca usei essa configuração antes. Se eu tiver uma chance, posso tentar ver o que ele faz e atualizará esta resposta.
fonte
Uma maneira seria ter três empregos. Trabalho um definido em uma programação que permite o trabalho dois no início da janela. O trabalho dois está definido para ser executado quando a CPU está ociosa e o terceiro desabilita o trabalho dois no final da janela. Não acho que seja a única maneira de fazê-lo, mas é definitivamente o mais fácil em minha mente.
fonte
Denis estava muito perto. Mas a solução real foi um pouco trocada. Como o PowerShell não pode verificar a CPU por um período, apenas o uso atual, a verificação do SQL Server teve que ser usada.
Portanto, minha primeira etapa do trabalho foi executar um script do PowerShell que verifica se a hora atual do sistema está entre as duas restrições de tempo. Se for, o script PowerShell não faz nada. O trabalho do SQL Server interpreta isso como um sucesso.
Em seguida, o trabalho passa para a última etapa e executa a consulta de atualização.
Se, no entanto, o horário atual estiver fora do intervalo, execute uma
Start-Time -s 600
para pausar o script do PowerShell por 10 minutos (simulando o requisito "uma vez a cada 5 a 10 minutos). Isso evita que o agente do servidor SQL tente constantemente executar esse trabalho. .Após 10 minutos, o script do PowerShell gera um erro personalizado. Como eu tenho
$ErrorActionPreference = "Stop"
no início do script, o script do PowerShell para de ser executado após o erro. Este passo é muito importante.Como o powershell parou e não retornou, o SQL Server Agent interpreta isso como uma falha e não continuará na etapa que executa a consulta Atualização.
PS Vocês me levaram na direção certa. Se eu tivesse reputação suficiente, eu votaria em vocês.
Edit: Adicionado Powershell Script
fonte