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


MSSQLSERVER_17890

Область применения: SQL Server

Сведения

Атрибут Значение
Название продукта SQL Server
ИД события 17890
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя SRV_WS_TRIMMED
Текст сообщения Значительной частью памяти процесса SQL Server выстраивается. Это может привести к снижению производительности. Продолжительность: %d секунд. Рабочий набор (КБ): %I64d, зафиксировано (КБ): %I64d, использовано памяти: %d %%.

Описание

В журнале ошибок SQL Server или в журнале событий приложения Windows может возникнуть следующее сообщение об ошибке.

Значительной частью памяти процесса SQL Server выстраивается. Это может привести к снижению производительности. Длительность: 0 секунд. Рабочий набор (КБ): 3383250, зафиксированный (КБ): 9112480, использование памяти: 37 %.

Кроме того, вы можете заметить внезапное замедление при выполнении запросов и любых других операциях с SQL Server.

Причина

SQL Server отслеживает различные сведения, связанные с памятью о процессе SQL Server. В этом случае обнаружено, что рабочий набор процесса занимает менее 50 % от выделенной процессу памяти. В результате отображается такое предупреждение. Типичные причины появления этого предупреждения могут быть следующими:

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

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

Операционная система Windows может запретить разбиение памяти буферного пула процесса SQL Server, заблокируя память, выделенную для буферного пула в физической памяти. Заблокируйте память, назначив страницы блокировки в памяти пользователю право на учетную запись пользователя, которая используется в качестве учетной записи запуска службы SQL Server. Прежде чем воплощать в жизнь это решение, ознакомьтесь с разделами Что приводит к выгрузке на диск памяти SQL Server и "Важные аспекты, которые нужно учесть перед назначением пользователю прав на блокировку страниц в памяти" для экземпляра SQL Server.

Примечание.

Использование заблокированных страниц в памяти гарантирует, что память, управляемая SQL Server, не выстраивается. Однако стеки потоков, EXE и любые образы DLL, память кучи, память CLR по-прежнему можно вывести на страницу операционной системой.

Начиная с sql Server 2008 с накопительным пакетом обновления 2 (SP1), выпуски SQL Server Standard и Enterprise могут использовать страницы блокировки в памяти справа. Дополнительные сведения о поддержке блокировки страниц см. в статье базы знаний KB970070 — Поддержка заблокированных страниц в системах SQL Server Standard Edition (64-разрядных).

Чтобы назначить право пользователя "Блокировка страниц в памяти", выполните следующие действия:

  1. Нажмите кнопку Пуск, выберите команду Выполнить, введите gpedit.msc и щелкните ОК.
  2. Откроется диалоговое окно "Групповая политика".
  3. Последовательно разверните узлы Конфигурация компьютера и Параметры Windows.
  4. Разверните узлы Настройки безопасностии Локальные политики.
  5. Щелкните "Назначение прав пользователя", а затем дважды щелкните Блокировка страниц в памяти.
  6. В диалоговом окне Параметры локальной политики безопасности щелкните Добавить пользователя или Группа.
  7. В диалоговом окне Выберите пользователей или Группы добавьте учетную запись, у которой есть разрешение на запуск файла Sqlservr.exe, а затем щелкните ОК.
  8. Закройте диалоговое окно Групповая политика.
  9. Перезапустите службу SQL Server.

После назначения страниц блокировки в памяти и перезапуска службы SQL Server операционная система Windows больше не отображает память буферного пула в процессе SQL Server. Тем не менее операционная система Windows по-прежнему может выходить из памяти небуферного пула в процессе SQL Server.

Вы можете проверить, используется ли пользователь в экземпляре SQL Server, убедившись, что следующее сообщение записывается в журнал ошибок SQL Server при запуске: "Использование заблокированных страниц для буферного пула"

Это сообщение применимо только к SQL Server. Дополнительные сведения об этом сообщении в ERRORLOG см. в следующих статьях. Необходимо ли назначить страницы блокировки для привилегий памяти в локальной системе.

Хотя операционная система Windows выгружает на диск память из небуферного пула, все равно могут возникать проблемы с производительностью. Однако сообщения об ошибках, упомянутые в разделе "Объяснение", не регистрируются в журнале ошибок SQL Server.

Что приводит к выгрузке на диск памяти SQL Server

