CORRECTIF : Une erreur de dépassement de capacité arithmétique se produit par intermittence pendant la phase de « Collecter un instantané de sys.dm_exec_query_stats » une fois que vous avez activé les collecteurs de données dans SQL Server 2008

Microsoft distribue les correctifs de Microsoft SQL Server 2008 en tant que fichier téléchargeable. Les correctifs étant cumulatifs, chaque nouvelle version contient tous les correctifs et correctifs de sécurité inclus dans la précédente 2008 de SQL Server version du correctif.

Symptômes

Envisagez le scénario suivant.
  • Vous activez le collecteur de données.
  • Sous une charge de travail intense ou prolongée, lorsque le collecteur de données s’exécute, les opérations de maintenance de base de données sur des bases de données très volumineuses, reconstruction des index, des statistiques, de mise à jour peuvent entraîner l’erreur de dépassement de capacité arithmétique comme suit. Cette erreur de dépassement de capacité arithmétique produit par intermittence lors de la collecte à un instantané de la phase de sys.dm_exec_query_stats.
Message : Code d’erreur SSIS DTS_E_OLEDBERROR. Une erreur OLE DB s’est produite. Code d’erreur : 0x80040E57.
Un enregistrement OLE DB est disponible. Source : « Microsoft SQL Server Native Client 10.0 » Hresult : 0x80040E57 Description : « erreur de dépassement de capacité arithmétique conversion expression en type de données int. ».

Si vous augmentez le niveau de journalisation de collecteurs de données à 2 (par exemple, vous exécutez le « exec sp_syscollector_update_collection_set @collection_set_id = < CollectionSetID >, @logging_level = 2 » instruction), les messages d’erreur suivants sont retournés :
< heure > SEQ - capturer et analyser les statistiques de requête et le plan de requête et le texte, erreur, 6569, DTS_E_OLEDBERROR de Code d’erreur SSIS. Une erreur OLE DB s’est produite. Code d’erreur : 0x80040E57. < nl / > OLE DB un enregistrement n’est disponible. Source : « Microsoft SQL Server Native Client 10.0 » Hresult : 0x80040E57 Description : « erreur de dépassement de capacité arithmétique conversion expression en type de données int. ».,, < heure >, < heure >,, OnError, < heure > de-1071636471, QueryActivityUpload, erreur, Code d’erreur 6569,, SSIS DTS_E_OLEDBERROR. Une erreur OLE DB s’est produite. Code d’erreur : 0x80040E57. < nl / > OLE DB un enregistrement n’est disponible. Source : « Microsoft SQL Server Native Client 10.0 » Hresult : 0x80040E57 Description : « erreur de dépassement de capacité arithmétique conversion expression en type de données int. ».,, < heure >, < heure >,, OnError,-1071636471

< heure > DFT - Créer lot télécharger requêtes intéressantes, erreur, composant 6569,, « ODS - capture instantanée en cours d’obtention de dm_exec_query_stats » (16412) code d’erreur retourné a échoué la phase pre-execute 0xC0202009., < heure >, < heure >,, OnError,-1073450982

< heure > SEQ - capturer et analyser les statistiques de requête et le plan de requête et le texte, erreur, composant 6569,, « ODS - capture instantanée en cours d’obtention de dm_exec_query_stats » (16412) code d’erreur retourné a échoué la phase pre-execute 0xC0202009., < heure >, < heure >,, OnError,-1073450982

< heure >, QueryActivityUpload, erreur, composant 6569,, « ODS - capture instantanée en cours d’obtention de dm_exec_query_stats » (16412) code d’erreur retourné a échoué la phase pre-execute 0xC0202009., < heure >, < heure >,, OnError,-1073450982


Dans ce scénario, l’instruction suivante qui est exécutée par SQL Server provoque l’erreur de dépassement de capacité arithmétique :
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

Par conséquent, si vous exécutez manuellement cette instruction, vous pouvez également recevoir le message d’erreur suivant :
Msg 8115, niveau 16, état 2,

Erreur de dépassement de capacité arithmétique conversion expression en type de données int

Résolution


Le correctif de ce problème a été publié dans les 5 mise à jour Cumulative pour SQL Server 2008 Service Pack 1. Pour plus d’informations sur ce package de mise à jour cumulative, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
975977 Cumulative mise à jour 5 pour SQL Server 2008 Service Pack 1
Remarque Les versions étant cumulatives, chaque nouvelle version du correctif contient tous les correctifs et correctifs de sécurité inclus dans la précédente version du correctif de SQL Server 2008. Microsoft vous recommande l’application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
970365 the SQL Server versions 2008 publiées après SQL Server 2008 Service Pack 1
Les correctifs Microsoft SQL Server 2008 sont créés pour les packs de service spécifiques de SQL Server. Vous devez appliquer un correctif SQL Server 2008 Service Pack 1 dans une installation de SQL Server 2008 Service Pack 1. Par défaut, tout correctif qui est fourni dans un service pack de SQL Server est inclus dans le prochain service pack de SQL Server.

État

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Références

Pour plus d’informations sur le modèle de service incrémentiel pour SQL Server, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

935897 un modèle de service incrémentiel est disponible auprès de l’équipe SQL Server pour proposer des correctifs pour les problèmes signalés



Pour plus d’informations sur le schéma d’appellation des mises à jour de SQL Server, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

822499 Nouveau schéma d’affectation de noms pour les packages de mise à jour logicielle de Microsoft SQL Server


Pour plus d'informations sur la terminologie de mise à jour logicielle, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
Description 824684 terminologie standard utilisée pour décrire les mises à jour logicielles de Microsoft
Propriétés

ID d'article : 975915 - Dernière mise à jour : 13 janv. 2017 - Révision : 1

Commentaires