Solucionando problemas do Coletor de Dados

Este tópico aborda as seguintes categorias de solução de problemas:

  • Condições de erro. Esta categoria abrange modelo de objeto e erros em tempo de execução.

  • Problemas de desempenho. Esta categoria abrange cenários de desempenho gerais e específicos.

  • Paradas do sistema. Esta categoria abrange paradas de subcomponentes durante a coleta de dados.

Condições de erro

Os erros podem ser gerados no modelo de objeto ou em tempo de execução.

Erros de modelo de objeto

O modelo de objeto de coletor de dados é uma API gerenciada que fornece uma maneira programática de gerenciar as propriedades do coletor de dados e dos conjuntos de coleta de dados. O modelo de objeto é um wrapper fino que envolve um conjunto de procedimentos armazenados e exibições que fornecem um mecanismo de configuração para o coletor de dados. Para obter mais informações, consulte Programação do coletor de dados.

Os erros do modelo de objeto podem vir de um dos seguintes componentes do modelo de objeto:

  • Um erro Transact-SQL é gerado por um procedimento armazenado ou código Transact-SQL chamado a partir de um dos procedimentos armazenados do coletor de dados.

  • Um erro Transact-SQL é gerado diretamente por um procedimento armazenado de coletor de dados.

  • Uma exceção gerenciada é gerada diretamente do modelo de objeto.

A tabela a seguir descreve os erros que podem ser gerados no modelo de objeto.

Mensagem de erro

Número do erro

Descrição

Não é possível atualizar name, target, proxy_id ou collection_mode do conjunto de coleta ativo '%s'. Pare o conjunto de coleta e tente atualizá-lo novamente.

14669

Tentativa de atualizar um conjunto de coleta ativo. Um conjunto de coleta deve ser parado antes de qualquer atualização desse tipo. Somente a agenda de carregamento pode ser alterada enquanto o conjunto de coleta estiver ativo.

Não foi possível excluir o conjunto de coleta ativo '%s'. Pare o conjunto de coleta e tente excluí-lo novamente.

14670

Tentativa de excluir um conjunto de coleta que está sendo executado.

Não é possível atualizar o nome ou os parâmetros do item de coleta '% s' no conjunto de coleta ativo '%s". Pare o conjunto de coleta e tente atualizar o item novamente.

14671

Tentativa de atualizar um item de coleta de um conjunto de coleta que está sendo executado.

Não é possível excluir o item de coleta '% s' no conjunto de coleta ativo '%s.' Pare o conjunto de coleta e tente excluir o item novamente.

14672

Tentativa de excluir um item de coleta em um conjunto de coleta que está sendo executado.

Não é possível excluir o tipo de coletor '%s'. Exclua todos os itens de coleta associados a esse tipo de coletor e tente excluí-lo novamente.

14673

Tentativa de excluir um tipo de coletor que tem itens de coleta associados a ele.

Não é possível carregar dados do conjunto de coleta inativo '%s'. Inicie o conjunto de coleta e tente carregar os dados novamente.

14674

Tentativa de carregar dados coletados por um conjunto de coleta que não está sendo executado.

Não é possível atualizar, target, proxy_id, logging_level ou collection_mode nem adicionar item ao conjunto de coleta ativo '%s'. Pare o conjunto de coleta e tente atualizá-lo novamente.

14675

Tentativa de atualizar um conjunto de coleta que está sendo executado.

O usuário não tem permissão para alterar '%s'. Ele deve ser um membro da função de coletor de dados '%s'.

14676

O usuário tentou atualizar uma propriedade que só pode ser alterada por uma função de coletor de dados específica.

O usuário não tem permissão para executar essa operação. Ele deve ser um membro da função de coletor de dados '%s'.

14677

O usuário tentou executar uma operação sem fazer parte da função de coletor de dados necessária.

O rastreamento do SQL Server com id %d foi interrompido e fechado por usuário externo. O coletor do Rastreamento do SQL Server tentará recriar o rastreamento.

14678

Um rastreamento criado e utilizado pelo coletor de dados foi parado e fechado fora do tempo de execução do coletor.

O %s (%s) especificado é inválido neste data warehouse.

14679

Um parâmetro passado em um dos procedimentos armazenados no data warehouse de gerenciamento tem um valor que não corresponde a outras entradas do warehouse.

Esta versão do instmdw.sql deve ser executada apenas em um servidor que esteja executando o SQL Server 2005 ou posterior.

14680

Tentativa de instalar um data warehouse de gerenciamento em um servidor que está executando o SQL Server 2000 ou anterior.

