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

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

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

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


person Ahmed Said    schedule 13.05.2009    source источник
comment
Как вы измеряете эти цифры? Имейте в виду, что диспетчер задач может давать цифры, которые вводят в заблуждение (я всегда выбираю perfmon и смотрю на частные/виртуальные байты)   -  person Rowland Shaw    schedule 13.05.2009
comment
Я отслеживаю сервер sql с помощью диспетчера задач и отдельного приложения dotnet, которое использует класс PerformanceCounter.   -  person Ahmed Said    schedule 13.05.2009


Ответы (4)


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

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

person Greg Beech    schedule 13.05.2009

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

person Dave Balsillie    schedule 07.01.2011

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

person SQLChicken    schedule 15.05.2009

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

person MSajjadi    schedule 23.04.2012