Существует три основные категории проблем, которые могут вызвать такую проблему.

  • Проблемы, связанные с приложениями: все приложения вместе исчерпали доступную физическую память, и ОС должна освободить память для новых запросов приложений для ресурсов. Как правило, для устранения этой причины нужно определить, какие именно приложения сильно расходуют память, и предпринять соответствующие шаги для сбалансированного распределения между ними памяти, чтобы не исчерпывать доступный объем ОЗУ.
  • Проблемы с драйвером устройств. Драйверы устройств могут привести к перекачки рабочих наборов всех процессов, если драйвер вызывает функцию выделения памяти неправильно.
  • Проблемы с операционной системой.

Ниже представлены сведения по каждой из этих категорий.

  • Проблемы, связанные с приложениями: приложения вместе могут использовать всю ОЗУ в системе. При создании новых запросов на выделение памяти операционная система пытается удовлетворить их, а если свободной памяти нет, для ее освобождения она сократит рабочий набор уже выполняемых приложений. В таких случаях можно заметить значительное сокращение рабочего набора для всех или многих приложений сразу. Чтобы отследить это, реализуйте сбор данных с помощью следующего счетчика Монитора производительности для всех приложений в системе:

    • Объект performance: Process
    • Счетчик: рабочий набор

    Кроме того, отслеживайте следующий счетчик для сопоставления объема доступной в системе физической памяти.

    • Объект производительности: память
    • Счетчик: доступная память (МБ)

    Типичное поведение, которое вы можете здесь наблюдать, — это снижение объема доступной памяти почти до 0 МБ с последующим резким снижением значений счетчиков рабочего набора для большинства (или всех) процессов в системе. В такой ситуации следует предпринять какие-то действия для снижения использования памяти в системе, например уменьшить максимальный объем памяти (Max Server Memory) для SQL Server.

    Также может оказаться, что приложения слишком активно используют системный кэш, что приводит к увеличению размера системного кэша. Чтобы реагировать на рост системного кэша, системные страницы из рабочего набора процесса SQL Server или других приложений. При возникновении этой проблемы можно применить некоторые функции управления памятью в приложении. Эти функции управляют пространством системного кэша, которое доступно операциям файлового ввода-вывода в приложении. Например, функции SetSystemFileCacheSize и GetSystemFileCacheSize можно использовать для управления пространством системного кэша, которое доступно операциям файлового ввода-вывода.

    Объект производительности "Память" содержит несколько счетчиков, значения которых помогают определить, использует ли рабочий набор системного кэша чрезмерно много памяти. Сюда относятся, например, счетчики "Байт кэш-памяти" и "Резидентных байт системного кэша". Дополнительные сведения на эту тему см. в следующих документах:

    Вы можете скачать и развернуть службу динамического кэша Microsoft Windows, чтобы управлять объемом памяти, потребляемым системным кэшем.

  • Проблемы с драйвером устройств. Если драйвер устройства использует MmAllocateContiguousMemory функцию, и если он задает значение параметра HighestAcceptableAddress меньше 4 гигабайт (ГБ), операционная система Windows может вывести рабочий набор процессов в системе, включая процесс SQL Server. Чтобы устранить эту проблему, обратитесь к поставщику драйвера устройства за обновлением драйвера.

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

  • Проблемы с операционной системой. Чтобы устранить известные проблемы, из-за которых операционная система Windows будет выстраивать рабочий набор процесса SQL Server, примените исправления, описанные в следующих статьях базы знаний Майкрософт.

    Примечание.

    Все эти исправления являются накопительными. Более поздние версии исправления содержат все более ранние версии того же исправления.

Важные аспекты, которые нужно учесть перед назначением пользователю прав на блокировку страниц в памяти

Прежде чем назначить пользователю право "Блокировка страниц в памяти", необходимо учесть дополнительные рекомендации. Если назначить это право пользователя в неправильно настроенных системах, они могут стать нестабильными или существенно снизится их производительность. Кроме того, в журнале событий начнет появляться событие с идентификатором 333.

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

