MSSQL Error 49905: The query plan is not valid and cannot be executed
- Ошибка выполнения запросов:
Msg 49905, Level 16, State 1: The query plan is not valid and cannot be executed. - Периодические сбои при выполнении параметризованных запросов и тяжелых отчетов 1С.
- Проблема исчезает после перезапуска экземпляра SQL Server, но возвращается под нагрузкой.
1. Сброс сбойного плана выполнения из кэша
Найдите plan_handle сбойного запроса и удалите его точечно из кэша:
SELECT cp.plan_handle, st.text
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
WHERE st.text LIKE '%ИмяПроблемнойТаблицы%'
-- Очистка конкретного плана
DBCC FREEPROCCACHE (0x060001004654763110E7072E020000000000000000000000);2. Полная перекомпиляция объектов схемы
Если ошибка возникает в хранимой процедуре или таблице:
EXEC sp_recompile 'dbo.ИмяТаблицыИлиПроцедуры';3. Обновление статистики с полным сканированием
Некорректная или устаревшая статистика распределения данных приводит к генерации невалидных планов:
UPDATE STATISTICS dbo.ИмяТаблицы WITH FULLSCAN, NORECOMPUTE = OFF;4. Проверка целостности базы данных
DBCC CHECKDB ('ИмяБазы') WITH NO_INFOMSGS, ALL_ERRORMSGS; Частые вопросы (FAQ)
Почему план запроса становится невалидным (Error 49905)?
Это происходит при изменении схемы таблицы во время выполнения транзакции, гонках компиляции при высоких параллельных нагрузках, либо повреждении страниц кэша планов в RAM.
Помогает ли DBCC FREEPROCCACHE для устранения ошибки по всему серверу?
Да, глобальная очистка кэша планов сбрасывает все скомпилированные планы, но вызывает кратковременный всплеск утилизации CPU при последующей их перекомпиляции.
Как предотвратить ошибку 49905 в базах 1С:Предприятие?
Включите параметр базы данных PARAMETER_SNIFFING = ON и настройте регламентное ночное обновление статистики с FULLSCAN.
Нужно ли перезапускать службу MSSQL при ошибке 49905?
Перезапуск не обязателен, достаточно выполнить точечный сброс плана через DBCC FREEPROCCACHE или вызвать sp_recompile для целевого объекта.