среда, 4 июня 2014 г.

Разграничение ресурсов сервера между компонентами MS SQL Server


Довольно часто бывает, что для каждой службы не всегда можно выделить отдельные сервера, поэтому на один сервер ставят несколько компонентов MS SQL Server, такие как  MS SQL Server, MS SQL Server Analysis Services, MS SQL Server Reporting Services. Если компонентами активно пользуются, то это приводит к конкуренции ресурсов сервера, и в итоге отрицательное влияние друг на друга.

В текущей статье опишем, как можно разделить ресурсы между компонентами MS SQL Server, установленные на один сервер.

Разделить можно следующие ресурсы: память и процессора. Диски, к сожалению, пока нельзя, я бы рекомендовал просто разнести на различные физические носители (это базы данных MS SQL Server и базы данных MS SQL Server Analysis ), сгруппировать базы данных с низкой активностью  и т.д. .

Дано сервер с установленным MS SQL Server 2012 и компоненты Analysis, Reporting. На сервере 32 Гб памяти сервера и 8 процессоров, технологии NUMA нет.

Итак, начнем с самого простого, ограничение ресурсов MS SQL Server:
Память :
Графически
Выбираем свойства сервера, вкладка “Memory”, в поле «Maximum server memory» устанавливаем необходимое значение памяти , которые выделяем  MS SQL Server-у:

 

Либо через инструкции T-SQl:
EXEC sys.sp_configure N'max server memory (MB)', N'9000'
GO
RECONFIGURE WITH OVERRIDE

Процессор:
Вкладка Processors, снимаем галочку у параметра «Automatically set processor affinity for all processors”, отмечаем необходимые процессоры:

Через код T-SQL:
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU = 0 TO 3
GO

Теперь у нас есть сконфигурированный инстанс MS SQL Server, которому выделено  9 Гб памяти и отдано 4 процессора сервера.

Далее настраиваем службу MS SQL Server  Analysis Services.
Параметры конфигурации службы сохраняются в файле msmdsrv.ini в каталоге установки службы директории OLAP\Config. Перед изменением рекомендуется сохранить отдельно данный файл, хоть и перед рестартом службы копия файла сохраняется с расширением msmdsrv.bak

Можно менять параметры как напрямую в файле, так и в графическом режиме. Лучше, конечно в графическом режиме, так можно меньше сделать ошибок.
Итак нас интересуют параметры памяти:


Memory\TotalMemoryLimit и Memory\LowMemoryLimit это, можно сказать эквивалент параметров max и min server memory limit у MS SQL Server-а.
Второй параметр нас мало интересует, это параметр определяет минимальное количество памяти при запуска службы. А вот параметр Memoty\TotalMemoryLimit определяет максимальное количество памяти, которое может использовать служба MS SQL Server Analysis services.Значение в процентах от общего количества памяти на сервере. К примеру, значение 20 на сервере с 32 Гб памяти, определяет для службы MS SQL Server Analysis  6,4 Гб памяти.

Память определили, переходим к процессорам, нас интересую следующие параметры:

Параметры с названием \GroupAffinity . Это параметры определяют привязку отдельных пулов службы к процессорам По умолчанию параметры определяют на использование всех процессоров сервера, но у нас на сервере есть еще и другие службы, поэтому ограничим используемые процессоры. Для MS SQL Server мы определили первые три процессора, для службы Analysis мы определим процессоры 4 и 5.

Вычисляем битовую маску:
Номера процессоров 76543210  - 00110000 , где 1 процессор который будем использовать
Значение 00110000 переводим в 16-е значение=  0х30

Данное значение пропишем в конфигурации. Для применения настроек необходим перезапуск службы. Более подробно описано на MSDN http://msdn.microsoft.com/ru-ru/library/ms175657(v=sql.110).aspx#bkmk_groupaffinity , либо здесь http://christianb7.wordpress.com/2012/11/11/analysis-services-2012-configuration-settings/

 Для службы MS SQL Server Analysis память и процессоры выделены и изолированы.  

Теперь осталось настроить службы MS SQL Server Reporting Services.
Для данной службы есть возможность только ограничить потребление памяти.
По умолчанию служба может потреблять всю доступную память на сервере,
Для настройки параметров используемой службой Reporting Services необходимо поправить файл конфигурации, расположенный в каталоге установки службы

…\MSRS11.MSSQLSERVER\Reporting Services\ReportServer
Файл rsreportserver.config

Наиболее важные параметры:

WorkingSetMaximum - Порог памяти, после которого больше не будут приниматься новые запросы на предоставление памяти от приложений сервера отчетов.
Этот параметр не появляется в файле конфигурации RSReportServer.config, если не добавить его вручную. Чтобы сервер отчетов использовал меньше памяти, можно изменить файл RSReportServer.config, добавив элемент и значение. Диапазон допустимых значений — от 0 до максимального целого числа. Значение указывается в килобайтах.

WorkingSetMinimum - Нижний предел потребления ресурсов; сервер отчетов не будет освобождать память, если общее использование памяти ниже этого предела.

Его значение по умолчанию рассчитывается при запуске службы. В соответствии с этим расчетом, запрашиваемый объем выделенной памяти составляет 60 процентов от WorkingSetMaximum.
Этот параметр не появляется в файле конфигурации RSReportServer.config, если не добавить его вручную. Чтобы изменить это значение, необходимо добавить элемент WorkingSetMinimum в файл RSReportServer.config. Диапазон допустимых значений — от 0 до максимального целого числа. Значение указывается в килобайтах

MemoryRhreshold - Задает процент WorkingSetMaximum, определяющий границу между высоким и средним уровнями потребления памяти. Если процент использования памяти достиг этого значения, сервер отчетов замедляет обработку запросов и перераспределяет память, выделенную различным серверным приложениям. Значение по умолчанию — 90. Это значение должно быть больше значения параметра MemorySafetyMargin.

MemorySafetyMargin - Задает процент WorkingSetMaximum, определяющий границу между средним и низким уровнями потребления памяти. Это значение представляет собой процент доступной памяти, которая будет зарезервирована для системы и не сможет быть использована для работы сервера отчетов. Значение по умолчанию — 80.

Итак , в свою службу , я добавил следующие значения, раздел <Service>:
       <MemorySafetyMargin>80</MemorySafetyMargin> - значения оп умолчанию
       <MemoryThreshold>90</MemoryThreshold>       -значение по умолчанию
       <WorkingSetMaximum>512000</WorkingSetMaximum> - добавлено, определено 512 Мб  максимальный объем памяти для службы MS SQL Server Reporting Services
       <WorkingSetMinimum>256000</WorkingSetMinimum> - добавлено, определен нижний предел памяти, установлено 256 мб.

И делаем рестарт службы.

После этого у нас все три компонента MS SQL Server , Reporting Services, Analysis Services работают с минимальным влиянием в области памяти процессоров.
 

Удачной работы!

1 комментарий :

  1. Есть разница ощутимая До и После разграничения? И как выражается?

    ОтветитьУдалить