Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como consultar o histórico de execução de jobs do SQL Server Integration Services Catalog (SSISDB)

Visualizações: 53 views
Tempo de Leitura: 4 minutos

Fala pessoal! Tudo bem com vocês? Animados para mais um post???

Hoje vamos mergulhar em um assunto muito comum de quem trabalha com integração de dados no ecossistema SQL Server: o monitoramento de execuções no SSISDB. Se você utiliza o catálogo do SQL Server Integration Services (SSIS) para armazenar os pacotes, sabe que nem sempre é fácil extrair o que realmente importa de forma rápida.

O que é o Catálogo SSISDB?

Para quem está chegando agora, o SSISDB é o banco de dados central que armazena todos os projetos, pacotes, parâmetros, ambientes e, o mais importante para este post, o histórico de execução. Quando você executa um pacote, o SQL Server registra cada passo, cada erro e cada métrica de performance dentro desse banco.

Observação: Por padrão, o SSISDB possui uma rotina de limpeza automática (Maintenance Job). Se você não encontrar dados antigos, verifique a propriedade Retention Window nas configurações do catálogo. Geralmente, o padrão são 365 dias, mas em ambientes de alta carga, isso pode fazer o banco crescer absurdamente.

Monitorando pela Interface (SSMS)

A forma mais comum de visualizar o que aconteceu com seus pacotes é através dos relatórios nativos do SQL Server Management Studio (SSMS).

  • No Object Explorer, expanda o nó Integration Services Catalogs.
  • Clique com o botão direito na pasta SSISDB.
  • Vá em Reports > Standard Reports > All Executions.

Embora esses relatórios sejam visualmente agradáveis, eles têm algumas limitações severas para quem precisa fazer isso com frequência:

  • Analisar dezenas ou centenas de execuções: O SSMS não foi desenhado para análise em massa. Cada execução precisa ser aberta individualmente, sem visão consolidada por pacote, projeto, servidor ou período, tornando praticamente inviável identificar padrões de falha, pacotes problemáticos recorrentes ou degradação de performance ao longo do tempo.
  • Lentidão: Em catálogos com milhares de execuções, os relatórios nativos fazem consultas pesadas e não indexadas na SSISDB, o que pode levar vários minutos para carregar uma simples tela, inviabilizando uso operacional em ambientes de missão crítica.
  • Dificuldade de Filtro: Os filtros são extremamente limitados: não é possível filtrar por mensagem de erro, código de erro, tarefa específica, componente da pipeline, substring de mensagem, nem combinar múltiplos critérios (por exemplo: pacotes que falharam mais de X vezes no último mês).
  • Troubleshooting de Erros: Para encontrar o erro real de uma execução, o usuário precisa navegar por várias camadas de telas (All Executions > Overview > Messages > Messages Internas), muitas vezes encontrando apenas mensagens genéricas antes de chegar no erro efetivo da pipeline.
  • Criar relatórios: Os relatórios do SSMS não podem ser integrados ao Power BI, SSRS ou qualquer outra ferramenta de BI, impossibilitando a criação de dashboards com SLA de cargas, ranking de pacotes com mais falhas, tempo médio de execução, tendência histórica e indicadores operacionais.
  • Automatizar análises: Não há como automatizar alertas, correlações ou análises avançadas (ex.: “me avise se um pacote falhar 3 vezes em 1 hora”, “identifique cargas com tempo acima do P95”, “cruze falhas com horário e servidor”), obrigando a monitoração manual.

Otimizando a Consulta com T-SQL

Para ganhar agilidade, nada supera um script bem estruturado que vai direto nas tabelas do catálogo. O script abaixo foi desenhado para trazer o histórico das últimas 100 execuções, já traduzindo os códigos de status e trazendo a mensagem de erro caso o pacote tenha falhado.

Neste script, estamos acessando as views internas do SSISDB. Note que usei um LEFT JOIN com a tabela [operation_messages] filtrando pelo message_type = 120. Isso é fundamental, pois em uma execução bem-sucedida, não teremos mensagens de erro, e não queremos que o registro suma do nosso relatório.

Se você quiser uma versão do script que retorne apenas a última linha por execução, pode utilizar esse script abaixo:

Por que usar Script em vez da Interface?

Característica Interface SSMS Script T-SQL
Velocidade Baixa (carregamento de interface gráfica) Alta (execução direta no engine)
Customização Limitada aos filtros fixos Total (filtros por data, projeto, erro)
Automação Impossível Pode ser usado em Dashboards (Power BI/Grafana)
Histórico de Erros Precisa navegar em sub-relatórios Já disponível na mesma linha da execução

Monitorar o SSISDB não é apenas sobre ver se rodou. Quando o catálogo cresce muito, as consultas de log podem começar a gerar contenção de IO e locks pesados.

Atenção: Se você notar que as consultas ao SSISDB estão lentas, verifique os Wait Types. É muito comum encontrar LCK_M_S ou PAGEIOLATCH_SH se o job de limpeza estiver rodando simultaneamente com as consultas de log.

Para melhorar a performance de leitura desse script em ambientes críticos:

  • Índices: O SSISDB nativamente não vem com todos os índices ideais para consultas customizadas. Se você faz muito esse tipo de query, considere criar índices nas colunas de data como a start_time.
  • Isolamento: Se for usar esse script em um Dashboard de monitoramento em tempo real, considere utilizar o hint WITH (NOLOCK) para evitar que a leitura dos logs bloqueie a escrita de novos logs pelos pacotes em execução.

Com esse script em mãos, você tem o poder de identificar rapidamente qual pacote falhou, por que falhou e quem foi o responsável pela execução, tudo isso sem depender da lentidão dos relatórios padrões do SSMS.

Espero que tenham gostado dessa dica, um grande abraço e até a próxima!