MSSQLSERVER_8645
Область применения: SQL Server
Сведения
Атрибут | Значение |
---|---|
Название продукта | SQL Server |
ИД события | 8645 |
Источник событий | MSSQLSERVER |
Компонент | SQLEngine |
Символическое имя | MEMTIMEDOUT_ERR |
Текст сообщения | Истекло время ожидания ресурсов памяти для выполнения запроса в пуле ресурсов "%ls" (%ld). Повторите запрос. |
Описание
Эта ошибка возникает, если запрос SQL Server ждал выполнения запросов (QE) в течение длительного периода времени и памяти недоступен. Память выполнения запросов в основном используется для операций сортировки, хэш-операций, операций массового копирования и создания индексов и заполнения. Запрос, выполняющий одну из этих операций, запрашивает предоставление памяти. Если память недоступна, запрос будет ожидать RESOURCE_SEMAPHORE до тех пор, пока память не станет доступной. Если память недоступна через 20 минут ожидания, SQL Server завершает запрос с ошибкой 8645 "Время ожидания произошло во время ожидания выполнения запроса в пуле ресурсов ресурсов по умолчанию. Значение времени ожидания немного отличается от версий SQL Server. Вы можете увидеть значение времени ожидания на уровне сервера, просмотрев timeout_sec
sys.dm_exec_query_memory_grants.
Причина
Эта ошибка может быть замечена в отношении предоставления памяти и длительных ожиданий, пока эта память станет доступной. Как правило, когда запрос завершается, он освобождает память выполнения, используемой им. Таким образом, если вы видите эту ошибку, это означает, что запрос времени ожидания ожидания некоторых других запросов на протяжении более 20 минут, чтобы завершить работу. Может быть только один запрос, который использовал всю доступную память QE, или может быть много запросов, и вместе их гранты памяти исчерпали память QE. Если у вас есть такие длительные запросы в рабочей нагрузке, необходимо принять меры, чтобы повысить продолжительность выполнения и уменьшить объем используемой памяти QE.
Действие пользователя
Если вы не используете регулятор ресурсов для ограничения пула памяти для определенных рабочих нагрузок, можно проверить общее состояние сервера и рабочую нагрузку. Если вы используете регулятор ресурсов, проверьте параметры пула ресурсов или группы рабочей нагрузки.
Подробное описание и устранение неполадок описано в статье "Устранение проблем с низкой производительностью или низкой памятью, вызванных предоставлением памяти в SQL Server".
В следующем списке приведены инструкции, описанные в приведенной выше статье. Эти действия помогут сократить или устранить ошибки памяти QE:
Определите, какие запросы в SQL Server представляют собой большой объем памяти или потребители памяти QE. Дополнительные сведения см. в разделе "Определение ожиданий памяти выполнения запроса".
Переопределите запросы, чтобы свести к минимуму или избежать операций сортировки и хэша.
Обновляйте статистику и регулярно обновляйте их, чтобы убедиться, что SQL Server правильно оценивает предоставление памяти.
Создайте соответствующие индексы для определенного запроса или запроса. Индексы могут уменьшить количество обработанных строк, изменяя алгоритмы JOIN и уменьшая размер грантов или полностью устраняя их.
Используйте подсказку OPTION (min_grant_percent = XX, max_grant_percent = XX) в запросах, где это возможно.
Используйте регулятор ресурсов, чтобы ограничить влияние использования памяти QE только на определенную рабочую нагрузку.
SQL Server 2017 и 2019 используют адаптивную обработку запросов, позволяя механизму обратной связи предоставления памяти динамически настраивать размер предоставления памяти во время выполнения. Эта функция может предотвратить проблемы с предоставлением памяти в первую очередь.
Увеличьте память SQL Server или измените существующие параметры.
Проверьте следующие параметры конфигурации памяти SQL Server.
- максимальная память сервера — увеличение при необходимости
- min server memory
- min memory per query
Обратите внимание на нестандартные параметры. При необходимости измените их. Учетная запись с повышенными требованиями к памяти для SQL Server. Параметры по умолчанию и рекомендуемые параметры перечислены в параметрах конфигурации памяти сервера.
Увеличьте память на уровне ОС (физическая или виртуальная ОЗУ).
Проверьте, не используют ли память данного сервера другие приложения или службы. Перенастройка менее важных приложений или служб, чтобы использовать меньше памяти или переместить их на отдельный сервер. Это действие может удалить давление внешней памяти.
Выполните следующие команды DBCC, чтобы освободить несколько кэшей памяти SQL Server — временную меру.
- DBCC FREESYSTEMCACHE
- DBCC FREESESSIONCACHE
- DBCC FREEPROCCACHE