ИСПРАВЛЕНИЕ: Ошибка арифметического переполнения происходит периодически во время фазы «Сбор моментальный снимок представление sys.dm_exec_query_stats» после включения сбора данных в SQL Server 2008

Переводы статьи Переводы статьи
Код статьи: 975915 - Vizualiza?i produsele pentru care se aplic? acest articol.
Корпорация Майкрософт распространяет исправления 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" инструкции), возвращаются следующие сообщения об ошибках:</collectionsetid>
<date time="">SEQ - собирать и анализировать статистику запроса и план запроса и текст, ошибка, 6569,,,, DTS_E_OLEDBERROR код ошибки служб SSIS. Произошла ошибка OLE DB. Код ошибки: 0x80040E57.<nl></nl>Доступна запись OLE DB. Источник: "Microsoft собственный клиент SQL Server 10.0" Hresult: 0x80040E57 Описание: «Ошибка арифметического переполнения преобразования выражения в тип данных int».,, <date time="">,,<date time="">,,,, OnError,-1071636471 <date time="">, QueryActivityUpload, ошибка, 6569,,,, код ошибки служб SSIS DTS_E_OLEDBERROR. Произошла ошибка OLE DB. Код ошибки: 0x80040E57.<nl></nl>Доступна запись OLE DB. Источник: "Microsoft собственный клиент SQL Server 10.0" Hresult: 0x80040E57 Описание: «Ошибка арифметического переполнения преобразования выражения в тип данных int».,, <date time="">,,<date time="">,,,, OnError,-1071636471</date></date></date></date></date></date>

<date time="">DFT - создания интересных запросов загрузки раздела, ошибки, 6569,,,, компонент «ODS - получить текущий моментальный снимок из dm_exec_query_stats» (16412) Ошибка на этапе pre-execute и возвращаемый код 0xC0202009.,, <date time="">,,<date time="">,,,, OnError,-1073450982</date></date></date>

<date time="">SEQ - собирать и анализировать статистику запросов и запросов плана и текста, ошибка, 6569,,,, компонент «ODS - получить текущий моментальный снимок из dm_exec_query_stats» (16412) Ошибка на этапе pre-execute и возвращаемый код 0xC0202009.,, <date time="">,,<date time="">,,,, OnError,-1073450982</date></date></date>

<date time="">QueryActivityUpload, ошибка, 6569,,,, компонент «ODS - получить текущий моментальный снимок из dm_exec_query_stats» (16412) Ошибка на этапе pre-execute и возвращаемый код 0xC0202009.,, <date time="">,,<date time="">,,,, OnError,-1073450982<b00></b00></date></date></date>


В этом случае следующая инструкция, выполняемой сервером 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 с пакетом обновления 1. Для получения дополнительных сведений о этот накопительный пакет обновления щелкните следующий номер статьи базы знаний Майкрософт:
975977 Накопительный пакет обновления 5 для SQL Server 2008 с пакетом обновления (1)
Примечание Поскольку сборки являются накопительными, каждый новый выпуск исправлений содержит все исправления и исправить все исправления безопасности, которые были включены в SQL Server 2008 выпуска. Корпорация Майкрософт рекомендует их применение самую последнюю версию исправления, содержащего это исправление. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
970365 SQL Server 2008 выполняет построение, выпущенных после пакета обновления 1 для SQL Server 2008
Microsoft SQL Server 2008 исправлениях создаются для определенных пакетов обновления SQL Server. Для установки пакета обновления 1 для SQL Server 2008, необходимо установить исправление пакета обновления 1 для SQL Server 2008. По умолчанию какие-либо исправления, входящее в пакет обновления SQL Server включены в следующий пакет обновления SQL Server.

Статус

Корпорация Майкрософт подтверждает, что это проблема в продуктах Microsoft, перечисленных в разделе «Относится к».

Ссылки

Для получения дополнительных сведений о добавочных модель обслуживания для SQL Server щелкните следующий номер статьи базы знаний Майкрософт:
935897Доступные группы разработчиков SQL Server для исправления ошибок, о которой сообщалось в добавочной модель обслуживания


Для получения дополнительных сведений о схеме именования обновлений SQL Server щелкните следующий номер статьи базы знаний Майкрософт:
822499Новая схема присвоения имен пакетам обновлений программного обеспечения Microsoft SQL Server


Для получения дополнительных сведений о терминологии, обновление программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:
824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Свойства

Код статьи: 975915 - Последний отзыв: 19 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Workgroup
Ключевые слова: 
kbexpertiseadvanced kbsurveynew kbqfe kbfix kbmt KB975915 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:975915

Отправить отзыв

 

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