У меня 64-разрядная версия Windows 7 установлена на виртуальной машине, на которой работают SQL Server 2008 R2 и IIS7. Сам сервер имеет 12 гигабайт памяти и оснащен двухъядерным процессором Intel Xeon @ 2,50 ГГц.
Проблема (я не совсем уверен, действительно ли это проблема) в том, что диспетчер задач постоянно показывает мне 8,50 ГБ используемых, в то время как ни один процесс не потребляет такой объем памяти.
Я посмотрел на этот вопрос, который говорил о выделенной памяти для заблокированных страниц sql. Однако я обнаружил, что эти значения нормальные - около 85 МБ. Вот скриншот команды
select * from sys.dms_os_process_memorys
Однако на основе приведенного выше изображения я также вижу total_virtual_space_kb
около 8,50 ГБ. Наконец, я запустил RamMap, который показывает мне, что используется около 8,50 ГБ «Драйвер заблокирован». В другом месте предполагалось, что эта память, "заблокированная драйвером", используется VMWare.
У меня есть несколько вопросов:
1) Действительно ли эта память потребляется или при необходимости она будет передана другому процессу? Я заметил, что сервер заметно медленный, поэтому мне интересно, связано ли это с этим. Далее я обычно OutOfMemoryExceptions
выбрасывается моими процессами asp.net.
2) Кто выделяет / использует эту память? SQL или VMWare?
3) Есть ли способ решить эту проблему?
Любая помощь приветствуется.
Я подозреваю, что это результат действия «воздушного шара» драйвера гипервизора (ESX / i). Драйвер балуна работает через инструменты VMware, запрашивая определенный объем памяти у гостевой ОС, не используя его в гостевой ОС. Это позволяет гипервизору использовать память в другом месте.
Раздувание обычно хорошо по ряду причин, но с MSSQL это, как правило, немного хлопотно, потому что движок SQL сам по себе очень хорош в управлении памятью.
Вот еще немного информации по этому поводу, которая может объяснить лучше, чем я:
Пожалуйста, проверьте настройки резервирования памяти для всех ваших виртуальных машин. он должен быть установлен на неограниченный или максимальный объем памяти, установленный на вашем сервере.
Перейдите в настройки vm, вкладка ресурсы. выберите память и проверьте ограничение.
Для SQL Server сначала необходимо ограничить использование памяти. Лучший способ узнать, сколько памяти действительно нужно вашему SQL-серверу, - использовать perfmon:
Перед уменьшением максимального значения памяти сервера используйте системный монитор для проверки объекта производительности SQLServer: Buffer Manager во время нагрузки и запишите текущие значения счетчиков «Украденные страницы» и «Зарезервированные страницы». Эти счетчики сообщают о памяти как о количестве страниц размером 8К. max серверная память должна быть установлена выше суммы этих двух значений, чтобы избежать ошибок нехватки памяти. Приблизительное значение минимального допустимого максимального размера памяти сервера (в МБ) составляет ([Украденные страницы] + [Зарезервированные страницы]) / 100.
Источник: TechNet (http://technet.microsoft.com/en-gb/library/ms178067(SQL.90).aspx)