- Remove From My Forums
-
Question
-
Hi,
I’m using SQL Server Express 2012. I have database with 200 Mb actually.
So, I want to know If is it normal
if the process (app) ‘SQL Server Windows NT — 64 Bit’ use 400 MB from Ram (at all) and CPU up to 46% some times ?If my Server receive DDOS Attak on the TCP port of database ? How can I detect ? How can I solve it.
Thanks
-
Edited by
Wednesday, February 11, 2015 2:25 PM
-
Edited by
Answers
-
Hi nadjibnet,
SQL Server Windows NT -64 Bit is known as sqlservr.exe process, it is normal that SQL Server consumes as much memory as possible since SQL Server likes to cache data in memory to speed up access. You might have long running queries on SQL Server. Do you
find any performance issues?If SQL Server is not installed on a dedicate production machine and you have other applications on the machine, you could limit the memory usage by
configuring Max Server Memory according to your situation.In addition, about how to detect DDOS attack and block it, you could refer to the following article:
https://sulich.wordpress.com/2012/06/27/detecting-ddos-attack-in-windows/. I suggest you to post the questions in the
Windows Server forums. It is appropriate and more experts will assist you.
Regards,
Michelle Li-
Edited by
Michelle Li
Thursday, February 12, 2015 7:25 AM -
Marked as answer by
nadjibnet
Thursday, February 12, 2015 10:00 AM
-
Edited by
- Remove From My Forums
-
Question
-
Hi,
I’m using SQL Server Express 2012. I have database with 200 Mb actually.
So, I want to know If is it normal
if the process (app) ‘SQL Server Windows NT — 64 Bit’ use 400 MB from Ram (at all) and CPU up to 46% some times ?If my Server receive DDOS Attak on the TCP port of database ? How can I detect ? How can I solve it.
Thanks
-
Edited by
Wednesday, February 11, 2015 2:25 PM
-
Edited by
Answers
-
Hi nadjibnet,
SQL Server Windows NT -64 Bit is known as sqlservr.exe process, it is normal that SQL Server consumes as much memory as possible since SQL Server likes to cache data in memory to speed up access. You might have long running queries on SQL Server. Do you
find any performance issues?If SQL Server is not installed on a dedicate production machine and you have other applications on the machine, you could limit the memory usage by
configuring Max Server Memory according to your situation.In addition, about how to detect DDOS attack and block it, you could refer to the following article:
https://sulich.wordpress.com/2012/06/27/detecting-ddos-attack-in-windows/. I suggest you to post the questions in the
Windows Server forums. It is appropriate and more experts will assist you.
Regards,
Michelle Li-
Edited by
Michelle Li
Thursday, February 12, 2015 7:25 AM -
Marked as answer by
nadjibnet
Thursday, February 12, 2015 10:00 AM
-
Edited by
- Remove From My Forums
-
Вопрос
-
Hi,
I’m using SQL Server Express 2012. I have database with 200 Mb actually.
So, I want to know If is it normal
if the process (app) ‘SQL Server Windows NT — 64 Bit’ use 400 MB from Ram (at all) and CPU up to 46% some times ?If my Server receive DDOS Attak on the TCP port of database ? How can I detect ? How can I solve it.
Thanks
-
Изменено
11 февраля 2015 г. 14:25
-
Изменено
Ответы
-
Hi nadjibnet,
SQL Server Windows NT -64 Bit is known as sqlservr.exe process, it is normal that SQL Server consumes as much memory as possible since SQL Server likes to cache data in memory to speed up access. You might have long running queries on SQL Server. Do you
find any performance issues?If SQL Server is not installed on a dedicate production machine and you have other applications on the machine, you could limit the memory usage by
configuring Max Server Memory according to your situation.In addition, about how to detect DDOS attack and block it, you could refer to the following article:
https://sulich.wordpress.com/2012/06/27/detecting-ddos-attack-in-windows/. I suggest you to post the questions in the
Windows Server forums. It is appropriate and more experts will assist you.
Regards,
Michelle Li-
Изменено
Michelle Li
12 февраля 2015 г. 7:25 -
Помечено в качестве ответа
nadjibnet
12 февраля 2015 г. 10:00
-
Изменено
#sql-server-2019
Вопрос:
Вчера я просматривал некоторые сценарии и заметки из класса и заметил, что запросы были намного медленнее. Запросы, которые раньше занимали 0 мс процессорного времени и 10 мс истекшего времени, занимали более 10 секунд. Диспетчер задач показал, что SQL Server Windows NT — 64 разрядной версии работает и использует 5 ГБ из 8 ГБ моей памяти. Я перестал запускать запросы, но это продолжалось в течение нескольких часов, пока не сократилось до 2 ГБ, и продолжалось до тех пор, пока я не выключил его около 10 вечера. Этим утром SQL Server Windows NT — 64 разрядной версии использовал несколько сотен МБ памяти, пока я не запустил хранимую процедуру. Как вы можете видеть на картинке, он увеличил объем памяти более чем на 4 ГБ и остался на нем. Я точно знаю, что такое часто случается, но никогда не думал, что это может быть вызвано чем-то, что я запустил. Если я завершу задание, я потеряю соединение. Если я перезагрузлю компьютер, он тоже перезагрузится, я проверял пару раз. Что происходит на самом деле и что мне следует делать? Снимок экрана диспетчера задач
Комментарии:
1. SQL Server использует всю доступную память, которую он может получить по дизайну . Вы можете изменить это в разделе SSMS > Свойства сервера >> Память.
2. Какова реальная проблема, которую вы пытаетесь решить? Похоже, это рабочий стол/рабочая станция, а не выделенный SQL-сервер? Рекомендуется всегда устанавливать максимальный объем памяти для SQL Server — эмпирическое правило на 8-10% меньше общего объема оперативной памяти на выделенном сервере и больше на рабочем столе или сервере общих ресурсов.
3. На первый взгляд, плохой план запроса приводит к тому, что таблица заполняет память буферного пула, которая по умолчанию составляет столько памяти, сколько она может получить.
4. Это делало все остальные запросы такими медленными. А еще я хотел понять, что на самом деле происходит и почему. Похоже, вы все предлагаете мне изменить максимальную память сервера, которую я никогда не менял, так что по умолчанию она намного больше, чем у меня есть. Поэтому я изменил его на 3 ГБ, запустил ту же хранимую процедуру и выполнил. SQL Server использовал около 700 МБ памяти и увеличил ее до 2,85 ГБ. Так что это хорошо. Теперь он остается на этом уровне в течение длительного времени. Как мне снизить его до нормального уровня? Не все, но некоторые другие запросы выполняются дольше.
5. @gsong Установите разумный максимум использования памяти в свойствах сервера, а затем перезапустите службу SQL Server. Существуют способы вернуть память SQL Server обратно в ОС без перезагрузки, но они ненадежны и предназначены для производственного использования, в то время как перезапуск службы на вашей рабочей станции является наиболее простым решением.
Краткое содержание:
- Почему MS SQL не освобождает память
- Рекомендации от Microsoft
- Сколько ОЗУ надо MS SQL серверу
- «Симптомы», что свидетельствуют о нехватке ОЗУ в MS SQL
- Когда лучше проводить замеры ?
- Разбираем отчеты потребления ОЗУ
- Джонатан Кехайяс
- Как определить PLE
Беда! MS SQL скушал, забрал, использовал всю оперативку на сервере
Действительно не редкие случаи, когда MS SQL чрезмерно употребляет ОЗУ и если не убавить его аппетиты можно и совсем остаться без свободной оперативной памяти.
Первое так сказать быстрое и «почти универсальное» решение проблемы чрезмерного употребления ОЗУ в MS SQL это указать в свойствах MS SQL (вкладка «Память») тот объем ОЗУ, который мы можем отдать на нужды «сиквела». (Не забывайте после перезапустить MS SQL)
На картинке выше указанно 4 Гб которые может употребить MS SQL (И обычно за «Максимальный размер памяти сервера он и не выходит»).
Таким образом, мы снимаем «острую» проблему с потреблением ОЗУ в MS SQL.
Конечно, при всем этом сразу возникает много вопросов:
1. Почему MS SQL не освобождает память ?
2. Сколько ОЗУ для моего MS SQL установить ?
3. Как определить сколько ОЗУ нормально для MS SQL ?
4. Можно-ли сэкономить на ОЗУ для MS SQL ?
5. Чем опасен недостаток ОЗУ в MS SQL ?
В этой статье попытаюсь дать ответы на выше перечисленные вопросы так, чтоб и новичкам было понятно и пользователи с опытом также могли, что-то почерпнуть из публикации.
Почему MS SQL не освобождает память
Главный вопрос: «Почему MS SQL не освобождает память, неужели он не умеет это делать ?
Умеет!
MS SQL умеет динамически работать с ОЗУ!
Вот что пишет MS:
Когда SQL Server использует память динамически, он периодически опрашивает систему, чтобы определить объем свободной физической памяти. SQL Server использует API уведомления памяти QueryMemoryResourceNotification, чтобы определить, когда можно выделить и освободить память буферного пула.
Но почему же это не всегда происходит?
Все просто.
Многие программы в том числе и 1С-ка, а она по своей «натуре» создает много временных таблиц, которые вынуждают MS SQL брать больше ОЗУ, заполнять свой буферный пул теми данными, которые в 1С часто востребованы, чтоб обеспечить максимальною производительность.
Безусловно, это нормальное поведение не только MS SQL, но и большинства других СУБД.
Только сведя к минимуму операции ввода /вывода с диска (работая с ОЗУ) можно добиться максимальной производительности, что собственно и пытается делать MS SQL.
К сожалению не только «природа» некоторых программ способствует чрезмерным аппетитам «сиквела», тут здорово помогают и «кривые запросы» и «ошибки» в коде, и конечно все это ведет к тому, что MS SQL употребляет ОЗУ больше чем мы рассчитывали, (часто всю что видит).
Другими словами, MS SQL не виноват в том, что программа «дает повод» брать больше ОЗУ и не дает основания ее освобождать.
Благо в MS SQL есть инструмент позволяющий «руками» ограничить потребление ОЗУ, что собственно в самом начале статьи и продемонстрировали на скрине.
Рекомендации от Microsoft
Конечно, помимо инструментов есть, и советы от Microsoft касательно MS SQL:
Рекомендуется устанавливать MS SQL единственным (кроме системы) софтом.
Так он не будет конфликтовать за ресурсы с другими программами и сможет взять ОЗУ сколько ему потребуется.
Объем ОЗУ (в идеале) должен быть равен размеру всех баз.
Другими словами если у Вас 3 базы по 10 Гб, размер ОЗУ для MS SQL в идеале 30 Гб.
Безусловно в идеале и «миллион» долларов вряд ли бы кого расстроил ) но исходим от того что имеем ), и 30% процентов от баз также будет очень хорошо! (Во многих случаях и меньше того).
Физика работы MS SQL проста, в базовом плане потребления ОЗУ, помещаем в буфер то что часто используется, чтоб обеспечить как можно лучшую производительность.
Если «сиквел» обнаружит, что у него всего 30% ОЗУ он будет просто больше писать и читать с диска и обходится тем, что есть. Да, конечно, всему есть придел и слишком большой дефицит ОЗУ приведет сперва к падению производительности (хорошо будет заметно при формировании отчетов в 1С), а потом и к различным ошибкам, вплоть до «вылета» программы.
(Рекомендую время от времени просматривать журнал MS SQL не сыпется ли уже ошибки связанные с памятью, особенно обратить внимание на строки memory pressure).
Сколько ОЗУ надо MS SQL серверу
Вот мы и подошли к еще одному Важному вопросу:
«Так сколько ОЗУ надо для счастливой» жизни «сиквелу» ) ?
В рамках данной статьи, попытаюсь дать ответ и на этот не простой вопрос, или как минимум указать верное направление)
Дело в том, что определяя потребление ОЗУ «сиквелом», мы в основном работаем только с «симптомами» и лишь сопоставив показания нескольких, можно предполагать, что проблема в нехватке ОЗУ или наоборот ОЗУ в избытке.
Помните в начале статьи мы говорили о «почти универсальном» способе навести порядок с чрезмерным потреблением ОЗУ» ?
Да, в большинстве случаев ограничение поможет, но не в 100% случаев, так как действует оно только на «буферный пул»!
Вот что по этому поводу пишет MS:
Сам SQL Server как процесс занимает больше памяти, чем указано в параметре max server memory. И внутренние, и внешние компоненты могут занимать память за пределами буферного пула, что также входит в ее общий расход, однако буферный пул обычно составляет наибольшую часть общего объема памяти, потребляемого SQL Server.
Известны случаи, когда MS SQL употребил ОЗУ, что значительно превышает объем всех баз, и даже если указали max server memory ограничили потребление.
К сожалению, и такое бывает, особенно когда есть «кривые запросы» в программе (Например в той же 1С).
Что еще раз подтверждает факт отсутствия «универсальной таблетки».
По-хорошему нужно включить «доктора», который по «симптомам» определяет болезнь на первом этапе, а на втором определяет и причину заболевания.
К сожалению, другого более точного определения «мало или много ОЗУ» в MS SQL как по «симптомам» нет, так как не все зависит от него самого.
«Симптомы», что свидетельствуют о нехватке ОЗУ в MS SQL
И так «симптомы»:
Симптом №1
«Buffer cache hit ratio» – какой процент страниц MS SQL прочитали из буферного пула.(кэша)
Расшифруем подробно, что это за показатель «Коэффициент обращений к буферному кэшу», как его посмотреть, конечно, разберем и его нюансы. (Они есть у всех «симптомов»).
И так идем на сервер, где у Вас установлен MS SQL .При его установке будет добавлен счётчик в Performance Monitor, собственно там и можно смотреть показатель.
Создадим новую группу сборщика (Можете использовать и существующей, если у Вас есть).
Запускаем команду «Perfmon» нажав комбинацию клавиш «WIN+R»
Далее создадим новую группу сборщиков данных. (Можно только добавить показатель если у Вас уже создан свой сборщик).
Имя указываем на выбор (Для теста пишу «MS SQL ОЗУ»)
Выберем «Создать вручную» (для опытных) и клик по кнопке «Далее»
На следующем этапе укажем «Счетчик производительности» и «Далее».
И добавим сам «счетчик»
Нам нужно найти: SQLServer:BufferManager (Развернем его).
И сам счетчик: Buffer cache hit ratio он же на русском «Коэффициент обращений к буферному кэшу»
Клик «Добавить >>» и «OK»
После еще раз «Далее»
«Далее»
«Сохранить и закрыть» затем «Готово»
После создания счетчика включаем его, чтоб он собрал данные. (Пары минут его работы будет достаточно, так как мы установили по умолчанию интервал сбора каждые 15 сек.).
Когда лучше проводить замеры ?
ВАЖНО!
Замеры проводим только в конце рабочего дня, чтоб получить правдоподобные результаты.
И не перезапускаем на протяжении дня MS SQL, иначе данные показателя будут обнулены!
Включить сбор достаточно просто, надо лишь выделить в списке наш «сборщик» и кликнув правой клавишей мышки — «Пуск», также можно нажать на зеленый треугольник вверху (как на картинке ниже).
После пары минут работы «Сборщика» остановим его и будем смотреть результаты.
Для остановки, также выполняем простые действия как и выше, только на этот раз с кнопкой «Стоп».
Разбираем отчеты потребления ОЗУ
И идем смотреть отчеты…
Как видим значение нашего Buffer cache hit ratio равно 100%
Теперь подробно что это значит:
Buffer cache hit ratio — показывает процент страниц которые MS SQL считал из кэша (буферного пула).
Это значит, что обращений к диску в нашем случаи не было и все поместилось в кэш.
Если бы «сиквелу» не хватило ОЗУ, он бы сбрасывал страницы на диски и оттуда бы читал эти данные (процент BCHR был бы значительно ниже 100%) , но раз это не происходит, значит, у нас есть основания полагать, что ОЗУ MS SQL достаточно.
Принято считать «хорошим» показателем 90% и выше.
А теперь собственно, почему не стоит полагаться на один «симптом» Buffer cache hit ratio:
Проблема в том, что счетчик Buffer cache hit ratio легко «накрутить», если скажем пользователь будет много раз формировать один и тот же отчет в 1С (работать с темы же данными), то мы получим высокий процент чтения из кэша, даже если ОЗУ уже не хватает MS SQL.
При этом если сформировать в таких условиях другой «большой» отчет, он уже может выполнятся долго, сколько бы раз мы его не формировали (Так как ОЗУ MS не хватило, данные берутся с диска, а Buffer cache hit ratio все еще покажет нам высокий процент).
Джонатан Кехайяс
Очень рекомендую почитать статью Джонатана Кехайяса.
И всегда считать Buffer cache hit ratio только одним из симптомов возможной проблемы с ОЗУ!
Симптом №2
Page Life Expectancy
Следующий показатель как и предыдущий, может также указать на возможные проблемы с ОЗУ. Page Life Expectancy — «ожидаемый срок жизни страниц в кэше», и дальше мы будем называть его просто PLE.
Этот параметр показывает сколько в среднем времени страницы находятся в кэше (в секундах).
Мы уже разобрались как посмотреть процент страниц в кэше, а теперь можем узнать и среднее время их нахождения там, что еще на шаг приблизит нас к верному «Диагнозу» )
Как определить PLE
Суть PLE, проста!
Чем выше PLE тем больше вероятность, что при обращении к данным, они найдутся в кэше, и не придется обращаться к диску, чтобы их прочитать.
Если страницы будут находится в кэше слишком мало времени (меньше 300 сек) тогда стоит «начать разбираться», так как это также может свидетельствовать что MS SQL не хватает ОЗУ.
И так, как определить PLE ?
Самый простой вариант это использовать скрипт:
SELECT @@servername AS INSTANCE ,[object_name] ,[counter_name] , UPTIME_MIN = CASE WHEN[counter_name]= ‘Page life expectancy’ THEN (SELECT DATEDIFF(MI, MAX(login_time),GETDATE()) FROM master.sys.sysprocesses WHERE cmd=‘LAZY WRITER’) ELSE » END , [cntr_value] AS PLE_SECS ,[cntr_value]/ 60 AS PLE_MINS ,[cntr_value]/ 3600 AS PLE_HOURS ,[cntr_value]/ 86400 AS PLE_DAYS FROM sys.dm_os_performance_counters WHERE [object_name] LIKE ‘%Manager%’ AND [counter_name] = ‘Page life expectancy’ |
Смотрим показатель PLE_SECS если больше 300 сек, тогда хорошо )
Aleksey-K | ||
������� � DBCC MEMORYSTATUS. |
VM Reserved 33829304
VM Committed 30742368
AWE Allocated 0
Reserved Memory 1024
Reserved Memory In Use 0
VM Reserved 33823544
VM Committed 30736696
AWE Allocated 0
MultiPage Allocator 49344
SinglePage Allocator 4762328
VM Reserved 0
VM Committed 0
AWE Allocated 0
SM Reserved 0
SM Commited 0
SinglePage Allocator 68808
MultiPage Allocator 9016
Источник
Sql server windows nt 64 bit жрет всю оперативку
Вопрос
Подскажите как с этим бороться правильно? процесс sqlservr.exe загружает память и занимает много памяти и постоянно объем увеличивается занятой памяти.
Server 2008 r2 Ent
SQL Server 2008 r2 ent
C базами на Вы, поэтому если можно то подробней и внятней расскажите 🙂 где что править нужно:) и должна ли эта память как то освобождаться?
Ответы
в настройках сиквела есть параметры: max server memory/min server memory
через административные представления можно анализировать какие запросы особенно требовательны к памяти, профайлер так же поможет в этом «отлове»
Вот раз о профайлере речь зашла, то дам ссылку на свой доклад о первом знакостве с ним, может будет интересно.
Еще ссылка на работу описание на MSDN.
Все ответы
PS: но лучше докупить память, провести мониторинг самых тяжелых запросов и оптимизировать их
Источник
Параметры конфигурации памяти сервера
Измените объем памяти (в мегабайтах) для процесса SQL Server, используемого экземпляром SQL Server. Существует два параметра использовании серверной памяти: Мин. память сервера и Макс. память сервера. Эти параметры меняют объем памяти, выделяемой диспетчером SQL Server Memory Manager процессам SQL Server.
Параметры по умолчанию и минимальное допустимое значение для этих параметров
Параметр | По умолчанию | Минимально допустимое |
---|---|---|
min server memory | ||
max server memory | 2 147 483 647 мегабайт (МБ) | 128 МБ |
По умолчанию SQL Server может динамически изменять требования к памяти в зависимости от доступных системных ресурсов. Дополнительные сведения см. в разделе Управление динамической памятью.
Если вы зададите слишком высокое значение макс. памяти сервера одному экземпляру SQL Server, возможно, придется конкурировать с другими экземплярами SQL Server, размещенными на том же узле, за память. Если же задать слишком низкое значение, может возникнуть значительный дефицит памяти или проблемы с производительностью. Если присвоить параметру Макс. памяти сервера минимальное значение, SQL Server может не запуститься. Если не удается запустить SQL Server после изменения этого параметра, запустите его с использованием параметра запуска -f и верните параметр max server memory к предыдущему значению. Дополнительные сведения см. в разделе Параметры запуска службы Database Engine.
SQL Server может использовать память динамически; но можно установить параметры памяти вручную и ограничить объем памяти, доступный для SQL Server. Перед настройкой объема памяти для SQL Server определите подходящее значение путем вычитания из общего объема физической памяти того объема, который требуется операционной системе, выделениям памяти, не управляемым параметром max_server_memory, и другим экземплярам SQL Server (и для других нужд, если компьютер не выделен полностью под сервер SQL Server). Разница — максимальный объем памяти, который можно выделить текущему экземпляру SQL Server.
Задать параметры вручную
Можно установить для параметров сервера Мин. памяти сервера и Макс. памяти сервера значения, покрывающие весь доступный объем памяти. Этот метод полезен для системных администраторов или администраторов баз данных, когда требуется настроить экземпляр SQL Server так, чтобы его параметры не противоречили требованиям к памяти других приложений или других экземпляров SQL Server, запущенных на этом узле.
Параметры min server memory и max server memory являются расширенными. При использовании системной хранимой процедуры sp_configure для изменения этих настроек изменить их можно, только если параметр show advanced options установлен в значение 1. Эти параметры вступают в силу сразу же без перезагрузки сервера.
SQL Server не гарантирует, что объем памяти, заданный параметром min server memory, будет выделен. Если нагрузка на сервер никогда не требует выделения всего объема памяти, заданного параметром min server memory, сервер SQL Server будет использовать меньше памяти.
Параметр max_server_memory гарантирует, что в ОС не возникнет дефицит памяти. Чтобы задать конфигурацию «Макс. памяти сервера», отследите общее использование памяти процессом SQL Server и определите требования к памяти. Для исходной настройки или при отсутствии возможности получения сведений об использовании памяти процессом SQL Server с течением времени используйте следующий обобщенный подход к настройке значения max server memory для одного экземпляра.
1 Сведения о размерах стеков потока для различных архитектур см. в разделе Руководство по архитектуре управления памятью.
2 Сведения о вычислении рабочих потоков по умолчанию для заданного числа сходных ЦП на текущем узле см. в разделе Настройка параметра конфигурации сервера «Максимальное число рабочих потоков».
Используйте SQL Server Management Studio.
Используйте два параметра памяти сервера, Мин. памяти сервера и Макс. памяти сервера, для настройки объема памяти (в мегабайтах), находящейся в управлении диспетчера памяти SQL Server для экземпляра SQL Server. По умолчанию SQL Server может динамически изменять требования к памяти в зависимости от доступных системных ресурсов.
Настройка фиксированного объема памяти (не рекомендуется)
Установка фиксированного размера памяти
В обозревателе объектов щелкните правой кнопкой мыши сервер и выберите пункт Свойства.
В пункте Параметры памяти сервера введите нужные значения в поля Минимальный размер памяти сервера и Максимальный размер памяти сервера.
Оставьте параметры по умолчанию, чтобы SQL Server изменял требования к памяти динамически, исходя из доступности системных ресурсов. Рекомендуется задать для параметра Макс. памяти сервера значение, указанное выше.
На следующем снимке экрана показаны все три шага:
Блокировка страниц в памяти (LPIM)
Эта политика Windows определяет, какие учетные записи могут использовать процесс для сохранения данных в физической памяти, чтобы система не отправляла страницы данных в виртуальную память на диске. Блокировка страниц в памяти может обеспечивать отклик сервера, когда содержимое памяти заносится в файл подкачки. Для параметра Блокировка страниц в памяти указывается значение «Включено» в экземплярах выпуска SQL Server Standard Edition и выше, если учетной записи с привилегией на выполнение sqlservr.exe предоставлено право пользователя Windows Блокировка страниц в памяти (LPIM).
Чтобы отключить параметр Блокировка страниц в памяти для SQL Server, удалите право пользователя Блокировка страниц в памяти у учетной записи с привилегиями для запуска sqlservr.exe (стартовой учетной записи SQL Server).
Задание этого параметра не повлияет на SQL Server динамическое управление памятью, что позволит расширить или сузить ее по запросу других клерков памяти. При использовании пользовательского права Блокировка страниц в памяти рекомендуется задать верхний предел для параметра Макс. памяти сервера, как указано выше.
Задавать этот параметр следует, только если он необходим, то есть при наличии признаков того, что процесс sqlservr вытесняется из памяти. В этом случае в журнале ошибок появится ошибка 17890, как в следующем примере: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%. Начиная с SQL Server 2012 (11.x), флаг трассировки 845 не требуется для использования заблокированных страниц в выпуске Standard Edition.
Включение блокировки страниц в памяти
Включение параметра «Блокировка страниц в памяти»
В меню Пуск выберите команду Выполнить. В окне Открыть введите gpedit.msc.
В консоли Групповая политика разверните узел Конфигурация компьютера, затем узел Конфигурация Windows.
Разверните узлы Настройки безопасности и Локальные политики.
Политики будут показаны на панели подробностей.
На этой панели дважды щелкните параметр Блокировка страниц в памяти.
В диалоговом окне Параметр политики локальной защиты добавьте учетную запись с правами запуска sqlservr.exe (стартовая учетная запись SQL Server).
Несколько экземпляров SQL Server
При выполнении нескольких экземпляров компонента Компонент Database Engineсуществует три подхода к управлению памятью.
Используйте параметр Макс. памяти сервера, чтобы управлять использованием памяти, как указано выше. Установите максимальные значения для каждого экземпляра, учитывая, что их сумма не должна превышать общий объем физической памяти, установленной на компьютере. Рекомендуется выделять каждому экземпляру объем памяти, пропорциональный его ожидаемой рабочей нагрузке или размеру базы данных. Данный подход имеет то преимущество, что свободная память доступна новым процессам или экземплярам сразу же после их запуска. Недостаток состоит в том, что, когда выполняются не все экземпляры, ни один из выполняющихся экземпляров не сможет использовать память, оставшуюся свободной.
Используйте параметр Мин. памяти сервера, чтобы управлять использованием памяти, как указано выше. Установите минимальные значения для каждого экземпляра так, чтобы их сумма была на 1-2 ГБ меньше общего объема физической памяти, установленной на компьютере. Рекомендуется выделять каждому экземпляру минимальный объем памяти, пропорциональный его ожидаемой рабочей нагрузке. Данный подход имеет то преимущество, что выполняющиеся экземпляры могут использовать оставшуюся свободную память в случае, когда выполняются не все экземпляры. Данный подход также полезен, когда на компьютере выполняется другой процесс, интенсивно потребляющий память, так как при этом обеспечивается удовлетворение как минимум заданных потребностей сервера SQL Server в памяти. Недостаток состоит в том, что при запуске нового экземпляра (или любого другого процесса) уже выполняющимся экземплярам требуется некоторое время для освобождения памяти, особенно если для этого им необходимо записать измененные страницы обратно в базу данных.
Отсутствие действий (не рекомендуется). Первый экземпляр, столкнувшийся с рабочей нагрузкой, попытается захватить всю память. Простаивающие экземпляры или экземпляры, запущенные позже других, могут в конечном итоге быть вынуждены работать лишь с минимальным доступным объемом памяти. SQL Server не пытается равномерно распределять возможности использования памяти между экземплярами. Тем не менее все экземпляры будут реагировать на сигналы уведомлений памяти Windows, корректируя объемы используемой ими памяти. Операционная система Windows не балансирует память между приложениями с помощью уведомлений памяти API-интерфейса. Эти уведомления лишь обеспечивают глобальную обратную связь относительно доступности памяти в системе.
Эти настройки можно изменять без перезапуска экземпляров, поэтому можно легко экспериментировать с целью нахождения наиболее подходящих настроек для данной модели использования.
Выделение максимального объема памяти
Для всех выпусков SQL Server память можно выделять вплоть до предела виртуального адресного пространства процесса. Дополнительные сведения см. в разделе Предельный объем памяти для выпусков Windows и Windows Server.
Примеры
Пример A. Задание параметра max server memory равным 4 ГБ.
При этом будет выведена инструкция, похожая на следующую:
Параметр конфигурации «max server memory» (в МБ) изменился с 2147483647 на 4096. Выполните инструкцию RECONFIGURE для установки.
Пример Б. Определение текущего распределения памяти
Следующий запрос возвращает информацию о текущем распределении памяти.
Пример В. Определение значения параметра «max server memory» (в МБ).
Следующий запрос возвращает сведения о настроенном сейчас значении и значении, которое используется в SQL Server. Этот запрос возвратит результаты независимо от того, имеет ли параметр «show advanced options» значение true.
Источник
Adblock
detector