Oprava: Chyba aritmetického přetečení dochází nepravidelně během fáze "Shromažďovat snímek sys.dm_exec_query_stats" po povolení shromažďování dat v SQL Server 2008

Společnost Microsoft distribuuje opravy Microsoft SQL Server 2008 jako jednoho souboru ke stažení. Protože jsou kumulativní opravy, každá nová verze tedy obsahuje všechny opravy hotfix a opravit všechny opravy zabezpečení, které byly součástí předchozích SQL Server 2008 release.

Příznaky

Zvažte následující scénář.
  • Povolit shromažďování dat.
  • Pod těžkým nebo dlouhodobé zátěže při spuštění sady kolekcí dat, činnost údržby databáze na velmi rozsáhlých databází, jako je například opětovné sestavení indexů a aktualizaci statistiky, může vést k přetečení aritmetické chyby takto. Aritmetické přetečení k této chybě dochází nepravidelně během shromáždit snímek fáze sys.dm_exec_query_stats.
Zpráva: SSIS kód chyby DTS_E_OLEDBERROR. Došlo k chybě OLE DB. Kód chyby: 0x80040E57.
Záznam technologie OLE DB je k dispozici. Zdroj: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E57 Popis: "Chyba přetečení aritmetické převod výraz na datový typ int.".

Pokud zvýšíte úroveň protokolování kolekcí dat 2 (například spustit "exec sp_syscollector_update_collection_set @collection_set_id = < CollectionSetID > @logging_level = 2" prohlášení), budou vráceny následující chybové zprávy:
< datum a čas > SEQ - zachytit a analyzovat statistiku dotazu a plán dotazů a text chyby, 6569,, SSIS chyba kód DTS_E_OLEDBERROR. Došlo k chybě OLE DB. Kód chyby: 0x80040E57. < nl / > záznam technologie OLE DB je k dispozici. Zdroj: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E57 Popis: "Chyba přetečení aritmetické převod výraz na datový typ int.".,, < datum a čas >, < datum a čas >,, PřiChybě < datum a čas >-1071636471, QueryActivityUpload, chyba, 6569,, kód chyby SSIS DTS_E_OLEDBERROR. Došlo k chybě OLE DB. Kód chyby: 0x80040E57. < nl / > záznam technologie OLE DB je k dispozici. Zdroj: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E57 Popis: "Chyba přetečení aritmetické převod výraz na datový typ int.".,, < datum a čas >, < datum a čas >,, PřiChybě,-1071636471

< datum a čas > DFT - vytvořit zajímavé dotazy odeslat dávkové, chyba, 6569,, součást "OSD - získat aktuální snímek dm_exec_query_stats" pre-execute fáze se nezdařilo a vrátilo chybový kód (16412) 0xC0202009.,, < datum a čas >,, < datum a čas >,, PřiChybě,-1073450982

< datum a čas > SEQ - zachytit a analyzovat statistiku dotazu a plán dotazů a text chyby, 6569,, součást "OSD - získat aktuální snímek dm_exec_query_stats" pre-execute fáze se nezdařilo a vrátilo chybový kód (16412) 0xC0202009.,, < datum a čas >,, < datum a čas >,, PřiChybě,-1073450982

< datum a čas > QueryActivityUpload, chyba, 6569,, součást "OSD - získat aktuální snímek dm_exec_query_stats" pre-execute fáze se nezdařilo a vrátilo chybový kód (16412) 0xC0202009.,, < datum a čas >,, < datum a čas >,, PřiChybě,-1073450982


V tomto scénáři následující příkaz, který je spuštěn SQL Server způsobuje chyba aritmetického přetečení:
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

Proto pokud tento příkaz spustit ručně, můžete také obdržet následující chybová zpráva:
Msg 8115, úroveň 16, stav 2,

Chyba přetečení aritmetické převod výraz na datový typ int

Řešení


Oprava tohoto problému byla vydána nejprve v kumulativní aktualizaci 5 pro SQL Server 2008 Service Pack 1. Další informace o tomto balíčku kumulativní aktualizace klepněte na následující číslo článku databáze Microsoft Knowledge Base:
975977 kumulativní aktualizace 5 pro SQL Server 2008 Service Pack 1
Poznámka: Vzhledem k tomu, sestavení jsou kumulativní, každá nová verze oprava obsahuje všechny opravy hotfix a opravit všechny opravy zabezpečení, které byly součástí předchozích SQL Server 2008 release. Společnost Microsoft doporučuje zvážit použití nejnovější vydání oprava, která obsahuje tuto opravu hotfix. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
970365 SQL Server 2008 sestavení, které byly vydány po vydání SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 opravy hotfix jsou vytvořeny pro konkrétní aktualizace service Pack pro SQL Server. Opravy hotfix serveru SQL Server 2008 Service Pack 1 musí použít k instalaci aplikace SQL Server 2008 Service Pack 1. Ve výchozím žádné opravy hotfix, která je poskytována v aktualizace service pack serveru SQL Server je součástí další aktualizaci service pack pro SQL Server.

Stav

Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".

Odkazy

Další informace o přírůstkové Model servis pro SQL Server získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

935897 dílčí Model obsluhy je k dispozici z týmu SQL Server doručit opravy hotfix pro nahlášené potíže



Další informace o schéma názvů pro aktualizace serveru SQL Server klepněte na následující číslo článku databáze Microsoft Knowledge Base:

822499 Nové schéma přidělování názvů balíčkům aktualizací softwaru Microsoft SQL Server pro


Pro další informace o terminologii používané v aktualizacích softwaru, klepněte na následující číslo článku k zobrazení článku v databázi Microsoft Knowledge Base:
824684 Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft
Vlastnosti

ID článku: 975915 - Poslední kontrola: 13. 1. 2017 - Revize: 1

Váš názor