Поделиться через


MSSQLSERVER_8645

Применяется к:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Сведения

Атрибут Значение
Название продукта SQL Server
ИД события 8645
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя MEMTIMEDOUT_ERR
Текст сообщения Истекло время ожидания ресурсов памяти для выполнения запроса в пуле ресурсов "%ls" (%ld). Повторите запрос.

Описание

Эта ошибка возникает, если запрос SQL Server ждал предоставления памяти выполнения запроса (QE) в течение длительного периода времени и памяти недоступен. Память выполнения запросов в основном используется для операций сортировки, хэш-операций, операций массового копирования и создания индексов и заполнения. Запрос, выполняющий одну из этих операций, запрашивает предоставление памяти. Если память недоступна, запрос будет ожидать RESOURCE_SEMAPHORE до тех пор, пока память не станет доступной.

Если память недоступна после ожидания периода ожидания времени ожидания динамически определяется стоимостью запроса, как оценивается оптимизатором запросов, то SQL Server завершает запрос с ошибкой 8645 A timeout occurred while waiting for memory resources to execute the query in the resource pool 'default'. Значение времени ожидания немного зависит от версий SQL Server, но имеет максимальное значение времени ожидания в 24 часа. Вы можете увидеть значение времени ожидания на уровне сервера, просмотрев timeout_secsys.dm_exec_query_memory_grants.

Подробное описание действий по устранению неполадок см. в статье о проблемах с медленной производительностью или низкой производительностью памяти, вызванными предоставлением памяти в SQL Server.

Причина

Эта ошибка может быть замечена в отношении предоставления памяти и длительных ожиданий, пока память станет доступной. Как правило, когда запрос завершается, он освобождает память выполнения, используемой им. Таким образом, если вы видите эту ошибку, это означает, что время ожидания запроса ожидает завершения других запросов за пределами периода ожидания ожидания. Может быть только один запрос, который использовал всю доступную память QE, или может быть много запросов и объединенных, их объем памяти исчерпал память QE. Если у вас есть такие длительные запросы в рабочей нагрузке, необходимо принять меры, чтобы повысить продолжительность выполнения и уменьшить объем используемой памяти QE.

Действие пользователя

Если вы не используете регулятор ресурсов для ограничения пула памяти для определенных рабочих нагрузок, можно проверить общее состояние сервера и рабочую нагрузку. Если вы используете регулятор ресурсов, проверьте параметры пула ресурсов или группы рабочей нагрузки.

В следующем списке приведены инструкции, описанные в приведенной выше статье. Эти действия помогут сократить или устранить ошибки памяти QE:

  1. Определите, какие запросы в SQL Server представляют собой большой объем памяти или потребители памяти QE. Дополнительные сведения см. в разделе "Определение ожиданий памяти выполнения запроса".

  2. Переопределите запросы, чтобы свести к минимуму или избежать операций сортировки и хэша.

  3. Обновляйте статистику и регулярно обновляйте их, чтобы убедиться, что SQL Server правильно оценивает предоставление памяти.

  4. Создайте соответствующие индексы для определенного запроса или запроса. Индексы могут уменьшить большое количество обработанных строк, таким образом изменяя алгоритмы JOIN и уменьшая размер грантов или полностью устраняя их.

  5. Используйте подсказку OPTION (min_grant_percent = XX, max_grant_percent = XX) в запросах, где это возможно.

  6. Используйте регулятор ресурсов, чтобы ограничить влияние использования памяти QE только на определенную рабочую нагрузку.

  7. SQL Server 2017 и 2019 используют адаптивную обработку запросов, позволяя механизму обратной связи предоставления памяти динамически настраивать размер предоставления памяти во время выполнения. Эта функция может предотвратить проблемы с предоставлением памяти в первую очередь.

  8. Увеличьте память SQL Server или измените существующие параметры.

    1. Проверьте следующие параметры конфигурации памяти SQL Server.

      • максимальная память сервера — увеличение при необходимости
      • min server memory
      • min memory per query
    2. Обратите внимание на нестандартные параметры. При необходимости измените их. Учетная запись с повышенными требованиями к памяти для SQL Server. Параметры по умолчанию и рекомендуемые параметры перечислены в параметрах конфигурации памяти сервера.

  9. Увеличьте память на уровне ОС (физическая или виртуальная ОЗУ).

  10. Проверьте, не используют ли память данного сервера другие приложения или службы. Перенастройка менее важных приложений или служб, чтобы использовать меньше памяти или переместить их на отдельный сервер. Это действие может удалить давление внешней памяти.

  11. Выполните следующие команды DBCC, чтобы освободить несколько кэшей памяти SQL Server — временную меру.

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE