В пуле ресурсов по умолчанию недостаточно системной памяти для выполнения этого запроса

Обновлено: 21.11.2024

Запуская Docker в Fedora 26 и пытаясь восстановить базу данных из резервной копии, я получаю сообщение об ошибке:

Ошибка SQL [701] [S00013]: недостаточно системной памяти в пуле ресурсов "по умолчанию" для выполнения этого запроса.

Дополнительная информация:

Команда, которую я использую для запуска Docker:

master.sys.configurations ГДЕ имя LIKE '%memory%'

ВОССТАНОВИТЬ ТОЛЬКО ФАЙЛИСТ
С ДИСКА = '/docker-mssql-fs/mydatabase.bak'

И команда, выдающая эту ошибку:

Как это решить?

Текст был успешно обновлен, но возникли следующие ошибки:

isapir прокомментировал 6 октября 2017 г. •

@twright-msft Добрый глаз! У меня действительно была опечатка, но после исправления я все равно получаю ту же ошибку. Я думаю, что процесс даже не доходит до того момента, когда он пытается проверить путь.

Есть идеи о том, как увеличить объем памяти и т. д. для экземпляра Docker MSSQL? Я пробовал некоторые команды DBCC, но продолжал получать ту же ошибку, что бы я ни делал.

прокомментировал rekahsoft 8 октября 2017 г.

У меня та же проблема, что и у @isapir.

isapir прокомментировал 8 октября 2017 г.

@rekahsoft Можете поделиться информацией о размере базы данных и/или настройках памяти?

прокомментировал rekahsoft 10 октября 2017 г.

Конечно, @isapir. Я восстанавливаю полную резервную копию 6 ГБ. Я использовал AWS и использовал пару разных экземпляров с 8 ГБ, 16 ГБ и 32 ГБ ОЗУ. Я обнаружил, что несмотря ни на что, mssql будет использовать только 8 ГБ и вылетит, как только достигнет порога 8 ГБ. Я использовал следующую команду для запуска образа докера mssql:

А затем восстановил резервную копию, используя:

Через некоторое время я получаю сообщение об ошибке: в пуле ресурсов "по умолчанию" недостаточно системной памяти для выполнения этого запроса. .

Однако я по-прежнему получаю ту же ошибку, и mssql не использует всю оперативную память. Насколько мне известно, экспресс-версия mssql для Windows имеет ограничение на 8 ГБ памяти. Возможно, это относится и к образу докера mssql?

Призрак прокомментировал 17 октября 2017 г.

Та же проблема возникает с изображениями :latest, :2017-latest и :GA-latest.

Мы попытались восстановить файл .bak размером 90 МБ. Хост - это Linux, поэтому контейнер mssql-server-linux имеет полный доступ к оперативной памяти хоста, которая составляет 24 ГБ.

Мы попытались запустить из контейнера, убедившись, что все файлы и пути имеют правильные уровни доступа пользователя, и с этой стороны ничего не изменилось.

Ghost прокомментировал 1 декабря 2017 г.

Та же проблема. Я хотел восстановить резервную копию размером 10 МБ и получил ту же ошибку. Недостаточно системной памяти в пуле ресурсов «по умолчанию» для выполнения этого запроса. (Microsoft SQL Server, ошибка: 701). Общий объем памяти Docker-Machine составляет 10 ГБ.

Версия: Microsoft SQL Server 2017 (RTM-CU1) (KB4038634) — 14.0.3006.16 (X64) 19 октября 2017 г. 02:42:29 Copyright (C) Microsoft Corporation Developer Edition, 2017 г. (64-разрядная версия) для Linux (Ubuntu 16.04.3 LTS)

isapir прокомментировал 1 декабря 2017 г.

Я хотел восстановить резервную копию размером 10 МБ и получил ту же ошибку. Недостаточно системной памяти

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

Ghost прокомментировал 1 декабря 2017 г. •

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

Да. У меня есть обходной путь для этого. Я установил виртуальную машину Windows Server 2016 с MSSQL Server 2016 и MSSQL Server Manager, после этого я подключил базу данных, восстановил ее с помощью резервной копии и создал новую резервную копию, после чего я смог использовать новую резервную копию на сервере Docker MSSQL.

isapir прокомментировал 1 декабря 2017 г.

Значит, резервная копия MSSQL Server 2016 восстанавливается в Docker MSSQL Server, а резервная копия более старого сервера — нет? Резервные копии, которые я тестировал, были созданы MSSQL 2008.

