SQL Server 2008 занимает много памяти? - PullRequest
11 голосов
/ 13 мая 2009

Я провожу стресс-тестирование в своей базе данных, которая размещена на 64-разрядной версии SQL Server 2008 на 64-разрядной машине с 10 ГБ ОЗУ.

У меня 400 потоков. Каждый поток запрашивает базу данных каждую секунду, но время запроса не занимает времени, как говорит профилировщик SQL, но через 18 часов SQL Server использует 7,2 ГБ ОЗУ и 7,2 ГБ виртуальной памяти.

Это нормальное поведение? Как настроить SQL Server для очистки неиспользуемой памяти?

Ответы [ 4 ]

27 голосов
/ 13 мая 2009

SQL Server предназначен для использования как можно большего количества памяти для повышения производительности за счет кэширования большого количества содержимого в памяти. Рекомендуется использовать выделенные машины для SQL Server, что делает этот подход совершенно правильным, так как он не ожидает, что кому-то еще понадобится память. Так что не стоит беспокоиться об этом; это совершенно нормально.

Тем не менее, если вы работаете на машине для разработки, а не в реальной среде, вы можете ограничить объем памяти, чтобы прекратить захват вашей коробки. В этом случае проще всего открыть SQL Server Management Studio, щелкнуть правой кнопкой мыши на сервере и выбрать «Свойства», затем на вкладке «Память» вы можете установить максимальный объем памяти сервера.

4 голосов
/ 07 января 2011

На самом деле, есть хитрый маленький трюк, чтобы получить то, что вы ищете. Проблема / вопрос заключается в том, как заставить SQL Server «временно» выделять память, которая ему не нужна, а затем позволить ему возобновить ее по мере необходимости.

Для этого запустите следующий скрипт:

EXEC sys.sp_configure N'show advanced options', N'1'

RECONFIGURE WITH OVERRIDE

GO

EXEC sys.sp_configure N'max server memory (MB)', N'{low water mark}'

GO

RECONFIGURE WITH OVERRIDE

GO

EXEC sys.sp_configure N'max server memory (MB)', N'{High water mark}'

GO

RECONFIGURE WITH OVERRIDE

GO

EXEC sys.sp_configure N'show advanced options', N'0'

RECONFIGURE WITH OVERRIDE

GO

Введите свои собственные значения для {знак низкого уровня воды} и {знак высокого уровня воды} (в МБ).

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

Единственное, что осталось сделать, - это запланировать выполнение сценария на периодической основе.

Рекомендация:

Если SQL Server интенсивно не используется, попробуйте запускать его каждые 6 часов автоматически. Если он интенсивно используется, запускайте его каждые 24 часа (скажем, среди ночи или непосредственно перед началом дня). Ваше использование будет отличаться.

1 голос
/ 15 мая 2009

Уходя от ответа Грега, когда вы настраиваете память, попробуйте оставить как минимум 10% общей памяти свободной для ОС. Если SQL выходит из-под контроля в длинном запросе, вы хотите, чтобы эта подушка могла удаленно входить в систему и по-прежнему управлять им.

0 голосов
/ 23 апреля 2012

http://support.microsoft.com/kb/961323

Я думаю, что это решение этой проблемы. Рекомендуется накопительное обновление. http://hotfixv4.microsoft.com/SQL%20Server%202008/nosp/SQL_Server_2008_Cumulative_Update_3/10.00.1787.00/free/370328_intl_x64_zip.exe

...