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

SQL Agent History - syssessions
SQL Agent History - syssessions

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

SQL Agent History - syssessions 2
SQL Agent History - syssessions 2

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

SQL Agent History - syssessions 3
SQL Agent History - syssessions 3

É isso aí, pessoal!
Até a próxima!