Microsoft har for nylig annonceret en utrolig ny funktion – automatisk tuning i Azure SQL Database. For at være ærlig er jeg dybt imponeret over denne funktion, fordi Microsofts ingeniører på sofistikeret vis har brugt kunstig intelligens i SQL Azure-ydeevneindstilling. Målet er at overvåge Azure SQL-databasen og sende disse observationer til den indbyggede efterretningstjeneste, der genererer nogle anbefalinger. De kan anvendes uden for spidsbelastningsperioder. Denne funktion har også forenklet arbejdet for databaseadministratorer; de behøver ikke bekymre sig om SQL Azure-databaseydelsen nu.
Der er et nøglepunkt ved automatisk justering af SQL Azure i MSDN-dokumentation "Automatisk justering lærer horisontalt fra alle databaser på Azure gennem kunstig intelligens, og det forbedrer dynamisk sine tuninghandlinger". Det betyder, at den kunstige intelligens-algoritme lærer stor erfaring fra forskellige SQL Azure-databaser. Af denne grund vil disse anbefalinger være pålidelige. Den automatiske tuning-funktion kan også rulle anbefalinger tilbage og rette sig selv.
En anden interessant mulighed for denne funktion er meddelelser. Microsoft øger tilliden til denne funktion ved at sige, at den er implementeret i nogle virksomheder. Måske kan denne tilgang være en smule utopisk, men i fremtiden vil kunstig intelligens få en masse ansvar for databaseadministratorer. Derfor vil antallet af opgaver for databaseadministratorer blive reduceret.
For at teste denne funktion oprettede jeg to tabeller på Azure SQL og udfyldte dem med nogle data. Efter at jeg havde genereret disse testdata, udførte jeg mange forespørgsler, som havde brug for de samme ikke-klyngede indekser. Da jeg undersøgte den estimerede plan for udførelse af forespørgsler, fandt jeg ud af, at den foreslog et ikke-klynget indeks. Omtrent efter 30 timer genererede Azure SQL automatisk tuning en anbefaling om at oprette et indeks. For denne ventetid bemærker Microsoft, at "Azure SQL Database skal overvåge aktiviteter i mindst en dag for at identificere nogle anbefalinger". Dette tuningsanbefalingsindeks er det samme som det manglende indeks. Da den automatiske tuning forsøgte at udføre scriptet, opstod der en fejl på grund af begrænset diskplads.
/* 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 */
Indstillinger for automatisk tuning er som følger:
- Opret indeks der identificerer den automatiske indeksoprettelse, som kan påvirke ydeevnen.
- Drop indeks der identificerer ubrugte eller redundante indekser.
- Tving sidste plan god der definerer SQL-forespørgselsplaner, der er værre end de foregående. Denne funktion refererer til automatisk plankorrektion i SQL Server 2017.
Sådan aktiverer du Azure SQL automatisk tuning
Azure Portal eller T-SQL-forespørgsler tillader aktivering af automatiske indstillingsmuligheder. Denne funktion kan aktivere automatisk tuning på server- eller databaseniveau på samme tid. Databaseniveauet kan arve disse muligheder fra serverniveauet.
Nu vil vi oprette forbindelse til Azure Portal og finde SQL-servere.
Find derefter automatiske indstillingsmuligheder.
På dette skærmbillede kan vi ændre og anvende automatiske indstillingsmuligheder på serverniveau og i standardindstillingen. Alle databaser er nedarvet fra serverniveau. Vi kan dog også ændre denne mulighed på databaseniveau.
Indstillingen Current State definerer den aktuelle status for den automatiske indstillingsmulighed. Microsoft tilbyder at administrere denne funktion på serverniveau, fordi dens indstillinger kan anvendes på alle databaser.
Nu vil vi se på de automatiske indstillingsmuligheder på databaseniveau. Vi kan finde disse muligheder på SQL-databaser.
Som du kan se, kan vi indstille automatiske indstillingsmuligheder for en individuel database og ændre arveindstillinger.
Ovenstående skærmbillede identificerer følgende muligheder:
- Force Plan-tilstand er "ON" og nedarvet fra serverniveauet, hvis tilstand er "ON".
- Opret indekstilstand er "OFF" og nedarvet fra serverniveau. Dens tilstand er "OFF".
- Drop Index-tilstand er "ON", og denne indstilling er kun indstillet for denne database. Serverniveauet er ikke vigtigt for denne indstilling.
Vi kan aktivere automatisk tuning via T-SQL:
ALTER DATABASE current SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON, CREATE_INDEX = DEFAULT, DROP_INDEX)
På dette trin vil vi se på de automatiske indstillingsanbefalinger, der findes under SQL Server-menuen.
Derudover kan anbefalinger til automatisk tuning findes under databasemenuen.
Indstillingsanbefalinger har forskellige statusser:
- Afventer: Anvend anbefalingskommando er blevet modtaget og er planlagt til udførelse.
- Udfører: Anbefalingen anvendes.
- Bekræfter: Anbefalingen blev anvendt med succes, og tjenesten måler fordelene.
- Succes: Anbefalingen blev anvendt med succes, og fordelene er blevet målt.
- Fejl: Der opstod en fejl under processen med at anvende anbefalingen. Dette kan være et forbigående problem eller en skemaændring i tabellen, og scriptet er ikke længere gyldigt.
- Tilbagefører: Anbefalingen blev anvendt, men er blevet anset for at være ikke-effektiv og bliver automatisk trukket tilbage.
- Tilbagestillet: Anbefalingen blev trukket tilbage.
Når automatisk tuning opretter en anbefaling, der vil være placeret under fanen Anbefalinger, vil status være afventende. Når indstillingens anbefalingsstatus udføres, fremskridt, succes eller fejl, vil den blive vist under fanen Tuning historie. Samtidig kan sys.dm_db_tuning_recommendations returnere oplysninger om automatisk indstillingsanbefaling.
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
Når vi klikker på anbefaling, kan vi finde nogle detaljer om indstillingsanbefaling.
Vi kan få en masse nyttig information om tuning-anbefaling og generere et script af denne funktion.
De detaljer, scriptet returnerer, er som følger:
- Påvirkning definerer et prioritetsniveau for indstillingsanbefaling.
- Der er behov for diskplads definerer forbrug af lager.
- Indekstype definerer, hvilken type indeks den vil oprette.
Konklusioner
Efter min mening er SQL Azure automatisk tuning en ny generations funktion, fordi Microsoft er begyndt at bruge kunstig intelligens algoritmer i tuning anbefaling. Samtidig kan denne funktion føre til følgende spørgsmål:
- Hvornår skal jeg have denne indstillingsanbefaling?
- Er denne indstillingsanbefaling nyttig? Hvis det ikke er nyttigt, hvornår skal jeg så rulle denne indstillingsanbefaling tilbage?
Som et resultat tilbyder SQL Azure automatisk tuning en futuristisk tilgang.
Referencer
Automatisk tuning i Azure SQL Database
Justering af ydeevne i Azure SQL Database
Kunstig intelligens tuner Azure SQL-databaser