Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Applies to:SQL Server
Details
| Attribute | Value |
|---|---|
| Product Name | SQL Server |
| Event ID | 2814 |
| Event Source | MSSQLSERVER |
| Component | SQLEngine |
| Symbolic Name | PR_POSSIBLE_INFINITE_RECOMPILE |
| Message Text | Обнаружена возможная бесконечная перекомпиляция для SQLHANDLE %hs, PlanHandle %hs, от смещения %d до смещения %d. Причиной последней перекомпиляции было %d. |
Explanation
Одна или несколько инструкций вызвали перекомпиляцию пакета запросов по крайней мере 50 раз. Необходимо исправить указанную инструкцию, чтобы избежать дальнейшей перекомпиляции.
В следующей таблице приводятся причины перекомпиляции.
| Reason code | Description |
|---|---|
| 1 | Schema changed |
| 2 | Statistics changed |
| 3 | Deferred compile |
| 4 | Изменение параметра "Задать" |
| 5 | Изменение временной таблицы |
| 6 | Изменение удаленного набора строк |
| 7 | Изменение разрешений на просмотр |
| 8 | Изменение среды уведомлений о запросах |
| 9 | PartitionView changed |
| 10 | Изменение параметров курсора |
| 11 | Запрошено OPTION (RECOMPILE) |
| 12 | Очистка параметризованного плана |
| 13 | Линейная схема тестирования |
| 14 | Изменение версии базы данных, влияющее на план |
| 15 | Изменение политики форсирования плана для хранилища запросов |
| 16 | Сбой форсирования плана для хранилища запросов |
| 17 | Отсутствие плана для хранилища запросов |
| 18 | Перекомпиляция выполнения, требуемая перекомпиляция |
| 19 | Не перекомпилировать |
| 20 | Изменены указания хранилища запросов |
| 21 | Сбой приложения с указанием хранилища запросов |
| 22 | Перекомпилирование хранилища запросов для записи запроса курсора |
| 23 | Повторная компиляция для очистки плана многопланового диспетчера |
Чтобы просмотреть все коды компиляции, выполните следующий динамический запрос управления:
SELECT * FROM sys.dm_xe_map_values
WHERE name LIKE '%compile%cause%';
User action
Просмотрите инструкцию, вызывающую перекомпиляцию, запустив следующий запрос. Replace the sql_handle, starting_offset, ending_offset, and plan_handle placeholders with the values specified in the error message. Столбцы
database_nameпредназначеныNULLдля нерегламентированных иobject_nameподготовленных Transact-SQL инструкций.SELECT DB_NAME(st.dbid) AS database_name, OBJECT_NAME(st.objectid) AS object_name, st.text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(0x01000600B74C2A1300D2582A2100000000000000000000000000000000000000000000000000000000000000 /* replace the 0x01000600B... value with the actual sql_handle */ ) AS st WHERE qs.statement_start_offset = 123 /* replace 123 with actual starting_offset value */ AND qs.statement_end_offset = 456 /* replace 456 with actual ending_offset value */ AND qs.plan_handle = 0x06000100A27E7C1FA821B10600; /* replace 0x06000100A27E7C1FA821B10600 with actual plan_handle value */В зависимости от описания кода причины измените инструкцию, пакет или процедуру, чтобы избежать перекомпиляции. Например, хранимая процедура может содержать одну или несколько
SETинструкций. Эти инструкции должны быть удалены из процедуры.Дополнительные примеры причин повторной компиляции и устранения см. в статье "Компиляция пакетной службы", "Перекомпиляция" и "Планирование кэширования" в SQL Server 2005. Дополнительные сведения о перекомпиляции см. в разделе "Планы выполнения recompile".
Если ошибка повторится, обратитесь в службу поддержки пользователей Майкрософт.