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


Устранение проблемы нехватки памяти

SQL Server In-Memory OLTP использует больше памяти и делает это иначе, чем SQL Server. Возможно, объем установленной и выделенной памяти для OLTP в оперативной памяти становится недостаточным для растущих потребностей. В таком случае может возникнуть нехватка памяти. В этом разделе описывается, как восстановиться после ситуации нехватки памяти. В статье Наблюдение и устранение неисправностей при использовании памяти вы найдете рекомендации, которые помогут вам избежать многих ситуаций нехватки памяти.

Темы данного раздела

Тема Обзор
Устранить ошибки восстановления базы данных, возникающие из-за нехватки памяти Что делать, если появится сообщение об ошибке: "Операцию восстановления для базы данных '<databaseName>' не удалось выполнить из-за нехватки памяти в пуле ресурсов '<resourcePoolName>'".
Устранить воздействие нехватки свободной памяти или условий OOM на рабочую нагрузку Что следует предпринять, если обнаружится, что недостаток памяти отрицательно влияет на производительность.
Устранение ошибок выделения страниц, возникших из-за нехватки памяти при наличии достаточных ресурсов памяти Что делать, если появится сообщение об ошибке: «Невозможно выделить страницы для базы данных "databaseName" из-за недостатка памяти в пуле ресурсов "resourcePoolName". если объема доступной памяти достаточно для выполнения операции.

устранить ошибки восстановления базы данных, возникающие из-за нехватки оперативной памяти

При попытке восстановить базу данных может появиться сообщение об ошибке : "Операция восстановления завершилась ошибкой для базы данных< databaseName>" из-за нехватки памяти в пуле ресурсов resourcePoolName<>". Прежде чем успешно восстановить базу данных, необходимо устранить проблему с недостаточной памятью, сделав больше памяти доступной.

Чтобы устранить сбой восстановления из-за нехватки памяти (OOM), временно увеличьте объем доступной памяти с помощью одного или нескольких из следующих методов.

  • Временно закройте выполняющиеся приложения.
    Закрыв одно или несколько запущенных приложений, таких как Visual Studio, Internet Explorer, OneNote и другие, вы делаете память, которую они использовали, доступной для операции восстановления. Эти приложения можно будет перезапустить после успешного завершения восстановления.

  • Увеличьте значение MAX_MEMORY_PERCENT.
    В этом фрагменте кода значение параметра MAX_MEMORY_PERCENT для пула ресурсов PoolHk увеличивается до 70 % от установленной памяти.

    Это важно

    Если сервер выполняется на ВМ и не выделен, установите такое же значение MIN_MEMORY_PERCENT, как и MAX_MEMORY_PERCENT.
    Дополнительные сведения см. в статье Использование In-Memory OLTP в среде ВМ .

    
    -- disable resource governor  
    ALTER RESOURCE GOVERNOR DISABLE  
    
    -- change the value of MAX_MEMORY_PERCENT  
    ALTER RESOURCE POOL PoolHk  
    WITH  
         ( MAX_MEMORY_PERCENT = 70 )  
    GO  
    
    -- reconfigure the Resource Governor  
    --    RECONFIGURE enables resource governor  
    ALTER RESOURCE GOVERNOR RECONFIGURE  
    GO  
    
    

    Сведения о максимальных значениях для MAX_MEMORY_PERCENT см. в разделе "Процент памяти", доступном для таблиц и индексов, оптимизированных для памяти.

  • Перенастройка максимальной памяти сервера.
    Сведения о настройке максимальной памяти сервера см. в разделе "Оптимизация производительности сервера с помощью параметров конфигурации памяти".

устранить влияние нехватки свободной памяти или состояния OOM на рабочую нагрузку

Очевидно, лучше всего избегать ситуаций с низким объемом памяти или OOM (Out of Memory). Помочь в этом может хорошее планирование и отслеживание. Тем не менее, даже самое лучшее планирование не всегда предсказывает, что происходит на самом деле, и вы можете столкнуться с нехваткой памяти или ситуацией OOM. Для восстановления после ошибки "Out Of Memory" (OOM) необходимо выполнить два действия.

  1. Откройте выделенное административное соединение (DAC)

  2. Примените действие по исправлению

Откройте выделенное административное соединение (DAC)

Microsoft SQL Server предоставляет выделенное подключение администратора (DAC). С помощью DAC администратор может получить доступ к работающему экземпляру движка базы данных SQL Server для устранения неполадок на сервере, даже если сервер не отвечает на другие клиентские соединения. DAC доступен через sqlcmd утилиту и среду SQL Server Management Studio (SSMS).