Não é possível executar esse procedimento quando o coletor está desabilitado. Habilite o coletor e tente novamente.

14681

Tentativa de executar uma operação que está em conflito com o estado do coletor.

O estado do conjunto de coleta foi alterado, mas ele não será iniciado ou interrompido até o coletor estar habilitado.

14682

Tentativa de iniciar ou parar o conjunto de coleta quando o coletor não está habilitado.

Um conjunto de coleta no modo instantâneo ou contínuo requer uma agenda.

14683

Criar ou atualizar um conjunto de coleta no modo instantâneo ou contínuo sem fornecer uma agenda.

Detectado o erro: %d, Nível: %d, Estado: %d, no Procedimento: %s, Linha: %d, com a Mensagem: %s

14684

Ocorreu um erro genérico no componente coletor de dados; o erro foi detectado em um bloco catch e foi lançado novamente.

Operação inválida. O status do conjunto de coleta com a id =%d é atualmente "não está em execução".

14685

Uma chamada para sp_syscollector_create_set_queue_and_service para um conjunto com um status de is_running igual a 0.

Os parâmetros MDWInstance e MDWDatabase do armazenamento de configuração não podem ser nulos.

14686

Uma cadeia de conexão com o data warehouse de gerenciamento é nula para o parâmetro MDWInstance ou MDWDatabase.

Valor inválido (%d) do parâmetro @cache_window. Os valores permitidos são: -1 (armazenar em cache todos os dados de upload de falhas de upload anteriores), 0 (não armazenar em dados de upload), N (armazenar em cache dados de N falhas de upload anteriores, onde N >= 1)

14687

Tentativa de definir o valor do parâmetro CacheWindow do armazenamento de configuração do coletor como um valor inferior a -1.

Um conjunto de coleta não pode ser iniciado quando o SQL Server Agent está parado. Inicie o SQL Server Agent.

14688

Tentativa de iniciar um conjunto de coleta quando o SQL Server Agent não está habilitado.

Um conjunto de coleta não poderá ser iniciado se o data warehouse de gerenciamento não estiver configurado. Execute o script instmdw.sql para criar e configurar o data warehouse de gerenciamento.

14689

Tentativa de iniciar um conjunto de coleta quando o data warehouse de gerenciamento não está configurado.

Não é possível executar esse procedimento quando o coletor está habilitado. Desabilite o coletor e tente novamente.

14690

Tentativa de executar uma operação que está em conflito com o estado do coletor.

O status do coletor não pode ser nulo. Isso pode indicar um dano interno nos dados de configuração do coletor.

14691

Uma chamada para sp_syscollector_verify_collector_state encontrou o parâmetro CollectorEnabled com um valor nulo. Isso pode indicar um dano interno nos dados de configuração do coletor.

Erros em tempo de execução

Os erros em tempo de execução podem ocorrer quando um pacote de coleta ou um pacote de carregamento é executado e encontra um problema. Os erros podem vir de um dos seguintes componentes:

  • O fluxo de dados de um pacote do SQL Server 2008 Integration Services (SSIS). Esses erros podem ser o resultado de uma conversão de dados ou um truncamento de dados com falha. O coletor de dados registra o número de linhas que foram afetadas pelo erro e registra esse número no log, nas tabelas de log do coletor de dados.

  • O fluxo de controle de um pacote do SSIS. Esses erros são registrados nas tabelas de log do SSIS no banco de dados msdb (msdb.dbo.sysssislog) e são transferidos para as tabelas de log do coletor de dados.

  • O componente de tempo de execução do coletor de dados (dcexec.exe). Esses erros são registrados diretamente nas tabelas de log do coletor de dados.

Para obter mais informações, consulte Log de coletor de dados.

Recomendamos um dos métodos a seguir para obter informações de status sobre erros em tempo de execução.

Procedimentos armazenados e exibições de Transact-SQL

Para exibir o status de todos os conjuntos de coleta ou pacotes atualmente em execução e concluídos, execute a seguinte consulta:

use msdb
select * from syscollector_execution_log_full

A consulta anterior retorna o conjunto de resultados a seguir.

Nome da coluna

Descrição

log_id

Um ID exclusivo para cada execução de conjunto de coleta. Usado para unir essa exibição a outros logs detalhados.

parent_log_id

A identificação do pacote pai ou conjunto de coleta. É NULL para o conjunto de coleta. As identificações são encadeados em uma relação pai-filho para que seja fácil identificar qual conjunto de coleta iniciou qual pacote. Além disso, essa exibição agrupa as entradas de log pela vinculação pai-filho e recua os nomes dos pacotes de forma que o encadeamento de chamada seja claramente visível.

