2009-05-13 5 views
11

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

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

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

+0

Как вы измеряете эти цифры? Имейте в виду, что диспетчер задач может давать цифры, вводящие в заблуждение (я всегда выбираю perfmon и смотрю на частные/виртуальные байты) –

+0

Я контролирую SQL-сервер, используя диспетчер задач и отдельное приложение dotnet, которое использует класс PerformanceCounter –

ответ

27

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

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

1

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

4

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

Put в ваших собственных значениях {низкий водяной знак} и {половодья знака} (в мегабайтах).

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

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

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

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

Смежные вопросы