Инструкции по использованию sqlcmd и DAC см. в разделе "Использование выделенного подключения администратора". Инструкции по использованию DAC с помощью SSMS см. в статье "Практическое руководство. Использование выделенного подключения администратора с SQL Server Management Studio".

Примените действие по исправлению

Для устранения проблемы недостатка памяти необходимо либо освободить часть существующей памяти за счет уменьшения её использования, либо выделить дополнительный объем для таблиц в оперативной памяти.

Освобождение имеющейся памяти

Удалите необязательные строки таблиц, оптимизированных для памяти, и дождитесь завершения сборки мусора.

Можно удалить неважные строки из оптимизированной для памяти таблицы. Сборщик мусора возвращает используемую этими строками память в доступную. . Компонент In-memory OLTP выполняет сбор ненужных строк агрессивно. Однако длительная транзакция может помешать сбору мусора. Например, если имеется транзакция, которая выполняется в течение 5 минут, все версии строк, созданные из-за операций обновления или удаления во время выполнения транзакции, не подпадают под сборку мусора.

Переместить одну или несколько строк в таблице на диске

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

Увеличение объема доступной памяти

Увеличение значения MAX_MEMORY_PERCENT для пула ресурсов

Если вы не создали именованный пул ресурсов для таблиц в памяти, необходимо выполнить это и привязать к ней базы данных OLTP в памяти. Дополнительные сведения о создании и привязке баз данных OLTP к пулу ресурсов см. в разделе "Привязка базы данных с оптимизированными для памяти таблицами " к пулу ресурсов.

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

Увеличьте значение MAX_MEMORY_PERCENT.
В этом фрагменте кода значение параметра MAX_MEMORY_PERCENT для пула ресурсов PoolHk увеличивается до 70 % от установленной памяти.

Это важно

Если сервер выполняется на ВМ и не выделен, установите такое же значение MIN_MEMORY_PERCENT, как и MAX_MEMORY_PERCENT.
Дополнительные сведения см. в статье Использование In-Memory OLTP в среде ВМ .

  
-- disable resource governor  
ALTER RESOURCE GOVERNOR DISABLE  
  
-- change the value of MAX_MEMORY_PERCENT  
ALTER RESOURCE POOL PoolHk  
WITH  
     ( MAX_MEMORY_PERCENT = 70 )  
GO  
  
-- reconfigure the Resource Governor  
--    RECONFIGURE enables resource governor  
ALTER RESOURCE GOVERNOR RECONFIGURE  
GO  
  

Дополнительные сведения о максимальных значениях параметра MAX_MEMORY_PERCENT см в разделе Процент памяти, доступной для оптимизированных для памяти таблиц и индексов.

Установка дополнительной памяти

В конечном счете наилучшим решением является установка дополнительной памяти. Если это сделать, помните, что вы, вероятно, сможете также увеличить значение MAX_MEMORY_PERCENT (см. раздел "Изменение" MIN_MEMORY_PERCENT и MAX_MEMORY_PERCENT в существующем пуле), так как SQL Server, скорее всего, не потребует больше памяти, что позволит вам сделать большую часть только что установленной памяти доступной для пула ресурсов.

Это важно

Если сервер выполняется на ВМ и не выделен, установите такое же значение MIN_MEMORY_PERCENT, как и MAX_MEMORY_PERCENT.
Дополнительные сведения см. в статье Использование In-Memory OLTP в среде ВМ .

Устранение ошибок выделения страниц, возникших из-за нехватки памяти при наличии достаточных ресурсов памяти

Если вы получите сообщение об ошибке "Запрещено выделение страниц для базы данных '<названиеБазыДанных>' из-за нехватки памяти в пуле ресурсов '<названиеПулаРесурсов>'. https://go.microsoft.com/fwlink/?LinkId=330673Дополнительные сведения см. в журнале ошибок, если доступной физической памяти достаточно для выделения страницы, это может быть связано с отключенным регулятором ресурсов. Если регулятор ресурсов отключен, то MEMORYBROKER_FOR_RESERVE вызывает искусственную нагрузку на ресурсы памяти.

Для устранения этой ошибки необходимо включить регулятор ресурсов.

См. в разделе Включение регулятора ресурсов дополнительные сведения об ограничениях, а также рекомендации по включению регулятора ресурсов через обозреватель объектов, свойства регулятора ресурсов или Transact-SQL.

См. также

Управление памятью для компонента In-Memory OLTP
Наблюдение и устранение неисправностей при использовании памяти
Привязка базы данных с таблицами, оптимизированными для памяти, к пулу ресурсов
Рекомендации. Использование In-Memory OLTP в среде виртуальной машины