Ефективне управління індексами в SQL Azure Database з допомогою Index Advisor

Ми раді поділитися з вами черговій статті з серії статей про хмарних сервісах Microsoft Azure. Цього разу Андрій Антюфєєв — керівник програм Microsoft з команди SQL Server і SQL Azure Database, продовжить свою розповідь про роботу з індексами хмарної БД SQL Azure Database. — Володимир Юнев
Всім привіт, ця замітка буде корисна всім, хто користується SQL Azure Database.


минулого разу, ми розглядали першу версію Index Advisor. C тих пір помічник встиг дорости до GA, підвищивши стабільність, і обзавестися новими можливостями:

  • можливість автоматично застосовувати рекомендації помічника
  • нові рекомендації (Drop Index)
  • візуалізація навантаження після створення індексу
  • інші поліпшення
Забудьте про управління індексами
Процес створення нових індексів відбувається в кілька етапів:

  1. Index Advisor надає користувачеві рекомендації індексів, які дадуть приріст продуктивності;
  2. Користувач вибирає, яку рекомендацію застосувати, рекомендація переходить в стан «Pending»;
  3. В цей час Index Advisor робить контрольний замір вашої навантаження і створює індекс;
  4. На останній стадії IA знову вимірює продуктивність і, якщо вона нижча, ніж до операції з індексами, операція відміняється. Індекс статус «Reverted».

Рис. 1. — Властивості індексу, ефект якого був негативний. Операцію можна повторити, натиснувши кнопку «Revert».

Через якийсь час навантаження на базу даних може змінитися, і знадобиться новий індекс або старий стане непотрібним. Користувачеві доведеться запускати цей процес знову і знову.

Автопілот
Для тих, хто втомився від необхідності думати про індекси, ми створили функцію автопілота – він автоматично застосовує нові рекомендації і відкочує зміни якщо ефект виявився негативним.


Рис. 2. — Включити автопілот можна в налаштуваннях Index Advisor


Рис. 3. — У властивостях закінчених операцій буде показано, хто її ініціював: користувач або автопілот.

«Я тебе породив, я тебе і вб'ю»
Index Advisor постійно спостерігає за телеметрією і навантаженням бази даних — якщо він виявляє індекс, який більше не приносить ніякої користі або дублюється якимось іншим індексом, то він запропонує його видалити.


Наприклад, у стадії внутрішнього тестування ми виявили базу даних з 72мя однаковими індексами, які просто займали місце. Це сталося через сторонньої програми з адміністрації індексів, яка спрацювала не так, як слід.

Для видалення індексів ще важливіше стає відмінна риса Index Advisor: верифікація після. Завдяки використанню Query Store, Index Advisor знає, яким буде ефект створення або видалення індексу. Якщо він виявиться негативним, то помічник автоматично поверне все як було.

Додаткові повідомлення
Кожен день ми публікуємо тисячі рекомендацій. Якщо вони всі будуть застосовані, продуктивність SQL Azure в цілому і для клієнтів відчутно зросте. Тому ми будемо намагатися доносити ці рекомендації до користувачів як можна швидше.

Першим кроком є Status bar на екрані бази даних:


Якщо у вас є активні рекомендації, то під час відвідин нового порталу Azure ви побачите повідомлення з нагадуванням застосувати їх. В недалекому майбутньому ми плануємо робити регулярні повідомлення про наявність рекомендацій Index Advisor.

Це не обман! Це працює
Після створення або видалення індексу, ви можете подивитися у властивостях операції, як змінилися параметри бази даних:

Для цього потрібно вибрати операцію, яка закінчилася успішно, і запустити Query Insights:


Як бачите, індекс було створено 6-го числа, і загальне споживання DTU впала з 80 до 40%, а також споживання CPU запитами впало. (Не завжди поліпшення настільки значуща, але воно завжди є)

Збіг? Не думаю. Query Performance Insight — корисний інструмент сам по собі, і про нього я построюсь розповісти в наступній замітці.

Чому у мене немає ніяких рекомендацій?
Так може вийти, що ваша база даних не потребує додаткових індексах в даний момент. Тоді Index Advisor покаже повідомлення, що пояснює відсутність рекомендацій. Причини можуть бути наступними:

  1. Ми проаналізували вашу базу даних, і нам нічого додати або прибрати (ви відмінний розробник!);
  2. У нас недостатньо даних для надійних рекомендацій. Це відбувається з кількох причин:
  3. Ми не можемо внести зміни в структуру бази даних (наприклад, якщо вона зазначена як Read-only);
  4. В даний момент запущені інші операції по зміні індексів для вашої бази (нові рекомендації можуть з'явитися після завершення всіх запланованих змін);
  5. Index Advisor вихідний (і таке буває).

Список з часом може змінитися, але ми постараємося завжди вказувати конкретну причину.

Інше
Невеликі зміни як:

  • Підсвічування синтаксису в поле для скрипта ручного виконання рекомендації (Index Details -> «View Script»);
  • Якщо застосування рекомендації завершилося помилкою, причина буде вказана у властивостях рекомендації.
Нова модель рекомендацій
Як ви могли вже здогадатися, адміністрування індексів — це тільки перший крок. З часом ми сподіваємося розширити наш Advisor новими порадами та рекомендаціями.

Спочатку вони будуть запущені у вигляді передпоказу і відзначені зірочкою, наприклад, Drop Index.

Итог
Index Advisor тепер в стадії GA, він допоможе вам знайти відсутні індекси (а так само запропонує видалити непотрібні) і поліпшити продуктивність вашої бази даних.

Включивши автопілот Index Advisor, ви зможете залишити забути про управління індексами, хмара зробить все за вас.

Зворотний зв'язок
  • Було б дуже круто почути думки/коментарі досвідчених DBA і нових Code-first розробників. Ви можете почати дискусію тут.
  • На сторінці Index Advisor є кнопка Feedback, де ви може висловити думку щодо конкретного індексу.
  • Хочете передати привіт команд SQL Server/SQL Azure: anant@microsoft.com постараюся знайти потрібний адресат.
У другій частині ми розглянемо Query Performance Insight – інструмент, який показує TOP-10 самих ненажерливих запитів у вашій базі даних.

Про автора
Андрій Антюфєєв



Керівник програм SQL Server & SQL Azure Database, Microsoft

sitox

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.