Olá, pessoal!
Boa tarde!
Neste post rápido, vou mostrar a vocês como executar uma query simples na view de sistema msdb.dbo.syssessions para identificar a data e o horário de cada inicialização do SQL Agent da instância, responsável pelo controle e monitoramento dos Jobs do SQL Server (além de outras coisas).
Em um ambiente normal, geralmente o SQL Agent é iniciado junto com a instância do SQL Server. Não me lembro de ter precisado parar o SQL Agent manualmente para algum processo ou manutenção. Na grande maioria dos casos, podemos considerar esse histórico de inicialização do SQL Agent como o histórico de inicialização da própria instância, informação muito útil e que não conheço outra forma de obter (a não ser que você crie uma rotina de Auditoria para isso).
Consultando as informações do histórico

Consultando algumas estatísticas básicas
SELECT
MIN(agent_start_date) AS Dt_Primeira_Inicializacao,
COUNT(*) AS Qt_Inicializacoes,
MAX(agent_start_date) AS Dt_Ultima_Inicializacao
FROM
msdb.dbo.syssessions

Consultando estatísticas um pouco mais complexas
IF (OBJECT_ID('tempdb..#Dados') IS NOT NULL) DROP TABLE #Dados
SELECT
A.agent_start_date,
DATEDIFF(DAY, B.agent_start_date, A.agent_start_date) AS Qt_Diferenca,
DAY(A.agent_start_date) AS Dia,
DATEPART(HOUR, A.agent_start_date) AS Hora,
DATENAME(WEEKDAY, A.agent_start_date) AS Dia_Semana
INTO
#Dados
FROM
msdb.dbo.syssessions A
JOIN msdb.dbo.syssessions B ON A.session_id = B.session_id + 1
IF (OBJECT_ID('tempdb..#Dia_Mais_Inicializado') IS NOT NULL) DROP TABLE #Dia_Mais_Inicializado
SELECT Dia, COUNT(*) AS Quantidade
INTO #Dia_Mais_Inicializado
FROM #Dados
GROUP BY Dia
IF (OBJECT_ID('tempdb..#Hora_Mais_Inicializada') IS NOT NULL) DROP TABLE #Hora_Mais_Inicializada
SELECT Hora, COUNT(*) AS Quantidade
INTO #Hora_Mais_Inicializada
FROM #Dados
GROUP BY Hora
IF (OBJECT_ID('tempdb..#Dia_Semana_Mais_Inicializado') IS NOT NULL) DROP TABLE #Dia_Semana_Mais_Inicializado
SELECT Dia_Semana, COUNT(*) AS Quantidade
INTO #Dia_Semana_Mais_Inicializado
FROM #Dados
GROUP BY Dia_Semana
DECLARE @Qt_Media_Dias_Entre_Inicializacoes INT = (SELECT AVG(Qt_Diferenca) FROM #Dados)
SELECT
@Qt_Media_Dias_Entre_Inicializacoes AS Qt_Media_Dias_Entre_Inicializacoes,
(SELECT TOP 1 Dia FROM #Dia_Mais_Inicializado ORDER BY Quantidade DESC) AS Qt_Dia_Com_Mais_Inicializacoes,
(SELECT TOP 1 Hora FROM #Hora_Mais_Inicializada ORDER BY Quantidade DESC) AS Qt_Hora_Com_Mais_Inicializacoes,
(SELECT TOP 1 Dia_Semana FROM #Dia_Semana_Mais_Inicializado ORDER BY Quantidade DESC) AS Qt_Dia_Semana_Com_Mais_Inicializacoes

É isso aí, pessoal!
Até a próxima!
Comentários (0)
Carregando comentários…