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

Обновлено: 07.07.2024

У меня есть работающий сервис, который получает 50-100 запросов в минуту. И это не дорогостоящие запросы. Эта служба работает около 3-4 месяцев без каких-либо ошибок.

1.5 gb ram и% 25 CPU (все 1/4CPU). И когда я перезапустил sqlservr.exe , барабан начинается с

50 МБ и медленно увеличивается, пока он не станет

1,5 ГБ, а затем приведет к сбоям в приложениях, использующих его.

60 мб памяти, но через час, к сожалению, эта же проблема возникла, но на этот раз используемая память, которую я вижу в диспетчере задач Windows, все еще

60 Мб, не превышая никаких ограничений.

Я использую EntityFramework как ORM в службе wcf. И вместе с этим у меня есть система SqlQueryNotification (брокер и прочее) для некоторых операций кеширования.

Не хватает ли некоторых важных точек конфигурации? Или 6 гб памяти и моего 4-го процессора действительно недостаточно для этого? Но это не может быть так, потому что одна и та же загрузка была такой, как в течение 3 месяцев, и тогда не было никакой ошибки, и нет никаких изменений в кодах.

ram allocated

ram usage

SQL Server начнет с того, что потребуется столько памяти, а затем медленно наращивается, пока он не использует все выделенные ему свойства сервера:

введите описание изображения здесь

Он не освободит какую-либо из этой памяти до перезапуска службы; это по дизайну.

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

Тем не менее, 1,5 ГБ оперативной памяти для SQL Server не так уж и много. Если у вас больше нет доступа, возможно, пора добавить или обновить сервер.

Я использую SQL Server 2014 - 12.0.2269.0 (X64) в Windows Server 2012, и у меня возникают некоторые проблемы с памятью. Когда я запускаю хранимую процедуру, которая выполняет довольно «тяжелые» вычисления, я получаю ошибку примерно через 10 минут:

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

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

Я также сгенерировал отчет с графиком, который показывает тот же «вывод»:

