Налаштування Resource Governor в SQL Server 2008, Інші СУБД, Бази даних, статті

Грег Лоу

До виходу в світ версії 2008 процесор баз даних SQL Server прагнув збалансувати продуктивність всіх працюючих в даний момент користувачів, так що адміністратор практично не міг встановлювати пріоритети для тих чи інших користувачів або робочих навантажень. Крім того, не слід забувати про те, що в багатьох організаціях виконуються сотні, а то й тисячі додатків. Адміністратори баз даних мають дуже туманне уявлення про те, які програми використовуються в даний час, і їм важко звертатися до баз даних цих додатків. Ситуація посилюється тим, що великі групи користувачів і додатків працюють з конкретними обліковими записами, що застосовуються при реєстрації в системі.

У версії SQL Server 2008 реалізований менеджер ресурсів Resource Governor, що надає адміністратору певні можливості контролю використання ресурсів. За допомогою цього компонента можна запобігати виникнення проблем, пов’язаних з швидкодією, і навчитися визначати, які програми виконуються в той чи інший момент. Треба сказати, що на сьогодні Resource Governor не вільний від обмежень, але його можливостей достатньо для вирішення багатьох типових проблем, пов’язаних з ресурсами. У даній статті мова піде про те, як управляти ресурсами процесора і пам’яті за допомогою пулів ресурсів, як призначати пулів ресурсів програми та як призначати сеанси групам робочих навантажень.

Створення пулу ресурсів

Робота Resource Governor полягає в управлінні ресурсами процесора і пам’яті, виділеними для певного сеансу. Адміністратор може вказати виражену у відсотках максимальну і мінімальну частку ресурсів процесора і пам’яті, які може використовувати додаток, а також максимально допустиму ступінь паралелізму. Для цього потрібно створити великі пули ресурсів, за якими будуть розподілені сеанси, і встановити для них мінімальні та максимальні частки у відсотках за допомогою команди CREATE RESOURCE POOL. Наприклад, команди в лістингу 1 створюють три пулу ресурсів, обмежені відсотком використання часу процесора.

Приклади команд CREATE RESOURCE POOL

Відсотки, зазначені в цих командах, не є жорсткими обмежувачами. Так, якщо в системі виконується лише один додаток з низьким пріоритетом, цьому додатком будуть надані всі ресурси процесора. Управління ресурсами за критерієм процесорного часу здійснюється лише тоді, коли до цього ресурсу паралельно звертається кілька конкуруючих програм.

Розробники Resource Governor встановили максимальну кількість пулів рівним 20, причому 18 з них доступні для налаштування. З решти двох пулів один виділяється для внутрішніх процесів, таких як операції з очищення, а другий є пулом за замовчуванням. Він використовується для сеансів, не прив’язаних до інших пулів. Отже, не варто створювати занадто багато пулів ресурсів на ранніх етапах роботи. Рекомендується заздалегідь продумати, які пули можуть вам знадобитися.

Створення груп робочого навантаження

Тепер, коли ми згрупували наявні ресурси, можна приступати до угруповання додатків, які будуть призначені для цих пулів ресурсів. Задача вирішується за допомогою команди CREATE WORKLOAD GROUP. У лістингу 2 представлено кілька прикладів команд CREATE WORKLOAD GROUP.

Приклади команд CREATE WORKLOAD GROUP

У лістингу 2 створюється п’ять груп робочого навантаження, і ці групи призначаються трьом пулів ресурсів. Програми Access і Excel розміщуються в окремих пулах – якщо в майбутньому ви захочете виділити одному з цих додатків більше ресурсів, ніж другого, у вас буде така можливість. Занадто “напористим” додаткам Access і додатків, які ми не зможемо ідентифікувати, будуть виділятися невеликі обсяги ресурсів. Додатків, які ми ідентифікували як життєво важливі для нашого бізнесу, щодо ресурсів буде надаватися найвищий пріоритет.

Перегляд налаштувань Resource Governor

Після створення груп робочого навантаження і призначення їх пулів ресурсів ці групи не починають працювати відразу ж. Щоб визначити, що саме необхідно налаштувати додатково для приведення Resource Governor у робочий стан, адміністратор може переглянути поточну конфігурацію Resource Governor. Це можна зробити в новому динамічному адміністративному поданні. Виконавши команду


SELECT * FROM sys.dm_resource_ governor_configuration;

ви отримаєте вихідні дані, представлені на екрані 1.

Вихідні дані, що показують поточні настройки Resource Governor

Зазначимо, що ці вихідні дані відображаються на вкладці Results у вікні SQL Server Management Studio (SSMS). Значення 1 в лівому стовпчику – це номер рядка вихідних даних.