привидение прокомментировало 2 декабря 2017 г.

@isapir да, выглядит именно так.

rvdginste прокомментировал 3 декабря 2017 г.

У меня та же проблема с резервной копией из MSSQL 2008R2. Однако другая резервная копия из MSSQL 2008R2 восстанавливается нормально.

isapir прокомментировал 3 декабря 2017 г.

@rvdginste Можете ли вы назвать некоторые различия между двумя резервными копиями?

rvdginste прокомментировал 3 декабря 2017 г. •

@isapir Я пытался восстановить 8 баз данных (из MSSQL 2008R2), 5 удалось, а 3 не удалось. Единственное, что я могу сказать, это то, что самые большие (размер mdf) выходят из строя. Наименьший из этих 3 весит около 290 МБ, а самый большой из этих 5 — чуть меньше этого размера.

Редактировать: И я также могу подтвердить, что после восстановления и резервного копирования на MSSQL 2016 эти базы данных правильно восстанавливаются в образе Docker. Таким образом, обходной путь, предложенный @jerptrs, также работает для меня.

vrghost242 прокомментировал 8 марта 2018 г. •

У вас есть та же проблема, но вы еще не пробовали использовать виртуальную машину, но кажется, что ветка замолчала?

И обнаружил еще одну интересную проблему. База данных, созданная при восстановлении, существует, по крайней мере, частично. Но если я попытаюсь получить к нему доступ (используя DBVisualiser)

"База данных 'Surety' не может быть открыта из-за недоступных файлов или нехватки памяти или места на диске. Подробнее см. в журнале ошибок SQL Server."

А в логе написано:

(Есть второе сообщение об ошибке, ошибка: 928, серьезность: 20, состояние: 1. не уверен, связано ли это)

siddthota прокомментировал 28 марта 2018 г. •

У меня такая же проблема, когда я пытаюсь установить mssql-server-linux через docker-compose up.

база данных:
образ: microsoft/mssql-server-linux:2017-GA
среда:
- ACCEPT_EULA=Y
- SA_PASSWORD=AceSqlDB123
- USER =sa
порты:
- "1433:1433"

при попытке с помощью docker-compose up.

Он просто останавливается и ничего не делает. Я надеюсь получить решение. Я вижу, что эта тема не активна в течение последнего месяца. Будем признательны за любую помощь.

twright-msft прокомментировал 28 марта 2018 г.

@siddthota - похоже, ваш контейнер подошёл нормально. Это только конец первоначального вывода. Вы пробовали подключиться к нему? Я не думаю, что это та же проблема, которая изначально была поднята @isapir с восстановлением резервных копий базы данных. Или в вашей ситуации есть что-то, что вы не объяснили, что связывает ее с исходной проблемой?

SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Standard SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup Еще. Меньше

Microsoft распространяет исправления для Microsoft SQL Server 2008 и Microsoft SQL Server 2008 R2 в виде одного загружаемого файла. Поскольку исправления являются накопительными, каждый новый выпуск содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений SQL Server 2008 или SQL Server 2008.

Симптомы

При выполнении полнотекстового запроса с составными словами в Microsoft SQL Server 2008 или Microsoft SQL Server 2008 R2 в файле журнала ошибок появляется следующее сообщение об ошибке:

Date Time spidID Ошибка: 701, серьезность: 17, состояние: 123.
Date Time spidID Во «внутреннем» пуле ресурсов недостаточно системной памяти для выполнения этого запроса.

Кроме того, если вы успешно запустите полнотекстовый запрос после возникновения этой проблемы, вы получите такое же сообщение об ошибке.

Причина

Эта проблема возникает по всем следующим причинам:

В коде есть ошибка, которая используется для оценки того, сколько наборов строк требуется для выполнения операции сортировки. Поэтому код сильно завышает количество наборов строк. Требуемая оценка гранта в полнотекстовом режиме – 64 страницы для каждого набора строк, необходимого для сортировки.

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

Разрешение

Совокупная информация об обновлениях

SQL Server 2008 с пакетом обновления 1

Исправление для этой проблемы было впервые выпущено в накопительном обновлении 9 для SQL Server 2008 с пакетом обновления 1 (SP1). Чтобы получить дополнительные сведения об этом накопительном пакете обновления, щелкните следующий номер статьи базы знаний Майкрософт:

