CORRECÇÃO: Erro excesso aritmético ocorre intermitentemente durante a fase "Recolher um instantâneo de sys.dm_exec_query_stats" depois de activado o recolector de dados do SQL Server 2008

Traduções de Artigos Traduções de Artigos
Artigo: 975915 - Ver produtos para os quais este artigo se aplica.
A Microsoft distribui correcções Microsoft SQL Server 2008 como um ficheiro transferível. Uma vez que as correcções são cumulativas, cada nova edição contém todas as correcções e todas as correcções de segurança que foram incluídas no SQL Server 2008 anterior corrigir lançamento.
Expandir tudo | Reduzir tudo

Sintomas

Considere o seguinte cenário.
  • Activa o recolector de dados.
  • Numa carga de trabalho grossa ou durante períodos prolongada, quando é executado o recolector de dados, actividade de manutenção da base de dados no muito grandes bases de dados, tais como reconstruir índices e actualizar estatísticas, pode conduzir ao erro de excesso aritmético da seguinte forma. Este erro de excesso aritmético ocorre intermitentemente durante a recolher um instantâneo da fase de sys.dm_exec_query_stats.
Mensagem: Código de erro SSIS DTS_E_OLEDBERROR. Ocorreu um erro de OLE DB. Código de erro: 0x80040E57.
Um registo de OLE DB está disponível. Origem: "Microsoft SQL Server Native Client 10.0" HRESULT: 0x80040E57 Descrição: "erro de excesso aritmético converter expressão Int. de tipo de dados".

Se aumentar o nível de registo de Recolectores de dados para 2 (por exemplo, execute o "exec sp_syscollector_update_collection_set @ collection_set_id = <collectionsetid>, @ logging_level = instrução 2"), as seguintes mensagens de erro são devolvidas:
<Data Hora > SEQ - capturar e analisar as estatísticas de consulta e plano de consulta e texto, erro, 6569,,,, SSIS erro código DTS_E_OLEDBERROR. Ocorreu um erro de OLE DB. Código de erro: 0x80040E57. <nl/> OLE DB um registo está disponível. Origem: "Microsoft SQL Server Native Client 10.0" HRESULT: 0x80040E57 Descrição: "erro de excesso aritmético converter expressão Int. de tipo de dados".,, < Data Hora >,, < Data Hora >,,,, AoOcorrerErro,-1071636471 < Data Hora > QueryActivityUpload, erro, 6569,,,, SSIS erro código DTS_E_OLEDBERROR. Ocorreu um erro de OLE DB. Código de erro: 0x80040E57. <nl/> OLE DB um registo está disponível. Origem: "Microsoft SQL Server Native Client 10.0" HRESULT: 0x80040E57 Descrição: "erro de excesso aritmético converter expressão Int. de tipo de dados".,, < Data Hora >,, < Data Hora >,,,, AoOcorrerErro,-1071636471

<Data Hora > DFT - criar interessantes consultas enviar lotes, erro, 6569,,,, componente "ODS - GET instantâneo actual de dm_exec_query_stats" código de erro devolvidos e falhou a fase de pre-execute (16412) 0xC0202009.,, < Data Hora >,, < Data Hora >,,,, AoOcorrerErro,-1073450982

<Data Hora > SEQ - capturar e analisar as estatísticas de consulta e consulta plano e texto, erro, 6569,,,, componente "ODS - GET instantâneo actual de dm_exec_query_stats" código de erro devolvidos e falhou a fase de pre-execute (16412) 0xC0202009.,, < Data Hora >,, < Data Hora >,,,, AoOcorrerErro,-1073450982

<Data Hora > QueryActivityUpload, erro, 6569,,,, componente "ODS - GET instantâneo actual de dm_exec_query_stats" código de erro devolvidos e falhou a fase de pre-execute (16412) 0xC0202009.,, < Data Hora >,, < Data Hora >,,,, AoOcorrerErro,-1073450982


Neste cenário, a seguinte instrução é executada pelo SQL Server faz com que o erro de excesso aritmético: datetime
SET NOCOUNT ON
DECLARE @p1 datetime
SET @p1 = GETDATE()

SELECT 
    [sql_handle],
    statement_start_offset,
    statement_end_offset,
    -- Use ISNULL here and in other columns to handle in-progress queries that are not yet in sys.dm_exec_query_stats.  
    -- These values only come from sys.dm_exec_query_stats. If the plan does not show up in sys.dm_exec_query_stats 
    -- (first execution of a still-in-progress query, visible in sys.dm_exec_requests), these values will be NULL. 
    MAX (plan_generation_num) AS plan_generation_num,
    plan_handle,
    MIN (creation_time) AS creation_time, 
    MAX (last_execution_time) AS last_execution_time,
    SUM (execution_count) AS execution_count,
    SUM (total_worker_time) AS total_worker_time,
    MIN (min_worker_time) AS min_worker_time,           -- NULLable
    MAX (max_worker_time) AS max_worker_time,
    SUM (total_physical_reads) AS total_physical_reads,
    MIN (min_physical_reads) AS min_physical_reads,     -- NULLable
    MAX (max_physical_reads) AS max_physical_reads,
    SUM (total_logical_writes) AS total_logical_writes,
    MIN (min_logical_writes) AS min_logical_writes,     -- NULLable
    MAX (max_logical_writes) AS max_logical_writes,
    SUM (total_logical_reads) AS total_logical_reads,
    MIN (min_logical_reads) AS min_logical_reads,       -- NULLable
    MAX (max_logical_reads) AS max_logical_reads,
    SUM (total_clr_time) AS total_clr_time,
    MIN (min_clr_time) AS min_clr_time,                 -- NULLable
    MAX (max_clr_time) AS max_clr_time,
    SUM (total_elapsed_time) AS total_elapsed_time,
    MIN (min_elapsed_time) AS min_elapsed_time,         -- NULLable
    MAX (max_elapsed_time) AS max_elapsed_time,
    @p1 AS collection_time
