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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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 нуждается/хочет.

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

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

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

Ответ 3

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