Назад | Перейти на главную страницу

SQL Server 2005: недостаточно системной памяти для выполнения этого запроса

Один из наших SQL-серверов, который стабильно работает довольно долгое время (годы), недавно выдает ошибки недостаточного объема памяти. Из журнала событий приложения мы видим:

ID события: 701

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

Наша команда, которая управляет этим сервером, состоит в основном из разработчиков, которые вдвое выполняют обязанности системного администратора. Однако наша основная специализация - развитие. При этом мы не понимаем, как решать эту проблему. Мы прочесали форумы и еще много чего и не нашли ничего подходящего

Итак, вот еще несколько деталей, которые помогут в устранении неполадок:

РЕДАКТИРОВАТЬ:

Мы на SP3. Большинство найденных нами сообщений были до SP1, что к нам не относится.

SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

возвращается

9.00.4035.00 SP3 Standard Edition

Сообщение об ошибке «Недостаточно системной памяти для выполнения этого запроса». относится к недоступности виртуального адресного пространства (VAS), а не к памяти в общепринятом смысле, то есть в пространстве процесса SQL Server.

Учитывая, что вы используете только 3 ГБ на этом сервере, а SQL Server был назначен до 2 ГБ, это означает, что ОС и, что более важно, все остальное на коробке имеет менее 1 ГБ для игры. Это не так уж много памяти.

Если эта проблема действительно вызвана утечкой памяти, то используется VAS за пределами пространства процесса SQL Server (memToLeave).

Я бы предложил использовать параметр запуска -g, чтобы выделить больше памяти для части memToLeave.

См. Дополнительную информацию в следующей статье:

http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/

Вы также можете уменьшить максимальный объем памяти SQL Server, но я бы сделал это в крайнем случае.

Я бы также посоветовал использовать параметр запуска -g. Кажется, это работает для большинства людей и, вероятно, сработает и для вас. Меня беспокоит только то, что основная проблема не может быть решена. Например, если есть утечка памяти из-за связанного сервера, а MTL увеличен до 512 МБ, будет ли это просто более длительный период между проблемами памяти? Я не знаю ответа на этот вопрос, но я склонен согласиться с UndertheFold в том, что перфомон может быть хорошим началом.

Это может быть связано с утечкой памяти драйвера связанного сервера, согласно этой ветке форума:

Вот что нам рассказала Microsoft.

Очевидно, обработка данных с использованием связанного сервера, в частности драйвера fox pro, вызывает утечку памяти, которая со временем накапливается.

Этот сервер можно использовать как сервер приложений (пара служб Windows) и веб-сервер, а также как сервер базы данных.

Я бы установил вашу минимальную память - вполне возможно, что этот другой процесс «крадет» память у SQL

Вы можете запустить журнал счетчика с помощью perfmon, чтобы подтвердить это и / или дать себе дополнительную информацию, чтобы определить, в чем реальная проблема.

Ссылка взята из этого блога!

Есть разные альтернативы для решения этой проблемы.

Первый, Проверьте настройки SQL Server на «минимальную память сервера» и «максимальную память сервера». Если вы обнаружили очень небольшую разницу в обоих значениях, увеличьте «максимальный объем памяти сервера».

Во-вторых, Обнаружены длительные запросы с информацией об использовании памяти, и если этот запрос находится в состоянии ожидания, проверьте и завершите этот процесс. Оптимизация производительности базы данных - важная вещь для использования памяти.

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

В-четвертых, Проверьте размер файла подкачки виртуальной памяти и увеличьте размер этого файла.

Пятое, Проверьте размер «минимальной памяти на запрос»: по умолчанию он равен 1024 КБ, но в редких случаях вы можете уменьшить размер этого параметра. Вообще-то это не рекомендуется, но вы можете попробовать.

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