Прежде чем присвоить право пользователя "Блокировка страниц в памяти", включите сбор данных для журнала Монитора производительности, чтобы оценить требования к памяти для приложений и служб, установленных в системе. К этим приложениям относится и SQL Server. Чтобы определить требования к памяти, собирайте следующие базовые сведения.

  • Убедитесь, что параметры максимального и минимального объема памяти сервера настроены правильно. Эти параметры отражают только требование к памяти буферного пула процесса SQL Server. Эти параметры не включают память, выделенную для других компонентов в процессе SQL Server. К этим компонентам относятся:

    • Рабочие потоки SQL Server
    • Различные библиотеки DLL и компоненты, загружаемые процессом SQL Server в адресном пространстве процесса SQL Server
    • операции резервного копирования и восстановления.
  • Библиотеки DLL и компоненты включают различные поставщики OLE DB, расширенные хранимые процедуры, объекты MICROSOFT COM, используемые для хранимой процедуры sp_OACreate, связанных серверов и среды CLR SQL Server. Память, выделенная для этих компонентов, попадает в область небуферного пула адресного пространства процесса SQL Server. Чтобы в идеале определить максимальный объем памяти, который может использовать весь процесс SQL Server, необходимо вычитать память, выделенную для компонентов, которые не используют буферный пул из общей памяти, которую требуется использовать процесс SQL Server. Полученное значение остатка следует указать как значение параметра максимального объема памяти сервера. Прежде чем задать параметр максимальной памяти сервера и параметр минимальной памяти сервера, необходимо тщательно просмотреть раздел "Настройка параметров памяти вручную" в электронной документации ПО SQL Server.

  • Определите требования к памяти для других приложений и компонентов операционной системы Windows. Приложения могут включать другие компоненты SQL Server, например агент SQL Server, агенты Репликация SQL Server, службы SQL Server Reporting Services, SQL Server Analysis Services, СЛУЖБЫ SQL Server Integration Services и полнотекстовый поиск SQL Server. Приложения, которые выполняют операции резервного копирования и копирования файлов, могут использовать большой объем памяти. Оцените такие операции, как массовое копирование и действия агента моментальных снимков, которые создают значительную нагрузку файлового ввода и вывода. Требования к памяти для всех этих приложений необходимо учитывать при определении значений параметров максимального и минимального объема памяти сервера. Чтобы определить требования к памяти для каждого процесса, можно использовать счетчики Private Bytes и Working Set из объекта Process для конкретного процесса.

  • По умолчанию право "Блокировка страниц в памяти" уже назначено встроенной учетной записи Local System. Дополнительные сведения см. на следующем веб-сайте Майкрософт: нужно ли назначить страницы блокировки в привилегии "Память" для локальной системы?

  • Если вы используете учетную запись пользователя Windows глобально для всех процессов SQL Server в домене, определите права пользователя, назначенные с помощью конфигурации групповой политики. 32-разрядный процесс SQL Server может использовать эту учетную запись в качестве учетной записи запуска. Но этой учетной записи право пользователя "Блокировка страниц в памяти" требуется для использования функции Address Windowing Extensions (AWE). Дополнительные сведения см. в разделе "Предоставление максимального объема памяти SQL Server" в электронной документации по SQL Server.

  • Перед настройкой параметра максимальной памяти сервера и минимального параметра памяти сервера для нескольких экземпляров SQL Server рассмотрите требования к памяти небуферного пула для каждого экземпляра SQL Server. Затем настройте эти параметры для каждого экземпляра SQL Server.

В идеале базовые сведения следует собирать во время пиковых нагрузок. Это позволит определить требования к памяти для различных приложений и компонентов, соответствующую максимальной загрузке системы. Требования к памяти могут быть разными для разных систем в зависимости от выполняемых действий и приложений. Вы можете запросить сведения, предоставленные в динамическом административном представлении sys.dm_os_process_memory, чтобы определить, сталкивается ли система с нехваткой памяти. Дополнительные сведения см. в статье sys.dm_os_process_memory (Transact-SQL).

Улучшения, добавленные в версии Windows Server 2008 и R2

В Windows Server 2008 и Windows Server 2008 R2 улучшен механизм выделения непрерывной памяти. Это улучшение позволяет Windows Server 2008 и Windows Server 2008 R2 до определенной степени сократить число проблем с выгрузкой на диск рабочего множества приложений при поступлении новых запросов на выделение памяти.

Ниже приведено пояснение к этим улучшениям, которое содержится в техническом документе Майкрософт "Усовершенствование управления памятью в Windows".

В Windows Server 2008 существенно улучшено выделение непрерывной физической памяти. Запросы на выделение непрерывной памяти гораздо чаще будут выполняться успешно, так как диспетчер памяти теперь динамически заменяет страницы, обычно без усечения рабочего набора и операций ввода-вывода. Кроме того, теперь намного больше типов страниц (например, стеки ядра и страницы метаданных файловой системы) назначаются кандидатами на замену. Следовательно, в любой момент времени доступно больше непрерывной памяти. Кроме того, значительно сокращаются затраты на получение таких выделений.

Дополнительные сведения см. в статье Проблемы SQL Server с усечением рабочего набора.

В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.