Проблема
Рассмотрим следующий сценарий.
Процедура выполняется в Microsoft SQL Server 2014 или SQL Server 2012.
Процедура содержит запрос, который имеет следующие условия:
- Он присоединяется к таблице, которая очень часто обновляется.
- В нем есть предложение WHERE, содержащее параметры.
- Он использует Option(Recompile).
Эта процедура выполняется для нескольких одновременных соединений с разными наборами значений параметров.
Ваш сервер находится под большой нагрузкой, из-за которой каждая из этих процедур занимает больше времени, чем обычно.
В этом случае процедура, выполняемая в подключении, может привести к неверным результатам, если в течение интервала времени между завершением составления запроса и началом его выполнения в соединении выполняются следующие дополнительные условия:
- Условие 1: Другое параллельное подключение вносит в присоединенную таблицу достаточно большие изменения, чтобы вызвать еще одну перекомпиляцию запроса для подключения.
- Условие 2: тот же запрос был перекомпилирован из другого подключения и помещен в кэш.
Важно! Эта проблема с синхронизацией встречается крайне редко.
Причина
Эта проблема возникает из-за того, что значения параметров запроса заменяются на неверные значения после выполнения запроса для подключения. Это происходит из-за крайне редкой проблемы синхронизации, возникающей между параллельными компиляциями.
Решение
Эта проблема была впервые исправлена в следующем накопительном пакете обновления SQL Server.
Накопительный пакет обновления 4 для SQL Server 2014 г. /en-us/help/2999197
Накопительный пакет обновления 2 для SQL Server 2012 с пакетом обновления 2 (SP2) /en-us/help/2983175
Накопительный пакет обновления 11 для SQL Server 2012 с пакетом обновления 1 (SP1) /en-us/help/2975396
Сведения о накопительных обновлениях для SQL Server
Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и исправления безопасности, которые входили в состав предыдущего накопительного пакета обновления. Ознакомьтесь с последними накопительными пакетами обновления для SQL Server:
- Последний накопительный пакет обновления для SQL Server 2014
- Последний накопительный пакет обновления для SQL Server 2012 с пакетом обновления 2 (SP2)
- Последний накопительный пакет обновления для SQL Server 2012 с пакетом обновления 1 (SP1)
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».