Назад | Перейти на главную страницу

Использование памяти SQL 2008

У меня есть SQL Server 2008 (версия 10.0.1600), работающий на сервере Windows Server 2008 R2 Enterprise с 8 ГБ физической оперативной памяти. Если я открываю диспетчер задач, я вижу в разделе «Физическая память» вкладки «Производительность», что из 8191 всего доступно только 340 МБ, но я не вижу ни одного процесса, использующего такой объем памяти. Обратите внимание: объем памяти SQL Server ограничен 6 ГБ (максимальная память сервера = 6000).

Если я открою Sysinternals Process Explorer, я увижу sqlsrvr.exe процесс имеет:

Private Bytes:  227.000 K
Working Set:    140.000 K
Virtual Size: 8.762.000 K

Что это значит? Есть ли способ освободить эту память для другого процесса? Почему виртуальный размер отображается как выделенная память? Я думал, что виртуальный размер - это только «зарезервированная память».

Это нормально. SQL-сервер всегда будет использовать всю доступную память и уменьшить масштаб, когда системе потребуется больше ресурсов.

ЭТОТ статья описывает происходящее.

Когда вы запускаете SQL Server, Использование памяти SQL Server может продолжать неуклонно увеличиваться, а не уменьшаться, даже когда активность на сервере низкая. Кроме того, диспетчер задач и системный монитор могут показать, что физическая память, доступная на компьютере, неуклонно уменьшается, пока доступная память не станет от 4 до 10 МБ.

Само по себе это поведение не указывает на утечку памяти. Такое поведение является нормальным и является предполагаемым поведением буферного пула SQL Server.

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

Из-за того, как SQL Server распределяет память (особенно при включенном AWE), диспетчер задач и обозреватель процессов не дадут вам точного представления о том, сколько оперативной памяти он фактически использует. Чтобы получить точные цифры, вам нужно напрямую спросить SQL Server. Самый простой способ сделать это - запустить perfmon и добавить счетчик SQLServer: Memory Manager / Total Server Memory. Этот счетчик сообщит об общем использовании памяти в КБ.

Теперь, если SQL Server использует полные 6000 МБ, которыми он ограничен, это совершенно нормальное (и желательное) поведение. Если он использует значительно больше, то может быть проблема.