FIX: 算術溢位錯誤時發生間歇地 」 收集 sys.dm_exec_query_stats 的快照集 」 的 」 階段後啟用 SQL Server 2008 中的資料收集器

文章翻譯 文章翻譯
文章編號: 975915 - 檢視此文章適用的產品。
Microsoft 為一個可下載檔案散佈 Microsoft SQL Server 2008 的修正程式。因為修正程式是累積,每個新版本包含所有 Hotfix 及先前的 SQL Server 2008 隨附所有安全性修正程式都修正發行。
全部展開 | 全部摺疊

徵狀

考慮下列案例。
  • 啟用資料收集器。
  • 在重裝或延長工作負載下時執行資料收集器,如重建索引,及更新統計資料的超大型資料庫上的資料庫維護活動可能會導致算術溢位錯誤,如下所示。會算術溢位發生此錯誤在收集期間間歇性 sys.dm_exec_query_stats 」 階段的快照集。
訊息: SSIS 錯誤代碼 DTS_E_OLEDBERROR。 發生了 OLE DB 錯誤。錯誤代碼: 0x80040E57。
使用的 OLE DB 資料錄。 來源:"Microsoft SQL 伺服器用原生戶端 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 伺服器用原生戶端 10.0"Hresult: 0x80040E57 描述: 「 將運算式轉換為資料型別 int。 算術溢位錯誤 」、 < 日期時間 >、 < 日期時間 >,,,, OnError,-1071636471 < 日期時間 > QueryActivityUpload,錯誤,6569,,,, SSIS 錯誤程式碼 DTS_E_OLEDBERROR。 發生了 OLE DB 錯誤。錯誤代碼: 0x80040E57 <nl/> 的 OLE DB 資料錄是可用。 來源:"Microsoft SQL 伺服器用原生戶端 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 知識庫 」 中的發行項]:
975977SQL Server 2008 Service Pack 1 的累積更新套件 5
附註因為組建是累計,每個新的修正程式版本包含所有 Hotfix 及先前的 SQL Server 2008 隨附所有安全性修正程式都修正版本。Microsoft 建議您考慮安裝最新的修正程式發行版本包含此 Hotfix。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
970365SQL Server 2008 建置發行 SQL Server 2008 Service Pack 1 之後所發行
Microsoft SQL Server 2008 的 Hotfix 會建立特定的 SQL Server Service Pack。您必須將 SQL Server 2008 Service Pack 1 Hotfix 套用至 SQL Server 2008 Service Pack 1 的安裝。預設狀況下,在 SQL Server Service Pack 中提供任何 Hotfix 包含在下一個 SQL Server Service Pack。

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。

?考

如更多有關累加式的維修模型為 SQL Server,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
935897累加式的維修模型是可以從 SQL Server 小組來傳遞回報問題的 Hotfix


如 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
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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