2083921 накопительное обновление 9 для SQL Server 2008 с пакетом обновления 1. Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений SQL Server 2008. Корпорация Майкрософт рекомендует рассмотреть возможность применения самого последнего выпуска исправления, содержащего это исправление. Для получения дополнительной информации щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

970365 Сборки SQL Server 2008, выпущенные после выпуска пакета обновления 1 для SQL Server 2008 Исправления Microsoft SQL Server 2008 создаются для определенных пакетов обновления SQL Server. Необходимо применить исправление SQL Server 2008 с пакетом обновления 1 (SP1) к установке SQL Server 2008 с пакетом обновления 1 (SP1). По умолчанию любое исправление, входящее в пакет обновления SQL Server, включается в следующий пакет обновления SQL Server.

SQL Server 2008 с пакетом обновления 2

Исправление для этой проблемы было впервые выпущено в накопительном обновлении 1 для SQL Server 2008 с пакетом обновления 2 (SP2). Для получения дополнительных сведений об этом накопительном пакете обновления щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

2289254 Накопительное обновление 1 для SQL Server 2008 с пакетом обновления 2. Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений SQL Server 2008.Мы рекомендуем рассмотреть возможность применения самого последнего выпуска исправления, содержащего это исправление. Для получения дополнительной информации щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

2402659 Сборки SQL Server 2008, выпущенные после выпуска пакета обновления 2 (SP2) для SQL Server 2008

SQL Server 2008 R2

Исправление для этой проблемы было впервые выпущено в накопительном обновлении 4. Чтобы получить дополнительные сведения о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2, щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

2345451 Накопительный пакет обновления 4 для SQL Server 2008 R2. Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений SQL Server 2008 R2. Мы рекомендуем рассмотреть возможность применения самого последнего выпуска исправления, содержащего это исправление. Для получения дополнительной информации щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

981356 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2

Статус

Microsoft подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе "Относится к".

Ссылки

Для получения дополнительных сведений о модели добавочного обслуживания для SQL Server щелкните следующий номер статьи базы знаний Майкрософт:

935897Команда SQL Server предлагает добавочную модель обслуживания для предоставления исправлений для выявленных проблем

Для получения дополнительных сведений о схеме именования обновлений SQL Server щелкните следующий номер статьи базы знаний Майкрософт:

822499Новая схема именования пакетов обновлений программного обеспечения Microsoft SQL ServerДополнительные сведения о полнотекстовом поиске см. на следующем веб-сайте Microsoft Developer Network (MSDN):

Полнотекстовый поиск (SQL Server)Для получения дополнительных сведений о терминологии обновлений программного обеспечения щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

824684 Описание стандартной терминологии, используемой для описания обновлений программного обеспечения Microsoft

Недостаточно памяти во внутреннем пуле ресурсов для выполнения этого запроса. SQL 2012 SP4, сборка 11.0.7462.6

В SQL Server 2012 с пакетом обновления 4 (SP4) сборки 11.0.7462.6 возникает ошибка «Недостаточно памяти во внутреннем пуле ресурсов для выполнения этого запроса».
Это происходит всякий раз, когда мы запускаем задания приложений, которые загружают PDF-файлы и обрабатывают их. Иногда эти задания завершаются сбоем из-за указанной выше ошибки.

Максимальный объем памяти на сервере SQL был увеличен с 12 ГБ до 28 ГБ, однако мы все еще наблюдаем сбои заданий из-за вышеуказанной ошибки, связанной с памятью.
Любая информация будет очень полезна.

Пожалуйста, опубликуйте вывод select @@version и выберите * из sys.dm_os_process_memory, а также можете ли вы запустить sp_readerrorlog, скопировать вывод и поделиться им на общем диске, чтобы я мог видеть, какой клерк использует больше памяти.
Также, пожалуйста, дайте мне знать общий размер всех БД и размер самой большой БД

Microsoft SQL Server 2012 (SP4-GDR) (KB4057116) — 11.0.7462.6 (X64)
5 января 2018 г. 22:11:56
Авторское право (c) Microsoft Corporation
Enterprise Edition (64-разрядная версия) в Windows NT 6.3 (сборка 9600: ) (гипервизор)

Общий размер всех БД 6523 ГБ = 6,5 ТБ
Размер наибольшей БД 3719 ГБ = 3,7 ТБ

8 ответов

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

Вы постоянно получаете эту ошибку, выполняя определенные действия? Вы смотрели на свою виртуальную память? У вас очень большой запрос?

