#sql-server #sql-server-2008 #memory #sql-server-express #out-of-memory
#sql-сервер #sql-server-2008 #память #sql-server-express #нехватка памяти
Вопрос:
У меня есть веб-сайт, работающий на сервере Windows 2008 R2, использующий базу данных SQL Server Express 2008 R2, и в последние несколько дней у меня возникли довольно неприятные проблемы с памятью.
Вот статистика сервера:
- Это облачный сервер Rackspace
- 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. Пожалуйста, свяжитесь со мной по адресу marco.marsala ПО АДРЕСУ live.it чтобы узнать, применимо ли наше решение в вашем случае, чтобы определенно устранить первопричину этой досадной проблемы
Ответ №1:
Журнал ОШИБОК будет содержать некоторую важную информацию о шаблоне распределения памяти, когда ситуация начала ухудшаться. Строки будут выглядеть примерно так:
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)
Для поиска таких случаев в файлах журнала ОШИБОК следуйте инструкциям из инструкции по использованию команды DBCC MEMORYSTATUS для мониторинга использования памяти на SQL Server 2005, поскольку выходные данные DBCC MEMORYSTATUS и выходные данные в ЖУРНАЛЕ ОШИБОК из-за состояния ООМ очень похожи.
Комментарии:
1. Я нашел одно из случаев, но я все еще не уверен, что я ищу. Я прочитал ту ссылку MEMORYSTATUS, которую вы мне дали, но я все еще не уверен, что я ищу. Я загрузил выдержку из журнала ОШИБОК здесь, если вы хотите взглянуть: db.tt/Jv3y643t Дайте мне знать, если увидите какие-нибудь красные флажки. Спасибо!
2.MEMORYCLERK_FULLTEXT занимает 963840 Кб. Каково состояние
sys.dm_fts_memory_buffers
msdn.microsoft.com/en-us/library/ms180044.aspx ? Согласно msdn.microsoft.com/en-us/library/ms142560.aspx , ваши 2 ГБ ужасно неадекватны.3. Спасибо! Я уже в значительной степени планировал увеличить объем оперативной памяти на этом сервере. Я просто не уверен, что это решит эту проблему или просто приведет к тому, что для исчерпания памяти потребуется немного больше времени. Что касается
sys.dm_fts_memory_buffers
, я только что выполнил запрос select и получил нулевые строки. Я попробую запустить его снова, когда начнут поступать ошибки.4. Запрос следует запускать, когда в системе мало памяти. Но он все равно может возвращать 0, указывая на то, что операция построения индекса FT не выполняется.
5. Я следил за системой, но, конечно, проблемы с нехваткой памяти больше не появляются. Я все равно собираюсь увеличить объем памяти в системе. Спасибо за вашу помощь!