REVISIÓN: Se produce un error de desbordamiento aritmético intermitentemente durante la fase de "Recopilar una instantánea de sys.dm_exec_query_stats" después de habilitar al recopilador de datos de SQL Server 2008

Microsoft distribuye correcciones de Microsoft SQL Server 2008 como un archivo descargable. Como las revisiones son acumulativas, cada versión nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008.

Síntomas

Considere el siguiente escenario.
  • Habilite al recopilador de datos.
  • Bajo una carga de trabajo pesado o prolongado, cuando se ejecuta el recolector de datos, actividad de mantenimiento de base de datos en bases de datos muy grandes, como reconstruir índices y actualización de las estadísticas, puede producir el error de desbordamiento aritmético como sigue. Este error de desbordamiento aritmético produce intermitentemente durante la recogida, una instantánea de sys.dm_exec_query_stats fase.
Mensaje: Código de Error SSIS DTS_E_OLEDBERROR. Se ha producido un error de OLE DB. Código de error: 0x80040E57.
Un registro de OLE DB está disponible. Fuente: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E57 Descripción: "error de desbordamiento aritmético convertir expresión a tipo de datos int.".

Si aumenta el nivel de registro de recopilador de datos a 2 (por ejemplo, ejecutar el "exec sp_syscollector_update_collection_set @collection_set_id = < CollectionSetID >, @logging_level = 2" instrucción), se devuelven los mensajes de error siguientes:
< fecha hora >, SEQ - capturar y analizar las estadísticas de la consulta y el plan de consulta y texto, Error, 6569,,, DTS_E_OLEDBERROR de código de Error SSIS. Se ha producido un error de OLE DB. Código de error: 0x80040E57. < nl / > OLE DB un registro está disponible. Origen: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E57 Descripción: "error de desbordamiento aritmético convertir expresión a tipo de datos int.".,, < fecha hora >, < fecha hora >,, OnError,-1071636471 < fecha hora >, QueryActivityUpload, Error, código de Error SSIS 6569,,, DTS_E_OLEDBERROR. Se ha producido un error de OLE DB. Código de error: 0x80040E57. < nl / > OLE DB un registro está disponible. Fuente: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E57 Descripción: "error de desbordamiento aritmético convertir expresión a tipo de datos int.".,, < fecha hora >, < fecha hora >,, OnError,-1071636471

< fecha hora >, DFT - Crear lote de cargar consultas interesantes, Error, 6569,,, componente "ODS - obtener la instantánea actual de dm_exec_query_stats" código de error que ha fallado la fase se y devuelto (16412) 0xC0202009.,, < fecha hora >, < fecha hora >,, OnError,-1073450982

< fecha hora >, SEQ - capturar y analizar las estadísticas de la consulta y el plan de consulta y texto, Error, 6569,,, componente "ODS - obtener la instantánea actual de dm_exec_query_stats" código de error que ha fallado la fase se y devuelto (16412) 0xC0202009.,, < fecha hora,, > < hora >,, OnError,-1073450982

< fecha hora >, QueryActivityUpload, Error, 6569,,, componente "ODS - obtener la instantánea actual de dm_exec_query_stats" código de error que ha fallado la fase se y devuelto (16412) 0xC0202009.,, < fecha hora >, < fecha hora >,, OnError,-1073450982


En este escenario, la siguiente instrucción que se ejecuta SQL Server provoca el error de desbordamiento aritmético:
SET NOCOUNT ONDECLARE @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

Por lo tanto, si ejecuta esta instrucción manualmente, también puede recibir el siguiente mensaje de error:
Msj 8115, nivel 16, estado 2,

Error de desbordamiento aritmético convertir expresión a tipo de datos int

Solución


La corrección para este problema se publicó primero en 5 de actualización acumulativa para SQL Server 2008 Service Pack 1. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
Paquete 5 de actualización de 975977 acumulativa para SQL Server 2008 Service Pack 1
Nota: Como las compilaciones son acumulativas, cada versión de corrección nueva contiene todas las revisiones y revisión de todas las revisiones de seguridad que se incluyeron con la anterior de SQL Server 2008. Microsoft recomienda que considere la posibilidad de aplicar la versión más reciente de revisión que contenga este hotfix. Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:
970365 the SQL Server 2008 generaciones que se publicaron después del lanzamiento de SQL Server 2008 Service Pack 1
Las revisiones de Microsoft SQL Server 2008 se crean para determinados service Pack de SQL Server. Debe aplicar un hotfix de SQL Server 2008 Service Pack 1 en una instalación de SQL Server 2008 Service Pack 1. De forma predeterminada, cualquier hotfix suministrada en un service pack de SQL Server se incluye en el próximo service pack de SQL Server.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Referencias

Para obtener más información sobre el modelo de servicio Incremental de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

935897 un modelo de servicio Incremental está disponible en el equipo de SQL Server para entregar revisiones para problemas detectados



Para obtener más información acerca del esquema de nomenclatura para las actualizaciones de SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

822499 Nuevo esquema de nomenclatura para los paquetes de actualización de software de Microsoft SQL Server


Para obtener más información acerca de la terminología de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684 descripción de la terminología estándar que se utiliza para describir las actualizaciones de software de Microsoft
Propiedades

Id. de artículo: 975915 - Última revisión: 13 ene. 2017 - Revisión: 1

Comentarios