Проблемы с памятью в SQL Server Express 2008 R2 - PullRequest
1 голос
/ 25 октября 2011

У меня есть веб-сайт, работающий на сервере Windows 2008 R2, использующий базу данных SQL Server Express 2008 R2, и в последние несколько дней у меня возникали довольно неприятные проблемы с памятью.

Вот статистика сервера:

  • Это сервер Rackspace Cloud
  • Windows Server 2008 R2 Enterprise SP1 x64
  • Четырехъядерный процессор AMD Opteron 2,34 ГГц
  • 2 ГБ ОЗУ
  • SQL Server 2008 R2 Express Edition с расширенными службами x64
  • Используется полнотекстовая индексация

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

Предупреждение. Фатальная ошибка 9001 произошла 22 октября 2011 года в 5:02. Запишите ошибку и время и обратитесь к системному администратору.


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


Соединение с сервером было успешно установлено, но во время входа в систему произошла ошибка. (поставщик: поставщик общей памяти, ошибка: 0 - на другом конце канала нет процесса).


Ошибка: 4060, Серьезность: 11, Состояние: 1. (Параметры :). Ошибка печатается в кратком режиме, потому что во время форматирования произошла ошибка. Трассировка, ETW, уведомления и т. Д. Пропускаются. Ошибка: 18456, серьезность: 14, состояние: 1. (параметры :). Ошибка печатается в кратком режиме, потому что во время форматирования произошла ошибка. Трассировка, ETW, уведомления и т. Д. Пропускаются.


Ошибка: 3980, серьезность: 16, состояние: 1. (параметры :). Ошибка печатается в кратком режиме, потому что во время форматирования произошла ошибка. Трассировка, ETW, уведомления и т. Д. Пропускаются.

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

Я попытался перезапустить службу sqlexpress, а также перезапустить сервер. Оба решения устраняют симптомы, но проблема возвращается через 10-15 часов.

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

Вся помощь будет принята с благодарностью ... спасибо!

1 Ответ

4 голосов
/ 25 октября 2011

ERRORLOG будет содержать некоторую важную информацию о структуре распределения памяти, когда вещи начали ухудшаться.Строки будут выглядеть примерно так:

  MEMORYCLERK_SQLGENERAL (node 1)                                  KB 
   ---------------------------------------------------------------- --------------------
   VM Reserved                                                      0
   VM Committed                                                     0
   AWE Allocated                                                    0
   SM Reserved                                                      0
   SM Commited                                                      0
   SinglePage Allocator                                             136
   MultiPage Allocator                                              0

   (7 row(s) affected)

Поиск файлов ERRORLOG для таких случаев, следуйте инструкциям из Как использовать команду DBCC MEMORYSTATUS для мониторинга использования памяти в SQL Server 2005 , поскольку выходные данные DBCC MEMORYSTATUS и выходные данные в ERRORLOG из-за состояния OOM очень похожи.

...