![использование памяти

Вот, может быть, еще один полезный отчет:

введите описание изображения здесь

введите описание изображения здесь

Обратите внимание, что я также видел эту ошибку в журнале:

2015-12-17 12: 04: 52.37 spid70 Не удалось выделить страницу из-за нехватки памяти базы данных: FAIL_PAGE_ALLOCATION 8

Вот некоторая информация относительно памяти сервера:

Общий объем памяти на сервере: 16 Гб

Память, выделенная для сервера SQL: 12288 Мб

Используемая физическая память (с sys.dm_os_process_memory ): 9287 Мб

Если это может помочь, на сервере не размещается база данных SharePoint.

Каков максимальный объем памяти и общий объем оперативной памяти на сервере?

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

То, что вы видите, - это не то, MEMORYCLERK_SQLBUFFERPOOL что MEMORYCLERK_SQLLOGPOOL занимает всю память.

Существует известная проблема с SQL 2012 SQL Server 2012 ошибки из-за нехватки памяти . Даже если вы работаете в 2014 году, есть вероятность, что вы столкнетесь с той же проблемой (хотя я не смог найти элемент подключения в 2014 году).

Также существует известная проблема как для 2014, так и для 2012 года, связанная с перестройкой индекса и always on . Вы не указали, что используете это, но, возможно, у той же ошибки есть и другие триггеры: FIX: кэш-память SQL уменьшается и увеличивается загрузка ЦП, когда вы перестраиваете индекс для таблицы в SQL Server

Поэтому мое лучшее предложение на данный момент - обновить до последней CU и посмотреть, произойдет ли это все еще, поскольку в последнее время было несколько исправлений MEMORYCLERK_SQLLOGPOOL . Поскольку вы работаете с RTM только с двумя исправлениями безопасности, которые могут иметь смысл, в SP1 + доступно несколько CU.

Так как в этой статье MEMORYCLERK_XTP используется довольно высокое использование памяти , in-memory OLTP это может помочь в устранении неполадок: мониторинг и устранение неполадок в использовании памяти

Эта статья посвящена SQL Server. Сведения об устранении проблем нехватки памяти в Базе данных SQL Azure см. в статье Устранение ошибок нехватки памяти в Базе данных SQL Azure.

Пояснение

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

Диагностические запросы, например инструкции DBCC, могут выдавать ошибку, потому что у сервера недостаточный объем памяти.

Истекло время ожидания ресурсов памяти для выполнения запроса в пуле ресурсов «default».

Рекомендуемые действия

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

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

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

Начните сбор счетчиков системного монитора для SQL Server : Buffer Manager, SQL Server: Memory Manager.

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

max server memory

min server memory

min memory per query

Обратите внимание на нестандартные параметры. При необходимости измените их. Учтите, что требования к объему памяти возросли. Настройки по умолчанию приведены в статье Параметры конфигурации памяти сервера.

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

Следующие действия могут позволить использовать больший объем памяти в SQL Server:

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

Если установлен параметр max server memory, увеличьте его значение. Дополнительные сведения см. в разделе Настройка параметров вручную.

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

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


У меня есть работающая служба, которая получает 50-100 запросов в минуту. И это не дорогие запросы. Сервис работает без ошибок около 3-4 месяцев.

1,5 ГБ оперативной памяти и% 25 ЦП (всего 1/4 ЦП). И когда я перезапустил , оперативная память начинается с

50 МБ и медленно увеличивается, пока не станет

1,5 ГБ, что приводит к сбоям в приложениях, использующих его.

60 МБ памяти, но через час, к сожалению, возникла такая же проблема, но на этот раз используемая память, которую я вижу в диспетчере задач Windows, все еще составляет

60 МБ не превышая никаких ограничений.

Я использую как ORM в сервисе wcf. И вместе с этим у меня есть система (брокер и прочее) для некоторых операций кеширования.

Я упустил некоторые важные моменты конфигурации? Или 6гб памяти и моих 4 ЦП реально для этого мало? Но этого не может быть, потому что одна и та же нагрузка была такой в ​​течение 3 месяцев, и тогда не было никаких ошибок, и нет никаких изменений кодов.



  • 6 Вы просто перешли с Express на Enterprise? Бесплатно? Где я могу получить эту потрясающую сделку ?!
  • покажите свой код, вы, должно быть, истощаете ресурсы сервера, не очищая соединения .
  • 2 Если у вас есть компания, Microsoft предлагает ее с программой bizspark. Предлагаю вам это проверить.
  • Что установлено в MaxMemory для SQL Server? Это 32-битный или 64-битный?
  • Я использую операторы , когда собираюсь каждый раз подключаться к базе данных. Так что я уверен, что не позволю какой-либо связи оставаться открытой. И моя система 64-битная. И 6144 МБ - это максимальный объем памяти сервера, который я установил в свойствах сервера.

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


Он не освободит какую-либо часть этой памяти, пока служба не будет перезапущена; это задумано.

Обычно рекомендуется оставлять для ОС 2 ГБ, и вам нужно помнить о любой другой обработке, выполняемой на том же сервере, что и SQL. Обычно рекомендуется иметь SQL Server на собственном сервере, и на нем больше ничего не работает.

Тем не менее 1,5 ГБ оперативной памяти для SQL Server - это не так уж и много. Если у вас нет других доступных, возможно, пришло время добавить некоторые или обновить сервер.

Смотрите также: Technet, Brent Ozar

  • Нет, это не так. На этой машине сейчас у меня 12 ГБ оперативной памяти, и у меня много доступной памяти. Я могу легко увеличить объем памяти в любое время. И что самое забавное, теперь sqlervr.exe, похоже, никогда не использует больше 70 МБ.
  • Но он все равно вылетает с этим исключением памяти примерно через 1 час.
  • @TolgaEvcimen есть ли на этом сервере другие программы? Сколько физической памяти вы используете, по словам resmon.exe?
  • @TolgaEvcimen, сколько памяти sys.dm_os_sys_info и sys._dm_os_performance_counters показывают, что sql использует и сколько доступно?
  • 1 Продолжим это обсуждение в чате.

Я отправляю этот ответ, потому что кому-то он может быть полезен.

Вы можете установить даже с помощью этого запроса:

Также вы можете использовать этот запрос для освобождения памяти без перезапуска службы просто установив значение 2 ГБ (2048) и снова вернувшись к 32 ГБ (32768) или выбрав желаемое значение.

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

В нашем случае это произошло из-за типов таблиц, оптимизированных для памяти, с огромным объемом данных. Одновременно было несколько вызовов разных хранимых процедур, каждая из которых использовала один и тот же тип таблицы и загружала в нее огромное количество записей (> 100 000). Для нашего приложения был способ пропустить вставку данных в тип таблицы и использовать ее только в особых случаях.

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

Я также создал отчет с графом, который показывает тот же «вывод»:

! [использование памяти

Вот, может быть, еще один полезный отчет:

 введите описание изображения здесь>> </a> </p> <p> <a href=
 введите описание изображения здесь>> </a> </p> <p> Обратите внимание, что я также видел эту ошибку в журнале: </p> <blockquote> <p> 2015-12-17 12: 04: 52.37 spid70 Не удалось выделить страницу из-за давление в памяти базы данных: FAIL_PAGE_ALLOCATION 8 </p> </blockquote> <p> Ниже приведена информация о памяти сервера: </p> <ul> <li> <p> Общая память на сервере: 16 ГБ </p> </li> <li> <p> Память, выделенная для SQL-сервера: 12288 МБ </p> </li> <li> <p> Используемая физическая память (из <кода> ---- +: = 1 =: + ----</code>): 9287 МБ </p> </li> </ul> <p> Если это может помочь, на сервере не размещена какая-либо база данных SharePoint. </p></body></html>

1 ответ

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

То, что вы видите, это не MEMORYCLERK_SQLBUFFERPOOL , но MEMORYCLERK_SQLLOGPOOL занимает всю память.

Известна проблема с SQL 2012 SQL Server 2012 испытывает ошибки из памяти . Несмотря на то, что вы используете 2014, есть вероятность, что вы столкнулись с той же проблемой (хотя я не смог найти элемент соединения для 2014 года).

Существует также эта известная проблема как для 2014, так и для 2012 года с использованием перестроек индексов и always on . Вы не указали, что используете это, но, возможно, одна и та же ошибка содержит другие триггеры: FIX: SQL Кэш-память уменьшается, а использование ЦП увеличивается при перестройке индекса для таблицы в SQL Server

Итак, на мой взгляд лучше всего обновить до последнего CU и посмотреть, все ли это происходит, так как было несколько исправлений вокруг MEMORYCLERK_SQLLOGPOOL недавно. Поскольку вы используете RTM с 2 исправлениями безопасности, которые могут иметь смысл, имеется доступный пакет обновления 1 (SP1 +).

Так как в MEMORYCLERK_XTP используется также довольно большое использование памяти, используемое in-memory OLTP Эта статья может помочь вам устранить неполадки: Мониторинг и устранение неполадок использования памяти

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