name

O nome do conjunto de coleta ou pacote que essa entrada de log representa.

collection_mode

Atividade do conjunto de coleta quando a entrada foi feita, coleção ou carregamento.

start_time

Quando o conjunto de coleta ou pacote foi iniciado.

last_iteration_time

Para pacotes de execução contínua, a última vez que o pacote capturou um instantâneo.

finish_time

Para pacotes e conjuntos de coleta concluídos, a hora em que a execução foi concluída.

duration

O tempo, em milissegundos, de execução do pacote ou conjunto de coleta.

operator

O operador que iniciou o conjunto de coleta ou pacote.

status

O status do conjunto de coleta ou pacote. Será:

  • 0 - em execução

  • 1 - concluído

  • 2 - falha

failure_task

Se houve falha no conjunto de coleta ou pacote, o nome da tarefa do pacote do SSIS que causou a falha.

package_execution_id

Um link para a tabela de log do SSIS.

collection_set_id

Um link para a tabela de configuração do coletor de dados.

ObservaçãoObservação
Você pode usar collection_set_id como um filtro para focalizar um conjunto de coleta específico no log.

Para obter mais informações, consulte syscollector_execution_log_full (Transact-SQL).

Você pode obter informações adicionais sobre o conjunto de coleta e execução de pacote executando uma das funções fornecidas pelo coletor de dados.

A função a seguir retorna estatísticas detalhadas sobre o conjunto de coleta ou pacote, inclusive o número das linhas de erro registradas pelo pacote.

select * from fn_syscollector_get_execution_stats(@log_id)

A função seguinte retorna uma parte do log do SSIS (sysdtslog90) que corresponde ao package_execution_id de um pacote. Se tiver ocorrido falha no pacote, esta será a melhor maneira de descobrir qual foi o erro raiz.

select * from fn_syscollector_get_execution_details(@log_id)

Relatórios de status do coletor de dados

É possível obter as mesmas informações retornada pelas consultas Transact-SQL anteriores ao exibir os logs fornecidos no SQL Server Management Studio. Para obter mais informações, consulte Como exibir logs de conjuntos de coleta.

Problemas de desempenho

Há três fontes principais de dados que você pode usar por revisar e diagnosticar o desempenho.

Em primeiro lugar, as tabelas de log descritas na seção anterior também fornecem informações úteis que podem ser usadas para abordar problemas de desempenho.

A função fn_syscollector_get_execution_stats retorna as informações a seguir.

Nome da coluna

Descrição

avg_row_count_in

Número médio de linhas que inseriram as tarefas de fluxo de dados do pacote.

min_row_count_in

Número mínimo de linhas que inseriram tarefas de fluxo de dados do pacote.

max_row_count_in

Número máximo de linhas que inseriram as tarefas de fluxo de dados do pacote.

avg_row_count_out

Número médio de linhas que fizeram a saída de tarefas de fluxo de dados do pacote.

min_row_count_out

Número mínimo de linhas que saíram das tarefas de fluxo de dados do pacote.

max_row_count_out

Número máximo de linhas que saíram das tarefas de fluxo de dados do pacote.

avg_duration

Tempo médio (em milissegundos) gasto no componente de fluxo de dados do pacote.

min_duration

Tempo mínimo (em milissegundos) gasto no componente de fluxo de dados do pacote.

max_duration

Tempo máximo (em milissegundos) gasto no componente de fluxo de dados do pacote.

Uma segunda fonte de dados de desempenho é a tabela syscollector_execution_log_full, que fornece informações sobre o tempo durante o qual um conjunto de coleta foi ou está sendo executado.

Finalmente, podem ser usados contadores de desempenho para ajudar a avaliar problemas de desempenho. Em particular, os contadores de processo padrão das instâncias de processo do coletor de dados (dcexec.exe) fornecem bons indicadores da quantidade de recursos do sistema utilizada pelo componente de tempo de execução do coletor de dados.

Cenários de problemas de desempenho

Dois cenários têm maior probabilidade de ocorrer como problemas de desempenho ao executar o coletor de dados:

  • O coletor de dados está consumindo muitos recursos do sistema.

  • O coletor de dados não pode acompanhar o ritmo da carga de coleta.

Consumo excessivo de recursos do sistema

Se uma análise de contadores de desempenho do processo indicar que os processos dcexec.exe estão usando muitos recursos do sistema, será necessário fazer a investigação a seguir.

