Мы установили SQL 2008 R2 Enterprise на сервер Window 2008. У него 24 ГБ ОЗУ. Сервер SQL захватывает всю память во время задания оптимизации и не освобождает ее после завершения задания. Единственное решение - перезапустить службы SQL. Посоветуйте, пожалуйста, как решить эту проблему.
Это сделано намеренно.
SQL Server использует всю память, которую он может получить, если вы явно не ограничили максимальное использование памяти в его конфигурации; он не освобождает его автоматически, когда он закончил использовать его, потому что в любом случае ему все равно придется распределить его снова, рано или поздно. Однако если O.S. требуется память для других приложений, SQL Server с радостью освободит ее; так что не стоит об этом беспокоиться.
Вы можете установить жесткое ограничение на максимальное использование памяти SQL Server, если считаете, что в этом есть необходимость; вот некоторая документация: http://msdn.microsoft.com/en-us/library/ms178067.aspx.
RTFM. В самом деле. ПРОЧИТАЙТЕ РУКОВОДСТВО.
SQL Server НИКОГДА не освобождает память. Он кэширует все, что может из базы данных, на случай, если это понадобится на более позднем этапе. Если вы хотите ограничить SQL Server, установите ограничение в параметры запуска. Даже в этом случае он не выпустит memroy, если он не понадобится другим приложениям. А для sql-сервера корпоративного уровня другие приложения представляют собой набор epty (т.е. на том же сервере их нет).
Обычно серверы SQL настроены так, чтобы максимально эффективно использовать свою память. Освобождение памяти означает, что вы должны вернуться к диску, если вам нужны данные, а это ДОРОГО. Поскольку Disc IO является одним из основных ограничивающих факторов для больших баз данных. Кеширование - это хорошо. Диск медленный. Я видел серверы, использующие память 256 ГБ, и пользователи были этому довольны.
Так что, если есть смысл, получить больше ОЗУ (32, 64 ГБ). Будьте счастливы, что SQL Server использует его в полной мере. И в один прекрасный момент скоро прочтите документацию;)
Или: Если вы действительно настроили SQL Server для освобождения памяти И (!) Другое приложение запрашивает это и не получает его - сообщите об ошибке в Microsoft.
Вот хороший ресурс относительно Конфигурация памяти SQL Server; он говорит об освобождении памяти внизу блога.