Динамическое управление памятью

Поведение управления памятью в компоненте Microsoft SQL Server Database Engine по умолчанию заключается в использовании необходимого объема памяти в том количестве, чтобы исключить нехватку памяти в системе. Компонент Database Engine осуществляет это при помощи API уведомления памяти в Microsoft Windows.

Виртуальное адресное пространство SQL Server может быть разделено на две отдельных области: пространство, занятое буферным пулом, и остальное. Если включен механизм AWE, буферный пул может располагаться в сопоставленной памяти AWE, предоставляя дополнительное пространство для страниц базы данных.

Буферный пул служит основным источником размещения памяти SQL Server. Внешние компоненты, которые расположены внутри процесса SQL Server, такие как объекты COM и средства, не знающие о функциях управления памятью SQL Server, используют память вне виртуального адресного пространства, занятого буферным пулом.

При запуске SQL Server вычисляется размер виртуального адресного пространства для буферного пула на основании числа параметров, таких как объем физической памяти в системе, число потоков сервера и различные параметры запуска. SQL Server резервирует вычисляемый объем виртуального адресного пространства процесса для буферного пула, но занимает (фиксирует) только необходимый объем физической памяти для текущей нагрузки.

После этого экземпляр продолжает занимать память по мере необходимости для поддержания рабочей нагрузки. По мере того как больше пользователей подключается и выполняет запросы, SQL Server занимает дополнительную физическую память. Экземпляр SQL Server продолжает занимать физическую память до тех пор, пока не достигнет значения, указанного параметром max server memory, или до тех пор, пока Windows не сообщит о том, что свободной памяти не осталось; он освобождает память, если она занята больше, чем указано в параметре min server memory, а Windows сообщает о том, что свободной памяти не хватает.

По мере того как на компьютере, где запущен экземпляр SQL Server, запускаются другие приложения, они используют память, и объем свободной физической памяти падает ниже цели SQL Server. Экземпляр SQL Server регулирует использование памяти. Если другое приложение остановлено и память становится доступной, экземпляр SQL Server увеличивает размер своего размещения памяти. SQL Server может освободить и занять несколько мегабайтов памяти в секунду, что позволяет быстро приспособиться к изменениям размещения памяти.