Это очень часто происходит при выполнении заданий ETL. Иногда задания выполняются без проблем.
Также кажется, что эти запросы используют множество операторов UNION ALL. Мы увеличили объем памяти системы до 32 ГБ (память Windows server vm)

Какое значение имеет "Максимальный объем памяти сервера" в свойстве SQL Server? Если у вас есть фиксированный номер (НЕ 2147483647), вы должны изменить его после увеличения объема памяти.

максимальный объем памяти сервера, выделенный для SQL, составляет 28 ГБ
Общая системная память 32 ГБ

Что вы подразумеваете под "мы запускаем задания приложений, которые загружают PDF-файлы и обрабатывают их". это исполняемый файл, который обрабатывает pdf, а затем отправляет данные в SQL? если да, то почему он не запускается на другом компьютере, а затем отправляется на SQL Server?
Я серьезно надеюсь, что вы не используете CLR для обработки PDF-файлов. CLR вообще могут быть очень опасны

Я предлагаю выполнить этот запрос
SELECT b.virtual_address_space_reserved_kb vas_res, b.virtual_address_space_committed_kb vas_com
, b.physical_memory_in_use_kb phy_mem
FROM sys.dm_os_process_memory b

Результаты запроса

vas_res vas_com phy_mem

51527964 57949236 28891456

57 ГБ выделенной VAS, но только 28 ГБ оперативной памяти. Таким образом, память процесса SQL Server значительно выгружается. Плохо.

Управлять базой данных с объемом ОЗУ в 200 раз сложнее.

Если вы не можете добавить память, по крайней мере, уменьшите размер файла подкачки до 8 ГБ или разрешите блокировку страниц SQL Server в памяти. Либо блокирует использование SQL Server большего объема памяти (выделенные VAS), чем имеется у сервера.

Если вы не можете добавить память, по крайней мере, уменьшите размер файла подкачки до 8 ГБ или предоставьте SQL Server Lock Pages In Memory. Любой из них заблокирует использование SQL Server гораздо большего объема памяти (выделенные VAS), чем имеется у сервера.


Глупый вопрос: не значит ли это, что Равинда еще быстрее столкнется с этой ошибкой?

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

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

теперь предположим, что вы используете функции, требующие прямого выделения виртуального адресного пространства ОС в обход буферного кеша SQL. В идеальном случае вы объявляете объект, например: вызов xp, чтобы открыть XML-документ (старый API, а не новый API), сделать что-то, затем закрыть и освободить документ. Со временем резерв VAS будет увеличиваться, но выделенный VAS будет примерно по сравнению с используемой физической памятью.
однако, если выделенный VAS значительно превысит физическую память, это означает, что ОС должна выгружать страницы в файл подкачки, который действительно плохая вещь в современных системах.
На самом деле ситуация, когда требуется гораздо больше выделенных VAS, возникает не потому, что вам нужно так много в выделенных VAS, а потому, что кто-то забыл закрыть и освободить то, с чем он был сделан.< /p>

Здесь две проблемы

У вас мало физической памяти. У вас ТБ базы данных, а для SQL Server выделено только 28 ГБ

Вы выделили только 4 ГБ для ОС, что опять-таки может вызвать проблему, поскольку вы используете какое-то приложение для работы с файлами PDF, которому потребуется память вне буферного пула.

Но так как вы не вставили никакой конкретной информации. Трудно сказать.

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

В журнале ошибок мы видим недостаточно системной памяти во внутреннем пуле ресурсов для выполнения запроса.
После этого мы получаем ошибки входа в журнал ошибок.

И пока я не увижу этот журнал ошибок, будет сложно сказать, в чем проблема.

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

хорошо, а каковы последовательности кода SQL в задании для pdf, есть ли расширенные хранимые процедуры, определяет ли сетевое подключение размер пакета больше 8060 байт?

У меня нет этих подробностей, но я знаю, что эти задания выполняются без проблем в течение последних 2 лет. За последние несколько недель мы стали свидетелями сбоев в работе.

Просматривали ли вы ERRORLOG? Перезагрузил сервер? Что показывает dbcc memorystatus? В частности, объясняет ли это активное использование VAS? В противном случае может иметь место утечка памяти в неуправляемом компоненте, таком как сторонний поставщик связанных серверов.

Результаты запроса

vas_res vas_com phy_mem

51527964 57949236 28891456

да, это показывает более высокий уровень обязательного использования VAS.

