Регулятор ресурсов позволяет ограничить использование памяти
и процессора определенным подключениям
или группе пользователей.
К примеру, на сервере есть основная база данных и второстепенная база данных, вам необходимо, чтобы пользователи подключающиеся к второстепенной базе, не использовали ресурсов более разраешенного, чтобы основые ресурсы использовались для пользователей подлючающиеся к основно базе данных. Для эти х целей как раз и создан регулятор ресурсов(Resource Governor). Данный инструмент позволяет регулировать только ресурсы памяти и процессора.
Для понимания работы
регулятора ресурсов необходимо понимать
следующие понятия:
1.
Пулы ресурсов – объем ресурсов, который предоставляется
группе рабочей нагрузке, min и max ресурсов. Сумма минимальных значений всех пулов не должно
превышать 100.
2.
Группы рабочей нагрузки - привязывается к пулу ресурсов, связывает
соединение пользователя
3. Классификация
– функция определения, в какую группу рабочей нагрузку входит соединение. Создается в базе master.
Регулятор ресурсов настраивается
в следующем порядке:
1. Включит
Регулятор ресурсов.
2. Создать
один или несколько пулов ресурсов
3. Создать
одну или несколько групп рабочих нагрузок
4. Связать
каждую группу рабочей нагрузки с пулом ресурсов
5. Создать
и протестировать функцию –классификатор
6. Связать
функцию – классификатор с регулятором ресурсов
1.Включение регулятора ресурсов:
ALTER RESOURCE GOVERNOR RECONFIGURE;
2. Создание пулов
CREATE RESOURCE POOL
[test_pool1] WITH(min_cpu_percent=0,
max_cpu_percent=15,
min_memory_percent=0,
max_memory_percent=15)
GO
CREATE RESOURCE POOL
[test_pool2] WITH(min_cpu_percent=20,
max_cpu_percent=50,
min_memory_percent=20,
max_memory_percent=50)
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
3.4 Создание рабочей нагрузки и связывание рабочей нагрузки
с пулом
CREATE WORKLOAD GROUP
[Group_for_pool1] WITH(group_max_requests=0,
importance=Medium,
request_max_cpu_time_sec=180,
request_max_memory_grant_percent=25,
request_memory_grant_timeout_sec=0,
max_dop=0) USING [test_pool1]
GO
CREATE WORKLOAD GROUP
[group_for_poo2] WITH(group_max_requests=0,
importance=Medium,
request_max_cpu_time_sec=0,
request_max_memory_grant_percent=25,
request_memory_grant_timeout_sec=0,
max_dop=0) USING [test_pool2]
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
Графически это должно выглядеть так:
5. Создание функции-классификатора
Текст самой функции:
CREATE FUNCTION dbo.func_classifier1() RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
DECLARE @grp_name sysname
IF (SUSER_NAME() = 'user1')
SET @grp_name = 'Group_for_pool1';
IF (SUSER_NAME() = 'user2')
SET @grp_name = 'group_for_poo2';
insert into master.dbo.cl_table(usr,[group])
values(SUSER_NAME(),@grp_name);
RETURN
(@grp_name)
END;
Для классификации можно
использовать следующие системные функции: HOST_NAME(), APP_NAME(),
SUSER_NAME(), SUSER_SNAME(), IS_SRVROLEMEMBER() и IS_MEMBER().
6. Связывание функции – классификатора с
регулятором ресурсов
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION
= [dbo].[func_classifier1]);
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
После этого можно
проверить работу нашего регулятора ресурсов:
Проверка правильности
назначений групп Войдем под пользователем user 1 или user2 , затем под администратором выполним следующий зарос:
select b.name,a.login_name,a.session_id from sys.dm_exec_sessions a
inner join sys.dm_resource_governor_workload_groups b
on a.group_id=b.group_id
В результате получим, куда в какую группу попали наши
соединения.
Далее проверим саму нагрузку
и ограничения ресурсов.
На сервере запускаем счетчики:
SQLServer :Workload
Group Loader –CPU usage и
SQLServer:Resource Pool Status: CPU usage для наших пулов.
Создаем нагрузку на сервере под
различными учетными записями.В результате должна отобразиться нагрузка в зависимости от пула.
Небольшое замечание, даже при
включенном регуляторе ресурсов SQL Server старается
выделить как можно больше ресурсов на выполнение запросов, если есть ресурсы у других пулов, то SQL Server может их использовать для
выполнения запроса в другом пуле.
Комментариев нет :
Отправить комментарий