Наведені вихідні дані вказують на дві обставини. По-перше, прапорець is_reconfiguration_pending означає, що необхідно виконати команду ALTER RESOURCE GOVERNOR RECONFIGURE до того, як внесені зміни вступлять в силу. Після виконання цієї команди значення is_reconfiguration_pending дорівнюватиме нулю. По-друге, значення нуль для classifier_function_id вказує на те, що класифікує функція не була призначена (хоча мені здається, що для даного значення цей стовпець повинен повертати не нуль, а значення NULL). Функція-класифікатор використовується для того, щоб визначити, в якій групі робочої навантаження повинен бути розміщений сеанс. Питанням про те, як використовувати функції-класифікатори, ми займемося в найближчий час.

Далі можна переглянути конфігурацію пулу ресурсів, виконавши команду


SELECT * FROM sys.dm_ resource_governor_ resource_pools;

яка повертає вихідні дані, показані на екрані 2.

Вихідні дані, що показують налаштування пулу ресурсів

Зверніть увагу: до тих пір, поки не буде виконана команда перенастроювання, в числі вихідних даних будуть вказані тільки внутрішній пул і пул за замовчуванням. Щоб побачити настройки пулу робочого навантаження, потрібно виконати команду


SELECT * FROM sys.dm_resource_ governor_workload_groups;

яка повертає вихідні дані, показані на екрані 3.

Вихідні дані, що показують налаштування групи робочих навантажень

Класифікація програм

Останній етап процедури налаштування Resource Governor – ідентифікація сеансів, якими потрібно управляти. Задачу можна вирішити за допомогою функції-класифікатора, призначає сеанс конкретній групі робочої навантаження, як показано в лістингу 3.

Аналогічні пов’язані з примірниками вибірки були додані до лічильника SQLServer: Workload Group Stats. Відповідні значення можна отримати також за допомогою запиту до подання sys.dm_os_performance_counters.

Для здійснення більш детального моніторингу в SQL Server були додані додаткові події, такі як CPU Threshold Exceeded, PreConnect: Starting і PreConnect: Completed. Якщо ви хочете керувати менеджером Resource Governor програмним шляхом з допомогою коду. NET, можете скористатися класом ResourceGovernor, який був включений в число об’єктів SQL Server Management Objects (SMO).

В даній статті при налаштуванні пулів ресурсів я зосередив увагу на максимальних процентних значеннях часу використання процесора, оскільки необхідно проявляти особливу обережність при конфігуруванні мінімальних процентних значень. Легко накласти значні обмеження на використання ресурсів системи, встановивши надто низькі мінімальні значення; в першу чергу це стосується мінімальних значень по використовуваної пам’яті.

Можливі труднощі

Ймовірно, ви замислюєтеся про обмеження, про які я згадав раніше. Функція чудова, але в чому тут каверза? По-перше, пули ресурсів і групи робочого навантаження не можна розформовувати в той час, коли ними користуються. Власне, це не дивно, правда, потрібно мати на увазі, що в активно працюючих системах зазначені компоненти можуть використовуватися протягом досить тривалого часу. По-друге, ви, можливо, вважаєте, що за допомогою Resource Governor можна знизити пріоритет того жахливого запиту, який, як тільки що з’ясувалося, “вбиває” швидкодію системи. Однак ви не маєте можливості використовувати Resource Governor з цією метою, оскільки як групи робочого навантаження, так і пули ресурсів розподілялися в момент початку сеансу. Далі, Resource Governor не дозволяє розподіляти пріоритети серед додатків OLTP. Короткі запити OLTP погано піддаються подібному управлінню. Менеджер Resource Governor цілком годиться для роботи з довго виконуються запитами, які споживають ресурси протягом тривалого часу.

Нарешті, майже у всіх місцях, де я працюю, SQL Server обмежений системою введення / виведення, а не ресурсами процесора або пам’яті. Для пов’язаних з процесором систем SQL Server характерний обмежений набір проблем, таких як “забруднення” кеша плану виконання, що постійно викликає перекомпіляцію. І хоча, обмежуючи пам’ять, ми можемо “поставити на місце” невеликі запити до сховищ даних, мені хотілося б, щоб розробники реалізували функцію управління вводом / виводом файлів за схемою “файл за файлом”. Але, незважаючи на зазначені недоліки, більшість адміністраторів, я думаю, погодяться з тим, що Resource Governor – чудове доповнення до звичного набору інструментів і відмінний засіб, що дозволяє відновити контроль над системами.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*