в «нормальных» обстоятельствах с использованием только основных функций SQL Server, которые выделяются из пула буферов, и без прямого выделения ОС, выделенная память должна быть примерно равна физической памяти процесса.
В старых версиях SQL Server установка максимальной памяти сервера ограничивала только буферный пул, а не прямое выделение ОС.
В более поздних версиях целевая память теперь является комбинированным буфером + прямая?
Следовательно, если что-то делает прямое выделение ОС и не освобождает его после завершения, SQL Server начнет освобождать выделение буферного пула, чтобы принести общий объем памяти находится в пределах предела, установленного для цели.
Если сделано слишком много прямых выделений, то для буферного пула осталось слишком мало

Казалось бы, все, что делает прямое выделение ОС, не ограничено, поэтому зафиксированное значение увеличивается, чем целевое, и остается больше.
Однако что-то, что работает в пуле буферов, теперь сталкивается с ситуацией, когда оно генерирует сообщение об ошибке, потому что из пула буферов можно сделать очень небольшое выделение.
Возможно, необходимая функция для SQL Server, теперь, когда максимальная память сервера объединена пулом буферов + прямая, тогда также должна быть настройка для минимального пула буферов (не мин. памяти сервера), так что прямое выделение может вытолкнуть буферный пул только до установленного предела

Мы по-прежнему сталкиваемся с проблемой.Сборка SQL Server — 11.0.7462.6.
Если я обновлюсь до последней сборки, решит ли это проблему?

Последняя сборка чего? Есть более поздняя сборка SQL 2012, у меня 11.0.7493.4. Но поскольку SQL 2012 больше не поддерживается, я бы не ожидал, что в этой сборке будет решение вашей проблемы. И я действительно не думаю, что это проблема с самим SQL Server, поэтому я не уверен, что обновление до SQL 2019 поможет как таковое.

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

В этой статье обсуждается, как устранить сообщение об ошибке: во «внутреннем» пуле ресурсов недостаточно системной памяти для выполнения этого запроса . Даже если вы можете получить указанное выше сообщение об ошибке в разных случаях, одно можно сказать наверняка (в конце концов, сообщение говорит само за себя), оно связано с управлением памятью. 🙂

Почему возникает ошибка «Недостаточно системной памяти»

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

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

Щелкните правой кнопкой мыши имя экземпляра в SSMS — выберите «Свойства» — выберите вкладку «Память». Затем вы получите диалоговое окно ниже (в этом примере я установил максимальную память сервера 3 ГБ):

Описанный выше метод позволяет обеспечить стабильность ОС, не позволяя SQL Server использовать всю память в любом случае и оставляя часть памяти доступной для ОС.

Как решить проблему

Теперь, в случае, если вы получаете сообщение «Недостаточно системной памяти в пуле ресурсов «внутренний» для выполнения этого запроса. ” вы можете попробовать следующие действия:

Действие 1

Выполните команду T-SQL:

Как описано в статье библиотеки MSDN, приведенная выше команда заставит регулятор ресурсов сбросить статистику по всем группам рабочей нагрузки и пулам ресурсов, включая «внутренний» пул ресурсов.

Действие 2

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

Узнайте больше подобных советов! Запишитесь на наш онлайн-курс!

Познакомьтесь с нашим онлайн-курсом под названием « Основные советы по администрированию SQL Server » (специальная скидка, ограниченная по времени, указана по ссылке).

Изучите важные практические советы по администрированию SQL Server по обслуживанию, безопасности, производительности, интеграции, обработке ошибок и многому другому. Включено множество живых демонстраций и загружаемых ресурсов!

(пожизненный доступ / живые демонстрации / загружаемые ресурсы и многое другое!)

Зарегистрируйтесь сейчас со скидкой!

Избранные онлайн-курсы:

Другие статьи по устранению неполадок SQL Server, которые стоит проверить на SQLNetHub:

  • Имя объекта или столбца отсутствует или пусто
  • Ошибка операционной системы 170 (запрошенный ресурс уже используется)
  • Нет доступного для присоединения отказоустойчивого кластера SQL Server
  • Установка SQL Server 2016 на Windows Server 2012 R2: ошибка правила KB2919355
  • Не удалось запустить программу установки на удаленном компьютере. Проверьте журнал событий планировщика заданий на удаленном компьютере.
  • Соединение с сервером было успешно установлено, но затем во время входа в систему произошла ошибка.
  • Сбой установки пакета обновления SQL Server 2008 R2 — элемент не найден. (Исключение из HRESULT: 0x80070490)
  • Не удалось загрузить файл или сборку «Microsoft.SqlServer.Smo, Version=10.0.0.0, …
  • Исправлено: установка VS Shell завершилась с ошибкой с кодом выхода 1638.
  • inirrlog: не удалось открыть файл журнала ошибок. Ошибка операционной системы = 3… – Как решить
  • Устранение ошибки CTE SQL Server: неправильный синтаксис рядом с ‘)’.