Em primeiro lugar, determine se um único conjunto de coleta está usando a maioria dos recursos.

  • Para identificar o conjunto de coleta, mapeie a identificação do processo para a identificação do conjunto de coleta em syscollector_execution_log_full e, em seguida, localize o conjunto de coleta na tabela syscollector_collection_sets.

  • Determine o que o conjunto de coleta está coletando. Use a seguinte consulta para listar todos os itens de coleta agrupados no conjunto:

    select * from syscollector_collection_set_items where collection_set_id = <id>
    
  • Usando as informações da consulta anterior, considere as seguintes questões:

    • Há muitos itens de coleta?

    • Um único item de coleta está causando a maioria dos problemas?

    • Há muitos dados sendo coletados?

    • Se a resposta for sim para qualquer uma dessas perguntas, considere a modificação da coleta ou de itens de coleta para reduzir o volume de dados coletados. Isso reduzirá o consumo de recursos.

Em segundo lugar, determine se o número de conjuntos de coleta ativos está causando o problema.

  • Descubra quantos conjuntos de coleta estão definidos no sistema usando a seguinte consulta:

    select count(*) from syscollector_collection_sets
    
  • Descubra quantos conjuntos de coleta estão sendo executados no momento usando a seguinte consulta:

    select count(*) from syscollector_execution_log_full where parent_log_id is null and status = 1
    
  • Se o problema de desempenho for intermitente, veja se ele mapeia para qualquer atividade de coleta ou carregamento. Se as agendas forem todas iguais, isso poderá estar causando o problema. Ajustar uma agenda de coleta ou carregamento pode ser uma solução simples.

Não é possível acompanhar o ritmo de carregamento

Esta condição só ocorre com os conjuntos de coleta executados continuamente. Se a freqüência de coleta for alta e houver um grande volume de dados a serem coletados, talvez o pacote de coleta não consiga processar os dados no tempo alocado para iteração única de instantâneo. É possível detectar essa condição comparando as colunas avg_duration e max_duration na tabela de log com a freqüência de coleta definida para um item de coleta específico.

Se o valor de max_duration for maior do que o valor da freqüência, talvez o pacote de coleta nem sempre consiga acompanhar a freqüência configurada. Se o valor de avg_duration for maior do que a freqüência, o pacote de coleta terá um problema consistente. Neste último caso, a freqüência deve ser reduzida ou o item de coleta deve ser modificado para limitar a quantidade de dados coletada.

Paradas do sistema

O sistema pode parar se um pacote executado como parte do coletor de dados parar de processar, mas não sair e ficar nesse estado. A maioria das paradas de sistema pode ser resolvida com a parada e reinicialização de um conjunto de coleta.

É importante distinguir uma parada verdadeira do comportamento pretendido.

  • Um pacote de coleta executado continuamente gasta a maior parte do tempo em estado de espera, sendo ativado periodicamente para coletar um instantâneo de dados. Depois de coletar os dados, o pacote volta ao estado de espera. Esse estado pode parecer uma parada do sistema, mas não é. Para verificar, consulte a tabela syscollector_execution_log_full do pacote suspeito. Se last_iteration_time não for posterior à hora atual, a condição não é uma parada.

  • Um pacote pode ser criado para aguardar um evento que irá disparar uma ação de coleta. Nesse caso, o pacote aguardará esse evento. Isso não é uma parada.

Para verificar se há uma parada do sistema relacionada ao coletor de dados, execute as seguintes verificações:

  • Em primeiro lugar, identifique o ID de processo dcexec.exe correspondente ao conjunto de coleta que você deseja investigar.

  • Em seguida, verifique se o processo está sendo executado e se está usando recursos. Em geral, qualquer processo parado usa 0% de CPU e não aloca mais memória. O processo também pode usar uma alta porcentagem da CPU. Nesse caso pode estar havendo um looping e não a saída de memória.

  • Finalmente, verifique a tabela de log do processo para ver quando foi a última atualização. Se a hora de atualização for superior à freqüência do item de coleta, o processo pode estar parado.

Há várias razões pelas quais um processo de coletor de dados pode parar. Estas são as mais comuns:

  • Um pacote aguarda a próxima iteração a ser sinalizada, mas isto não acontece.

  • Um pacote aguarda um bloqueio compartilhado mantido por outro pacote, mas o bloqueio não é liberado.

  • Durante a execução do pacote, ocorreu um erro que não foi tratado adequadamente e o fluxo de controle foi interrompido, mas o pacote não falhou completamente.

Em qualquer um dos casos anteriores existem no log entradas específicas relacionadas à parada do sistema. Verifique se existem mensagens indicando a causa. No caso de uma parada do sistema, crie um despejo do processo dcexec.exe e investigue melhor.