Database
 sql >> Datenbank >  >> RDS >> Database

Automatische Optimierung der Azure SQL-Datenbank

Microsoft hat kürzlich eine unglaubliche neue Funktion angekündigt – die automatische Optimierung in der Azure SQL-Datenbank. Um ehrlich zu sein, bin ich von dieser Funktion sehr beeindruckt, da Microsoft-Ingenieure künstliche Intelligenz bei der Leistungsoptimierung von SQL Azure ausgeklügelt eingesetzt haben. Ziel ist es, die Azure SQL-Datenbank zu überwachen und diese Beobachtungen an den integrierten Geheimdienst zu senden, der einige Empfehlungen generiert. Sie können außerhalb der Hauptverkehrszeiten angewendet werden. Diese Funktion hat auch die Arbeit von Datenbankadministratoren vereinfacht; Sie müssen sich jetzt keine Sorgen mehr um die Leistung der SQL Azure-Datenbank machen.

In der MSDN-Dokumentation gibt es einen wichtigen Punkt zum automatischen Tuning von SQL Azure:„Automatisches Tuning lernt horizontal von allen Datenbanken in Azure durch künstliche Intelligenz und verbessert seine Tuning-Aktionen dynamisch“. Das bedeutet, dass der Algorithmus der künstlichen Intelligenz viel Erfahrung aus verschiedenen SQL Azure-Datenbanken sammelt. Aus diesem Grund sind diese Empfehlungen zuverlässig. Die automatische Optimierungsfunktion kann auch Empfehlungen rückgängig machen und sich selbst korrigieren.

Eine weitere interessante Option zu dieser Funktion sind Benachrichtigungen. Microsoft erhöht das Vertrauen in dieses Feature, indem es sagt, dass es in einigen Unternehmen implementiert ist. Vielleicht mag dieser Ansatz etwas utopisch sein, aber in Zukunft wird künstliche Intelligenz viele Aufgaben von Datenbankadministratoren erhalten. Daher wird die Anzahl der Aufgaben für Datenbankadministratoren reduziert.

Um diese Funktion zu testen, habe ich zwei Tabellen in Azure SQL erstellt und sie mit einigen Daten gefüllt. Nachdem ich diese Testdaten generiert hatte, führte ich viele Abfragen aus, die dieselben nicht gruppierten Indizes benötigten. Als ich den geschätzten Abfrageausführungsplan untersuchte, stellte ich fest, dass er einen nicht geclusterten Index vorschlug. Ungefähr nach 30 Stunden generierte die automatische Azure SQL-Optimierung eine Empfehlung zum Erstellen eines Index. Für diese Wartezeit stellt Microsoft fest, dass „Azure SQL Database die Aktivitäten mindestens einen Tag lang überwachen muss, um einige Empfehlungen zu identifizieren“. Dieser Tuning-Empfehlungsindex ist derselbe wie der fehlende Index. Als das automatische Tuning versuchte, das Skript auszuführen, gab es einen Fehler wegen begrenztem Speicherplatz.

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

Automatische Tuning-Optionen sind wie folgt:

  • Index erstellen die die automatische Indexerstellung identifiziert, die die Leistung beeinträchtigen kann.
  • Drop-Index die ungenutzte oder redundante Indizes identifiziert.
  • Letzten Plan als gut erzwingen die SQL-Abfragepläne definiert, die schlechter sind als die vorherigen. Diese Funktion bezieht sich auf die automatische Plankorrektur in SQL Server 2017.

So aktivieren Sie die automatische Optimierung von Azure SQL

Azure Portal- oder T-SQL-Abfragen ermöglichen die Aktivierung automatischer Optimierungsoptionen. Diese Funktion kann gleichzeitig die automatische Optimierung auf Server- oder Datenbankebene aktivieren. Die Datenbankebene kann diese Optionen von der Serverebene erben.

Jetzt stellen wir eine Verbindung zum Azure-Portal her und suchen nach SQL-Servern.

Suchen Sie dann nach automatischen Tuning-Optionen.

Auf diesem Screenshot können wir automatische Optimierungsoptionen auf Serverebene und in der Standardeinstellung ändern und anwenden. Alle Datenbanken werden von der Serverebene geerbt. Wir können diese Option jedoch auch auf Datenbankebene ändern.

Die Option „Aktueller Status“ definiert den aktuellen Status der Option „Automatisches Tuning“. Microsoft bietet an, diese Funktion auf Serverebene zu verwalten, da ihre Einstellungen auf alle Datenbanken angewendet werden können.

Nun sehen wir uns die automatischen Tuning-Optionen auf Datenbankebene an. Wir finden diese Optionen in SQL-Datenbanken.

Wie Sie sehen, können wir automatische Optimierungsoptionen für eine einzelne Datenbank festlegen und Vererbungsoptionen ändern.

Der obige Screenshot identifiziert die folgenden Optionen:

  • Force-Plan-Status ist „ON“ und wird von der Serverebene geerbt, deren Status „ON“ ist.
  • Der Status „Index erstellen“ ist „AUS“ und wird von der Serverebene geerbt. Sein Zustand ist „AUS“.
  • Der Drop-Index-Status ist „EIN“ und diese Option ist nur für diese Datenbank festgelegt. Die Serverebene ist für diese Einstellung nicht wichtig.

Wir können die automatische Optimierung über T-SQL aktivieren:

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

In diesem Schritt sehen wir uns die Empfehlungen zur automatischen Optimierung an, die sich unterhalb des SQL Server-Menüs befinden.

Zusätzlich finden Sie unter dem Datenbankmenü automatische Tuning-Empfehlungen.

Tuning-Empfehlungen haben unterschiedliche Status:

  • Ausstehend: Der Befehl „Empfehlung anwenden“ wurde empfangen und soll ausgeführt werden.
  • Ausführung: Die Empfehlung wird angewendet.
  • Verifizierung: Die Empfehlung wurde erfolgreich angewendet und der Dienst misst den Nutzen.
  • Erfolg: Die Empfehlung wurde erfolgreich angewendet und der Nutzen wurde gemessen.
  • Fehler: Beim Anwenden der Empfehlung ist ein Fehler aufgetreten. Dies kann ein vorübergehendes Problem oder eine Schemaänderung an der Tabelle sein und das Skript ist nicht mehr gültig.
  • Zurücksetzen: Die Empfehlung wurde angewendet, wurde jedoch als nicht leistungsfähig eingestuft und automatisch zurückgesetzt.
  • Zurückgesetzt: Die Empfehlung wurde rückgängig gemacht.

Wenn die automatische Optimierung eine Empfehlung erstellt, die sich unterhalb der Registerkarte „Empfehlungen“ befindet, lautet der Status „Ausstehend“. Wenn der Status der Optimierungsempfehlung ausgeführt, Fortschritt, Erfolg oder Fehler ist, wird dies auf der Registerkarte Optimierungsverlauf angezeigt. Gleichzeitig kann sys.dm_db_tuning_recommendations Informationen über automatische Optimierungsempfehlungen zurückgeben.

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

Wenn wir auf „Empfehlung“ klicken, finden wir einige Details zur Tuning-Empfehlung.

Wir können viele nützliche Informationen zu Tuning-Empfehlungen erhalten und ein Skript dieser Funktion erstellen.

Die Details, die das Skript zurückgibt, sind wie folgt:

  • Auswirkung definiert eine Prioritätsstufe für Tuning-Empfehlungen.
  • Festplattenspeicherplatz erforderlich definiert den Speicherverbrauch.
  • Indextyp definiert, welche Art von Index erstellt wird.

Schlussfolgerungen

Meiner Meinung nach ist die automatische Optimierung von SQL Azure eine Funktion der neuen Generation, da Microsoft damit beginnt, Algorithmen der künstlichen Intelligenz bei der Optimierungsempfehlung zu verwenden. Gleichzeitig kann diese Funktion zu folgenden Fragen führen:

  • Wann sollte ich diese Tuning-Empfehlung haben?
  • Ist diese Tuning-Empfehlung sinnvoll? Wenn es nicht sinnvoll ist, wann sollte ich diese Tuning-Empfehlung rückgängig machen?

Daher bietet die automatische Optimierung von SQL Azure einen futuristischen Ansatz.

Referenzen

Automatische Optimierung in Azure SQL-Datenbank

Optimieren der Leistung in Azure SQL-Datenbank

Künstliche Intelligenz optimiert Azure SQL-Datenbanken