FIX: 算术溢出错误间歇性地阶段出现在"收集的 sys.dm_exec_query_stats 快照"后启用 SQL Server 2008 中的数据收集器

文章翻译 文章翻译
文章编号: 975915 - 查看本文应用于的产品
Microsoft 分布 Microsoft SQL Server 2008 修复程序作为一个可下载的文件。因为该修补程序是累积性的因此每个新版本包含的所有修补程序和所有安全修复程序以前 SQL Server 2008 中包含的修补都程序版本。
展开全部 | 关闭全部

症状

请考虑以下情形。
  • 启用数据收集器。
  • 在一个粗或长时间工作负荷下数据收集器在运行时重新生成索引,和更新统计信息,如的大型数据库的数据库维护活动可能会导致算术溢出错误,如下所示。此算术溢出错误发生在收集期间间歇性地 sys.dm_exec_query_stats 阶段的快照。
消息: SSIS 错误码 DTS_E_OLEDBERROR。 OLE DB 出错。错误代码: 0x80040E57。
可用的一个 OLE DB 的记录。 源:"microsoft SQL Server 本机客户 10.0"Hresult: 0x80040E57 说明:"将表达式转换为 int。 数据类型算术溢出错误"。

如果您增加数据收集器日志记录级别为 2 (例如对于运行在"exec sp_syscollector_update_collection_set @ collection_set_id = <collectionsetid>,@ logging_level = 2"语句),返回以下错误消息:
<日期时间 > SEQ-捕获和分析查询统计信息和查询计划和文本,错误,6569、、、 SSIS 错误代码 DTS_E_OLEDBERROR。 OLE DB 出错。错误代码: 0x80040E57 <nl/> 了 OLE DB 记录不可用。 源:"microsoft SQL Server 本机客户 10.0"Hresult: 0x80040E57 说明:"算术溢出错误将表达式转换为 int。 数据类型、 < 日期时间 >、 < 日期时间 >、、、 OnError,-1071636471 < 时间 > QueryActivityUpload,错误,6569、、、 SSIS 错误代码 DTS_E_OLEDBERROR。 OLE DB 出错。错误代码: 0x80040E57 <nl/> 了 OLE DB 记录不可用。 源:"microsoft SQL Server 本机客户 10.0"Hresult: 0x80040E57 说明:"算术溢出错误将表达式转换为 int。 数据类型、 < 日期时间 >、 < 日期时间 >、、、 OnError,-1071636471

<日期时间 > DFT-创建有趣查询上载批处理,错误,6569、、、 组件"ODS-获取当前快照的 dm_exec_query_stats"(16412) pre-execute 阶段失败,返回的错误代码 0xC0202009、 < 日期时间 >、 < 日期时间 >、、、 OnError,-1073450982

<日期时间 > SEQ-捕获和分析查询统计信息和查询计划和文本错误,6569、、、 组件"ODS-获取当前快照的 dm_exec_query_stats"(16412) pre-execute 阶段失败,返回的错误代码 0xC0202009、 < 日期时间 >、 < 日期时间 >、、、 OnError,-1073450982

<日期时间 > QueryActivityUpload,错误,6569、、、 组件"ODS-获取当前快照的 dm_exec_query_stats"(16412) pre-execute 阶段失败,返回的错误代码 0xC0202009、 < 日期时间 >、 < 日期时间 >、、、 OnError,-1073450982


在这种情况下,由 SQL Server 来运行,则下列语句将导致算术溢出错误:
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
因此,如果您手动运行此报表,您也可能会收到以下错误消息:
消息 8115,级别 16,2,状态
将表达式转换为数据类型 int 的算术溢出错误

解决方案

累积更新 5 SQL Server 2008 Service Pack 1 中第一次释放此问题的修复程序。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
975977累积更新包 5 为 SQL Server 2008 Service Pack 1
注意因为这些版本是累积性的因此每个新的修补程序版本包含的所有修补程序和所有安全修复程序以前 SQL Server 2008 中包含的修补都程序版本。Microsoft 建议您考虑应用最新的修补程序版本包含此修补程序。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
970365SQL Server 2008 生成之后 SQL Server 2008 Service Pack 1 发布发布
Microsoft SQL Server 2008 修复程序会创建特定 SQL Server 服务包。必须将 SQL Server 2008 Service Pack 1 修补程序应用到 SQL Server 2008 Service Pack 1 的安装。默认状态下,SQL Server service pack 中提供的任何修补程序包含在下一个 SQL Server 服务包中。

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。

参考

对于 SQL Server 增量的服务模型的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
935897一个增量的服务模型是可从 SQL Server 团队提供报告的问题的修补程序


有关命名 SQL Server 更新架构的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
822499Microsoft SQL Server 软件更新程序包的新命名架构


有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684用于描述 Microsoft 软件更新的标准术语的说明

属性

文章编号: 975915 - 最后修改: 2009年11月16日 - 修订: 1.1
这篇文章中的信息适用于:
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Workgroup
关键字:?
kbmt kbexpertiseadvanced kbsurveynew kbqfe kbfix KB975915 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 975915
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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