Firma Microsoft ogłosiła niedawno niesamowitą nową funkcję — automatyczne dostrajanie w Azure SQL Database. Szczerze mówiąc, jestem pod ogromnym wrażeniem tej funkcji, ponieważ inżynierowie Microsoft w wyrafinowany sposób wykorzystali sztuczną inteligencję w dostrajaniu wydajności SQL Azure. Celem jest monitorowanie bazy danych Azure SQL i wysyłanie tych obserwacji do wbudowanej usługi analizy, która generuje pewne rekomendacje. Mogą być stosowane poza godzinami szczytu. Ta funkcja uprościła również pracę administratorów baz danych; nie muszą się teraz martwić o wydajność bazy danych SQL Azure.
W dokumentacji MSDN znajduje się kluczowy punkt dotyczący automatycznego dostrajania SQL Azure „Automatyczne dostrajanie uczy się w poziomie ze wszystkich baz danych na platformie Azure za pomocą sztucznej inteligencji i dynamicznie poprawia swoje działania dostrajania”. Oznacza to, że algorytm sztucznej inteligencji czerpie ogromne doświadczenie z różnych baz danych SQL Azure. Z tego powodu zalecenia te będą wiarygodne. Funkcja automatycznego dostrajania może również cofnąć zalecenia i sama się poprawić.
Kolejną ciekawą opcją dotyczącą tej funkcji są powiadomienia. Microsoft zwiększa zaufanie do tej funkcji, mówiąc, że jest ona wdrażana w niektórych firmach. Być może takie podejście może być nieco utopijne, ale w przyszłości sztuczna inteligencja dostanie wiele obowiązków od administratorów baz danych. W związku z tym liczba zadań dla administratorów baz danych zostanie zmniejszona.
Aby przetestować tę funkcję, utworzyłem dwie tabele na Azure SQL i wypełniłem je pewnymi danymi. Po wygenerowaniu tych danych testowych wykonałem wiele zapytań, które wymagały tych samych indeksów nieklastrowanych. Kiedy sprawdziłem szacowany plan wykonania zapytania, stwierdziłem, że sugeruje on indeks nieklastrowy. W przybliżeniu po 30 godzinach automatyczne dostrajanie Azure SQL wygenerowało zalecenie utworzenia indeksu. W tym czasie Microsoft zauważa, że „Azure SQL Database musi monitorować działania przynajmniej przez jeden dzień, aby zidentyfikować pewne zalecenia”. Ten indeks rekomendacji dostrajania jest taki sam jak brakujący indeks. Gdy automatyczne strojenie próbowało wykonać skrypt, wystąpił błąd z powodu ograniczonej przestrzeni dyskowej.
/* Missing Index Details from SQLQuery1.sql - xxxx.database.windows.net.Adventureworks (esat.erkec) The Query Processor estimates that implementing the following index could improve the query cost by 99.6269%. */ /* USE [Adventureworks] GO CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] ON [dbo].[Salesd] ([SalesOrderID]) GO */
Opcje automatycznego dostrajania są następujące:
- Utwórz indeks który identyfikuje automatyczne tworzenie indeksu, które może wpłynąć na wydajność.
- Indeks spadku który identyfikuje nieużywane lub nadmiarowe indeksy.
- Wymuś dobry ostatni plan który definiuje plany zapytań SQL, które są gorsze od poprzednich. Ta funkcja odnosi się do automatycznej korekty planu w SQL Server 2017.
Jak włączyć automatyczne dostrajanie Azure SQL
Zapytania Azure Portal lub T-SQL umożliwiają włączenie opcji automatycznego dostrajania. Ta funkcja umożliwia jednoczesne automatyczne dostrajanie na poziomie serwera lub bazy danych. Poziom bazy danych może dziedziczyć te opcje z poziomu serwera.
Teraz połączymy się z portalem Azure i znajdziemy serwery SQL.
Następnie znajdź opcje automatycznego dostrajania.
Na tym zrzucie ekranu możemy zmienić i zastosować opcje automatycznego dostrajania na poziomie serwera oraz w ustawieniach domyślnych. Wszystkie bazy danych są dziedziczone z poziomu serwera. Możemy jednak również zmienić tę opcję na poziomie bazy danych.
Opcja Bieżący stan określa aktualny stan opcji automatycznego strojenia. Firma Microsoft oferuje zarządzanie tą funkcją na poziomie serwera, ponieważ jej ustawienia można zastosować do wszystkich baz danych.
Teraz przyjrzymy się opcjom automatycznego dostrajania na poziomie bazy danych. Te opcje możemy znaleźć w bazach danych SQL.
Jak widać, możemy ustawić opcje automatycznego dostrajania dla indywidualnej bazy danych i zmienić opcje dziedziczenia.
Powyższy zrzut ekranu przedstawia następujące opcje:
- Stan wymuszonego planu jest „WŁĄCZONY” i jest dziedziczony z poziomu serwera, którego stan jest „WŁĄCZONY”.
- Stan tworzenia indeksu jest „WYŁĄCZONY” i jest dziedziczony z poziomu serwera. Jego stan to „WYŁĄCZONY”.
- Stan indeksu upuszczania to „WŁ” i ta opcja jest ustawiona tylko dla tej bazy danych. Poziom serwera nie jest ważny dla tego ustawienia.
Możemy włączyć automatyczne strojenie za pomocą T-SQL:
ALTER DATABASE current SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON, CREATE_INDEX = DEFAULT, DROP_INDEX)
Na tym etapie przyjrzymy się zaleceniom automatycznego dostrajania znajdującym się poniżej menu serwera SQL.
Dodatkowo, pod menu bazy danych można znaleźć automatyczne zalecenia dotyczące strojenia.
Zalecenia dotyczące strojenia mają różne statusy:
- Oczekujące: Polecenie Zastosuj rekomendację zostało odebrane i jest zaplanowane do wykonania.
- Wykonywanie: Rekomendacja jest stosowana.
- Weryfikacja: Rekomendacja została pomyślnie zastosowana, a usługa mierzy korzyści.
- Sukces: Zalecenie zostało pomyślnie zastosowane, a korzyści zostały zmierzone.
- Błąd: Wystąpił błąd podczas procesu stosowania rekomendacji. Może to być przejściowy problem lub zmiana schematu tabeli, a skrypt nie jest już ważny.
- Przywracanie: Rekomendacja została zastosowana, ale została uznana za nieskuteczną i jest automatycznie cofana.
- Przywrócono: Rekomendacja została cofnięta.
Gdy automatyczne dostrajanie utworzy rekomendację, która będzie znajdować się pod zakładką Rekomendacje, stan będzie w stanie oczekiwania. Gdy status rekomendacji strojenia to wykonanie, postęp, sukces lub błąd, zostanie on wyświetlony na karcie Historia strojenia. W tym samym czasie sys.dm_db_tuning_recommendations może zwrócić informacje o automatycznym zaleceniu strojenia.
SELECT name, JSON_VALUE(state, '$.currentValue') as script, JSON_VALUE(details, '$.implementationDetails.script') as script, details.* FROM sys.dm_db_tuning_recommendations CROSS APPLY OPENJSON(details, '$.createIndexDetails') WITH ( indexName VARCHAR(100) '$.indexName', indexType VARCHAR(100) '$.indexType', table_name VARCHAR(100) '$.table') as details
Kiedy klikniemy Rekomendacja, możemy znaleźć szczegółowe informacje na temat rekomendacji tuningu.
Możemy uzyskać wiele przydatnych informacji na temat rekomendacji strojenia i wygenerować skrypt tej funkcji.
Szczegóły, które zwróci skrypt, są następujące:
- Wpływ określa priorytetowy poziom rekomendacji strojenia.
- Potrzebne miejsce na dysku definiuje zużycie pamięci.
- Typ indeksu definiuje typ indeksu, który utworzy.
Wnioski
Moim zdaniem automatyczne dostrajanie SQL Azure to funkcja nowej generacji, ponieważ Microsoft zaczyna wykorzystywać algorytmy sztucznej inteligencji w rekomendacjach dostrajania. Jednocześnie ta funkcja może prowadzić do następujących pytań:
- Kiedy powinienem otrzymać tę rekomendację dotyczącą strojenia?
- Czy to zalecenie dotyczące strojenia jest przydatne? Jeśli nie jest to przydatne, kiedy powinienem wycofać to zalecenie dotyczące strojenia?
W rezultacie automatyczne dostrajanie SQL Azure oferuje futurystyczne podejście.
Referencje
Automatyczne strojenie w Azure SQL Database
Dostrajanie wydajności w Azure SQL Database
Sztuczna inteligencja dostraja bazy danych Azure SQL