sql >> Databasteknik >  >> RDS >> Database

Azure SQL Database Automatic Tuning

Microsoft har nyligen tillkännagivit en otrolig ny funktion – automatisk justering i Azure SQL Database. För att vara ärlig är jag grundligt imponerad av den här funktionen eftersom Microsofts ingenjörer på ett sofistikerat sätt har använt artificiell intelligens i SQL Azure-prestandajustering. Syftet är att övervaka Azure SQL-databasen och skicka dessa observationer till den inbyggda underrättelsetjänsten som genererar några rekommendationer. De kan appliceras under lågtrafik. Denna funktion har också förenklat arbetet för databasadministratörer; de behöver inte oroa sig för SQL Azure-databasprestanda nu.

Det finns en nyckelpunkt för automatisk justering av SQL Azure i MSDN-dokumentationen "Automatisk justering lär sig horisontellt från alla databaser på Azure genom artificiell intelligens och det förbättrar dynamiskt sina justeringar". Det betyder att den artificiella intelligensalgoritmen lär sig enorm erfarenhet från olika SQL Azure-databaser. Av denna anledning kommer dessa rekommendationer att vara tillförlitliga. Den automatiska inställningsfunktionen kan också återställa rekommendationer och korrigera sig själv.

Ett annat intressant alternativ om den här funktionen är aviseringar. Microsoft ökar förtroendet för den här funktionen genom att säga att den är implementerad i vissa företag. Kanske kan det här tillvägagångssättet vara lite utopiskt men i framtiden kommer artificiell intelligens att få mycket ansvar för databasadministratörer. Därför kommer antalet uppgifter för databasadministratörer att minskas.

För att testa den här funktionen skapade jag två tabeller på Azure SQL och fyllde i dem med lite data. Efter att jag genererat denna testdata, körde jag många frågor som behövde samma icke-klustrade index. När jag undersökte den beräknade exekveringsplanen för frågor, fann jag att den föreslog ett icke-klustrat index. Ungefär efter 30 timmar genererade den automatiska justeringen av Azure SQL en rekommendation om att skapa ett index. För denna väntetid noterar Microsoft att "Azure SQL Database behöver övervaka aktiviteter åtminstone under en dag för att identifiera några rekommendationer". Detta inställningsrekommendationsindex är detsamma som det saknade indexet. När den automatiska inställningen försökte köra skriptet uppstod ett fel på grund av begränsat diskutrymme.

/*
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
*/

Alternativen för automatisk inställning är följande:

  • Skapa index som identifierar det automatiska indexskapandet som kan påverka prestandan.
  • Släpp index som identifierar oanvända eller redundanta index.
  • Force Last Plan Bra som definierar SQL-frågeplaner som är sämre än de tidigare. Den här funktionen hänvisar till automatisk plankorrigering i SQL Server 2017.

Hur du aktiverar Azure SQL automatisk justering

Azure Portal- eller T-SQL-frågor tillåter aktivering av automatiska inställningsalternativ. Den här funktionen kan aktivera automatisk justering på server- eller databasnivå samtidigt. Databasnivån kan ärva dessa alternativ från servernivån.

Nu kommer vi att ansluta till Azure Portal och hitta SQL-servrar.

Hitta sedan alternativ för automatisk inställning.

På den här skärmdumpen kan vi ändra och tillämpa automatiska inställningsalternativ på servernivå och i standardinställningen. Alla databaser ärvs från servernivån. Men vi kan också ändra detta alternativ på databasnivå.

Alternativet Current State definierar den aktuella statusen för det automatiska inställningsalternativet. Microsoft erbjuder att hantera den här funktionen på servernivå eftersom dess inställningar kan tillämpas på alla databaser.

Nu kommer vi att titta på alternativen för automatisk inställning på databasnivå. Vi kan hitta dessa alternativ i SQL-databaser.

Som du kan se kan vi ställa in automatiska inställningsalternativ för en enskild databas och ändra ärvningsalternativ.

Ovanstående skärmdump identifierar följande alternativ:

  • Tvinga plantillståndet är "PÅ" och ärvt från servernivån vars tillstånd är "PÅ".
  • Skapa index-tillståndet är "AV" och ärvt från servernivå. Dess tillstånd är "AV".
  • Drop Index-tillståndet är "PÅ" och det här alternativet är endast inställt för denna databas. Servernivån är inte viktig för den här inställningen.

Vi kan aktivera automatisk inställning via T-SQL:

ALTER DATABASE current SET AUTOMATIC_TUNING 
(FORCE_LAST_GOOD_PLAN = ON, CREATE_INDEX = DEFAULT, DROP_INDEX)

I det här steget kommer vi att titta på rekommendationerna för automatisk justering som finns under SQL Server-menyn.

Dessutom finns rekommendationer för automatisk inställning under databasmenyn.

Inställningsrekommendationer har olika status:

  • Väntande: Använd rekommendationskommandot har tagits emot och är schemalagt för exekvering.
  • Kör: Rekommendationen tillämpas.
  • Verifierar: Rekommendationen tillämpades framgångsrikt och tjänsten mäter fördelarna.
  • Framgång: Rekommendationen tillämpades framgångsrikt och fördelarna har mätts.
  • Fel: Ett fel uppstod under tillämpningen av rekommendationen. Detta kan vara ett övergående problem eller en schemaändring i tabellen och skriptet är inte längre giltigt.
  • Återställer: Rekommendationen tillämpades, men har ansetts inte fungerande och återställs automatiskt.
  • Återställt: Rekommendationen återställdes.

När automatisk inställning skapar en rekommendation som kommer att finnas under fliken Rekommendationer, kommer statusen att vara väntande. När statusen för inställningsrekommendationen körs, framsteg, framgång eller fel, kommer den att visas under fliken Inställningshistorik. Samtidigt kan sys.dm_db_tuning_recommendations returnera information om automatisk inställningsrekommendation.

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 klickar på Rekommendation kan vi hitta lite information om justeringsrekommendationer.

Vi kan få mycket användbar information om justeringsrekommendationer och skapa ett skript för den här funktionen.

Informationen som skriptet returnerar är följande:

  • Påverkan definierar en prioritetsnivå för inställningsrekommendation.
  • Diskutrymme behövs definierar förbrukning av lagring.
  • Indextyp definierar vilken typ av index som ska skapas.

Slutsatser

Enligt min åsikt är SQL Azure automatisk tuning en ny generationsfunktion eftersom Microsoft börjar använda artificiell intelligens algoritmer i tuning rekommendationer. Samtidigt kan den här funktionen leda till följande frågor:

  • När bör jag ha den här inställningsrekommendationen?
  • Är den här inställningsrekommendationen användbar? Om det inte är användbart, när ska jag återställa den här inställningsrekommendationen?

Som ett resultat erbjuder SQL Azure automatisk justering ett futuristiskt tillvägagångssätt.

Referenser

Automatisk inställning i Azure SQL Database

Justera prestanda i Azure SQL Database

Artificiell intelligens justerar Azure SQL-databaser


  1. Finns det något sätt att köra en fråga i strängvärdet (som eval) i PostgreSQL?

  2. Skapa en Multi-Statement Table-Valued Function (MSTVF) i SQL Server

  3. Konverteringen misslyckades när varchar-värdet 'simple' konverterades till datatyp int

  4. JSON_QUERY() Funktion i Oracle