Подпишитесь на нашу рассылку и будьте в курсе!

Подпишитесь на наш канал YouTube (SQLNetHub TV)

Легко создавайте фрагменты с помощью генератора фрагментов!

Защитите свои базы данных с помощью DBA Security Advisor!

Посмотрите наши последние версии программного обеспечения!

Посмотрите наши электронные книги!

Оцените эту статью: (8 голосов, средний балл: 4,50 из 5)

За последний год мы столкнулись с ситуацией, когда множество разных запросов одновременно завершались с ошибкой со следующей ошибкой (или изменением в другой группе управления ресурсами): Недостаточно системной памяти в пуле ресурсов "по умолчанию" чтобы выполнить этот запрос.

В последнее время мы сталкиваемся с этим все чаще и чаще. Любые идеи о том, что вызывает проблему и как ее решить?

Microsoft SQL Server 2012 (SP3) (KB3072779) — 11.0.6020.0 (X64) 20 октября 2015 г. 15:36:27 Авторское право (c) Microsoft Corporation Enterprise Edition: Лицензирование на основе ядер (64-разрядная версия) на Windows NT 6.1 (сборка 7601: пакет обновления 1)

Примеры ошибок, которые происходят одновременно:

Значения памяти из журнала:

Можете ли вы опубликовать вывод select type, sum(multi_pages_kb) из sys.dm_os_memory_clerks, где multi_pages_kb != 0 сгруппировать по типу

Сообщение 207, уровень 16, состояние 1, строка 1. Недопустимое имя столбца «multi_pages_kb». Сообщение 207, уровень 16, состояние 1, строка 1. Недопустимое имя столбца «multi_pages_kb».

настройка памяти (MIN 0 , max 170000, RAM сервера 224, используется sql SERVER 11468984 КБ (AWE - 166519756 КБ), используется Windows 229341 МБ)

Можете ли вы добавить вывод запросов в свой вопрос, который я разместил в этой ссылке. Также, пожалуйста, сообщите нам, как настроен регулятор ресурсов, мне кажется, это больше проблема регулятора ресурсов.

2 ответа 2

Из того, что вы опубликовали, я вижу

Значение составляет 38 ГБ, что очень много. Почему операции SQL Server (сортировка и хэш) требуют так много памяти

Что такое SQLRESERVATIONS

Память SQL Server, выделенная во время выполнения запроса для операций сортировки и хеширования. Вы действительно думаете, что 38 G — это то, что требуется для операций сортировки и хэширования. В этом проблема.

Просмотр конфигурации регулятора ресурсов

Просто взгляните на REQUEST_MAX_MEMORY_GRANT_PERCENT=100, теперь мне кажется, что это очень неправильная конфигурация. Согласно документу BOL

REQUEST_MAX_MEMORY_GRANT_PERCENT = значение Указывает максимальный объем памяти, который один запрос может получить из пула. Этот процент относится к размеру пула ресурсов, указанному MAX_MEMORY_PERCENT

Это означает, что когда запросы выполняются в этой рабочей нагрузке, они могут запрашивать почти ВСЮ память в качестве выделения памяти для выполнения там, заставляя других голодать по памяти. И это определенно может вызвать ошибку OOM.

Еще больше того, что говорит Microsoft

Мы не рекомендуем устанавливать значение больше 70, так как сервер может быть не в состоянии выделить достаточно свободной памяти, если выполняются другие параллельные запросы. В конечном итоге это может привести к ошибке времени ожидания запроса 8645

Можете ли вы также поделиться выводом

ИЗМЕНИТЬ:

Из опубликованного вами вывода

Теперь вы видите, что ваша рабочая группа обрабатывает так много запросов, и видите, что объем запрашиваемой памяти варьируется от 19 ГБ до 32 ГБ. обратите внимание, что память для рабочей группы не будет использоваться совместно.

Вы также можете увидеть

Сеансу с идентификатором 210 было предоставлено 19 ГБ памяти. Это грубая ошибка. просто рассмотрим сценарий, если 5-10 таких запросов начнут выполняться.

Читайте также: