SQL Server 2008 занимает много памяти?

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

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

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

4 ответа

Решение

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

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

На самом деле, есть хитрый маленький трюк, чтобы получить то, что вы ищете. Проблема / вопрос в том, как заставить 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 часа (скажем, среди ночи или непосредственно перед началом дня). Ваше использование будет отличаться.

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

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

Другие вопросы по тегам