FROM
(
    SELECT  
        [sql_handle],
        statement_start_offset,
        statement_end_offset,
        plan_generation_num,
        plan_handle,
        creation_time,
        last_execution_time,
        execution_count,
        total_worker_time,
        min_worker_time,
        max_worker_time,
        total_physical_reads,
        min_physical_reads,
        max_physical_reads,
        total_logical_writes,
        min_logical_writes,
        max_logical_writes,
        total_logical_reads,
        min_logical_reads,
        max_logical_reads,
        total_clr_time,
        min_clr_time,
        max_clr_time,
        total_elapsed_time,
        min_elapsed_time,
        max_elapsed_time 
    FROM sys.dm_exec_query_stats AS q
    -- Temporary workaround for VSTS #91422.  This should be removed if/when sys.dm_exec_query_stats reflects in-progress queries. 
    UNION ALL 
    SELECT 
        r.[sql_handle],
        r.statement_start_offset,
        r.statement_end_offset,
        ISNULL (qs.plan_generation_num, 0) AS plan_generation_num,
        r.plan_handle,
        ISNULL (qs.creation_time, r.start_time) AS creation_time,
        r.start_time AS last_execution_time,
        1 AS execution_count,
        -- dm_exec_requests shows CPU time as ms, while dm_exec_query_stats 
        -- uses microseconds.  Convert ms to us. 
        r.cpu_time * 1000 AS total_worker_time,
        qs.min_worker_time,     -- min should not be influenced by in-progress queries
        r.cpu_time * 1000 AS max_worker_time,
        r.reads AS total_physical_reads,
        qs.min_physical_reads,  -- min should not be influenced by in-progress queries
        r.reads AS max_physical_reads,
        r.writes AS total_logical_writes,
        qs.min_logical_writes,  -- min should not be influenced by in-progress queries
        r.writes AS max_logical_writes,
        r.logical_reads AS total_logical_reads,
        qs.min_logical_reads,   -- min should not be influenced by in-progress queries
        r.logical_reads AS max_logical_reads,
        qs.total_clr_time,      -- CLR time is not available in dm_exec_requests
        qs.min_clr_time,        -- CLR time is not available in dm_exec_requests
        qs.max_clr_time,        -- CLR time is not available in dm_exec_requests
        -- dm_exec_requests shows elapsed time as ms, while dm_exec_query_stats 
        -- uses microseconds.  Convert ms to us. 
        r.total_elapsed_time * 1000 AS total_elapsed_time,
        qs.min_elapsed_time,    -- min should not be influenced by in-progress queries
        r.total_elapsed_time * 1000 AS max_elapsed_time
    FROM sys.dm_exec_requests AS r 
    LEFT OUTER JOIN sys.dm_exec_query_stats AS qs ON r.plan_handle = qs.plan_handle AND r.statement_start_offset = qs.statement_start_offset 
        AND r.statement_end_offset = qs.statement_end_offset 
    WHERE r.sql_handle IS NOT NULL 
) AS query_stats 
OUTER APPLY sys.dm_exec_sql_text (sql_handle) AS sql
GROUP BY [sql_handle], plan_handle, statement_start_offset, statement_end_offset 
ORDER BY [sql_handle], plan_handle, statement_start_offset, statement_end_offset
assim, se executar manualmente esta declaração, poderá também receber a seguinte mensagem de erro:
Msg 8115, 16, 2, estado de nível
Erro de excesso aritmético converter expressão int de tipo de dados

Resolução

A correcção para este problema foi primeiro disponibilizada em actualização cumulativa 5 para o SQL Server 2008 Service Pack 1. Para obter mais informações sobre este pacote de actualização cumulativa, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
975977Pacote de actualização cumulativa 5 para o SQL Server 2008 Service Pack 1
Nota Uma vez que as compilações são cumulativas, cada nova versão de correcção contém todas as correcções e todas as correcções de segurança que foram incluídas no SQL Server 2008 anterior corrigir lançamento. A Microsoft recomenda que considerar a aplicação a mais recente versão de correcção que contenha esta correcção. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
970365Cria o SQL Server 2008 que foram disponibilizadas após o lançamento do SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 correcções são criadas para service packs do SQL Server específicos. Tem de aplicar uma correcção do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por predefinição, qualquer correcção fornecida num service pack SQL Server está incluída no próximo service pack do SQL Server.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".

Referências

Para obter mais informações sobre o modelo de assistência incremental para o SQL Server, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
935897Um modelo de assistência incremental está disponível a partir da equipa do SQL Server para proporcionar correcções para problemas comunicados


Para obter mais informações sobre o esquema de atribuição de nomes para as actualizações do SQL Server, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
822499Novo esquema de atribuição de nomes para pacotes de actualização de software Microsoft SQL Server


Para obter mais informações sobre a terminologia de actualizações de software, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Propriedades

Artigo: 975915 - Última revisão: 16 de novembro de 2009 - Revisão: 1.1
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Workgroup
Palavras-chave: 
kbmt kbexpertiseadvanced kbsurveynew kbqfe kbfix KB975915 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 975915

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com