Microsoft nedávno oznámil neuvěřitelnou novou funkci – automatické ladění v Azure SQL Database. Abych byl upřímný, jsem touto funkcí naprosto ohromen, protože inženýři Microsoftu sofistikovaně použili umělou inteligenci při ladění výkonu SQL Azure. Cílem je monitorovat Azure SQL databázi a odesílat tato pozorování do vestavěné zpravodajské služby, která generuje některá doporučení. Mohou být aplikovány v době mimo špičku. Tato funkce také zjednodušila práci správcům databází; se teď nemusí starat o výkon databáze SQL Azure.
V dokumentaci MSDN je klíčový bod automatického ladění SQL Azure „Automatické ladění se horizontálně učí ze všech databází v Azure prostřednictvím umělé inteligence a dynamicky zlepšuje jeho akce ladění“. Znamená to, že algoritmus umělé inteligence získává obrovské zkušenosti z různých databází SQL Azure. Z tohoto důvodu budou tato doporučení spolehlivá. Funkce automatického ladění může také vrátit doporučení a opravit se.
Další zajímavou možností této funkce jsou upozornění. Společnost Microsoft zvyšuje důvěru v tuto funkci tím, že uvádí, že je implementována v některých společnostech. Možná, že tento přístup může být trochu utopický, ale v budoucnu bude mít umělá inteligence spoustu povinností správců databází. Počet úkolů pro správce databází se proto sníží.
Abych tuto funkci otestoval, vytvořil jsem dvě tabulky na Azure SQL a naplnil je nějakými daty. Poté, co jsem vygeneroval tato testovací data, provedl jsem mnoho dotazů, které potřebovaly stejné indexy bez klastrů. Když jsem prozkoumal odhadovaný plán provádění dotazů, zjistil jsem, že navrhuje index bez klastrů. Přibližně po 30 hodinách vygenerovalo automatické ladění Azure SQL doporučení k vytvoření indexu. Pro tuto čekací dobu Microsoft poznamenává, že „Azure SQL Database potřebuje monitorovat aktivity alespoň jeden den, aby mohla identifikovat některá doporučení“. Tento index doporučení ladění je stejný jako chybějící index. Když se automatické ladění pokusilo spustit skript, došlo k chybě kvůli omezenému prostoru na disku.
/* 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 */
Možnosti automatického ladění jsou následující:
- Vytvořit index který identifikuje automatické vytváření indexu, které může ovlivnit výkon.
- Pokles indexu který identifikuje nepoužívané nebo nadbytečné indexy.
- Vynutit poslední plán dobrý který definuje plány dotazů SQL, které jsou horší než ty předchozí. Tato funkce se týká automatické opravy plánu v SQL Server 2017.
Jak povolit automatické ladění Azure SQL
Dotazy Azure Portal nebo T-SQL umožňují povolit možnosti automatického ladění. Tato funkce může současně povolit automatické ladění na úrovni serveru nebo databáze. Úroveň databáze může zdědit tyto možnosti z úrovně serveru.
Nyní se připojíme k Azure Portal a najdeme SQL Servery.
Poté najděte možnosti automatického ladění.
Na tomto snímku obrazovky můžeme změnit a použít možnosti automatického ladění na úrovni serveru a ve výchozím nastavení. Všechny databáze se dědí z úrovně serveru. Tuto možnost však můžeme změnit i na úrovni databáze.
Možnost Aktuální stav definuje aktuální stav možnosti automatického ladění. Společnost Microsoft nabízí správu této funkce na úrovni serveru, protože její nastavení lze použít na všechny databáze.
Nyní se podíváme na možnosti automatického ladění na úrovni databáze. Tyto možnosti najdeme na SQL databázích.
Jak vidíte, můžeme nastavit možnosti automatického ladění pro jednotlivou databázi a změnit možnosti dědění.
Výše uvedený snímek obrazovky identifikuje následující možnosti:
- Stav Force Plan je „ON“ a je zděděn z úrovně serveru, jehož stav je „ON“.
- Stav vytvoření indexu je „VYPNUTO“ a je zděděn z úrovně serveru. Jeho stav je „OFF“.
- Stav Drop Index je „ON“ a tato možnost je nastavena pouze pro tuto databázi. Úroveň serveru není pro toto nastavení důležitá.
Můžeme povolit automatické ladění přes T-SQL:
ALTER DATABASE current SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON, CREATE_INDEX = DEFAULT, DROP_INDEX)
V tomto kroku se podíváme na doporučení automatického ladění umístěná pod nabídkou SQL Server.
Doporučení pro automatické ladění lze navíc nalézt pod nabídkou databáze.
Doporučení ladění mají různé stavy:
- Nevyřízeno: Příkaz Použít doporučení byl přijat a jeho provedení je naplánováno.
- Probíhá: Doporučení se uplatňuje.
- Ověřování: Doporučení bylo úspěšně použito a služba měří přínosy.
- Úspěch: Doporučení bylo úspěšně aplikováno a přínosy byly změřeny.
- Chyba: Během procesu použití doporučení došlo k chybě. Může se jednat o přechodný problém nebo o změnu schématu tabulky a skript již není platný.
- Vracení: Doporučení bylo použito, ale bylo považováno za nevýkonné a je automaticky vráceno.
- Obnoveno: Doporučení bylo vráceno.
Když automatické ladění vytvoří doporučení, které bude umístěno pod záložkou Doporučení, bude stav nevyřízeno. Když se stav doporučení ladění provádí, průběh, úspěch nebo chyba, zobrazí se na kartě Historie ladění. Současně může sys.dm_db_tuning_recommendations vrátit informace o doporučení automatického ladění.
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
Když klikneme na Doporučení, můžeme najít nějaké podrobnosti o doporučení ladění.
Můžeme získat mnoho užitečných informací o doporučení ladění a vygenerovat skript této funkce.
Podrobnosti, které skript vrátí, jsou následující:
- Dopad definuje prioritní úroveň doporučení ladění.
- Potřebné místo na disku definuje spotřebu úložiště.
- Typ indexu definuje, jaký typ indexu vytvoří.
Závěry
Podle mého názoru je automatické ladění SQL Azure funkcí nové generace, protože Microsoft začíná používat algoritmy umělé inteligence v doporučení ladění. Zároveň může tato funkce vést k následujícím otázkám:
- Kdy bych měl mít toto doporučení pro ladění?
- Je toto doporučení pro ladění užitečné? Pokud to není užitečné, kdy mám toto doporučení ladění vrátit zpět?
Výsledkem je, že automatické ladění SQL Azure nabízí futuristický přístup.
Odkazy
Automatické ladění v Azure SQL Database
Ladění výkonu v Azure SQL Database
Umělá inteligence vyladí Azure SQL Database