Microsoft ha recentemente annunciato un'incredibile nuova funzionalità:l'ottimizzazione automatica nel database SQL di Azure. Ad essere onesti, sono rimasto molto colpito da questa funzionalità perché gli ingegneri Microsoft hanno utilizzato in modo sofisticato l'intelligenza artificiale nell'ottimizzazione delle prestazioni di SQL Azure. L'obiettivo è monitorare il database SQL di Azure e inviare queste osservazioni al servizio di intelligence integrato che genera alcuni suggerimenti. Possono essere applicati in orari non di punta. Questa caratteristica ha anche semplificato il lavoro degli amministratori di database; ora non devono preoccuparsi delle prestazioni del database SQL Azure.
C'è un punto chiave sull'ottimizzazione automatica di SQL Azure nella documentazione di MSDN "L'ottimizzazione automatica apprende orizzontalmente da tutti i database in Azure tramite l'intelligenza artificiale e migliora dinamicamente le sue azioni di ottimizzazione". Significa che l'algoritmo di intelligenza artificiale apprende un'esperienza enorme da diversi database di SQL Azure. Per questo motivo, queste raccomandazioni saranno affidabili. La funzione di ottimizzazione automatica può anche ripristinare i consigli e correggersi.
Un'altra opzione interessante su questa funzione sono le notifiche. Microsoft sta aumentando la fiducia di questa funzionalità dicendo che è implementata in alcune aziende. Forse, questo approccio può essere un po' utopico, ma in futuro l'intelligenza artificiale avrà molte responsabilità dagli amministratori di database. Pertanto, il numero di attività per gli amministratori di database verrà ridotto.
Per testare questa funzionalità, ho creato due tabelle su Azure SQL e le ho popolate con alcuni dati. Dopo aver generato questi dati di test, ho eseguito molte query che richiedevano gli stessi indici non cluster. Quando ho esaminato il piano di esecuzione della query stimato, ho scoperto che suggeriva un indice non cluster. Dopo circa 30 ore, l'ottimizzazione automatica di Azure SQL ha generato un consiglio per la creazione di un indice. Per questo tempo di attesa, Microsoft osserva che "il database SQL di Azure deve monitorare le attività almeno per un giorno per identificare alcuni suggerimenti". Questo indice consigliato per l'ottimizzazione è uguale all'indice mancante. Quando l'ottimizzazione automatica ha tentato di eseguire lo script, si è verificato un errore a causa dello spazio su disco limitato.
/* 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 */
Le opzioni di ottimizzazione automatica sono le seguenti:
- Crea indice che identifica la creazione automatica dell'indice che potrebbe influire sulla performance.
- Indice di caduta che identifica indici non utilizzati o ridondanti.
- Forza ultimo piano buono che definisce piani di query SQL peggiori dei precedenti. Questa funzionalità si riferisce alla correzione automatica del piano in SQL Server 2017.
Come abilitare l'ottimizzazione automatica di Azure SQL
Portale di Azure o query T-SQL consentono di abilitare le opzioni di ottimizzazione automatica. Questa funzione può abilitare contemporaneamente l'ottimizzazione automatica a livello di server o database. Il livello del database può ereditare queste opzioni dal livello del server.
Ora ci connetteremo al portale di Azure e troveremo i server SQL.
Quindi, trova le opzioni di ottimizzazione automatica.
In questa schermata, possiamo modificare e applicare le opzioni di ottimizzazione automatica a livello di server e nell'impostazione predefinita. Tutti i database vengono ereditati dal livello del server. Tuttavia, possiamo anche modificare questa opzione a livello di database.
L'opzione Stato corrente definisce lo stato corrente dell'opzione di ottimizzazione automatica. Microsoft si offre di gestire questa funzionalità a livello di server perché le sue impostazioni possono essere applicate a tutti i database.
Ora esamineremo le opzioni di ottimizzazione automatica a livello di database. Possiamo trovare queste opzioni sui database SQL.
Come puoi vedere, possiamo impostare opzioni di ottimizzazione automatica per un singolo database e modificare le opzioni di eredità.
Lo screenshot sopra identifica le seguenti opzioni:
- Lo stato del piano di forza è "ON" ed è ereditato dal livello del server il cui stato è "ON".
- Lo stato di creazione dell'indice è "OFF" ed è ereditato dal livello del server. Il suo stato è "OFF".
- Lo stato Drop Index è "ON" e questa opzione è impostata solo per questo database. Il livello del server non è importante per questa impostazione.
Possiamo abilitare l'ottimizzazione automatica tramite T-SQL:
ALTER DATABASE current SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON, CREATE_INDEX = DEFAULT, DROP_INDEX)
A questo punto, esamineremo i consigli per l'ottimizzazione automatica che si trovano sotto il menu di SQL Server.
Inoltre, sotto il menu del database sono disponibili suggerimenti per l'ottimizzazione automatica.
I consigli di ottimizzazione hanno stati diversi:
- In attesa: Il comando Applica raccomandazione è stato ricevuto ed è pianificata per l'esecuzione.
- Esecuzione: La raccomandazione è stata applicata.
- Verifica: La raccomandazione è stata applicata con successo e il servizio sta misurando i benefici.
- Successo: La raccomandazione è stata applicata con successo e i benefici sono stati misurati.
- Errore: Si è verificato un errore durante il processo di applicazione della raccomandazione. Può trattarsi di un problema temporaneo o di una modifica dello schema della tabella e lo script non è più valido.
- Ripristino: Il consiglio è stato applicato, ma è stato ritenuto non performante e verrà automaticamente annullato.
- Ripristinato: Il consiglio è stato annullato.
Quando l'ottimizzazione automatica crea un consiglio che si troverà sotto la scheda Consigli, lo stato sarà in sospeso. Quando lo stato del consiglio di ottimizzazione è in esecuzione, avanzamento, successo o errore, verrà visualizzato nella scheda Cronologia ottimizzazione. Allo stesso tempo, sys.dm_db_tuning_recommendations può restituire informazioni sui consigli per l'ottimizzazione automatica.
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
Quando facciamo clic su Raccomandazione, possiamo trovare alcuni dettagli sui consigli di ottimizzazione.
Possiamo ottenere molte informazioni utili sui consigli di ottimizzazione e generare uno script di questa funzione.
I dettagli restituiti dallo script sono i seguenti:
- Impatto definisce un livello di priorità della raccomandazione di ottimizzazione.
- Spazio su disco necessario definisce il consumo di stoccaggio.
- Tipo di indice definisce quale tipo di indice creerà.
Conclusioni
A mio avviso, l'ottimizzazione automatica di SQL Azure è una funzionalità di nuova generazione perché Microsoft sta iniziando a utilizzare algoritmi di intelligenza artificiale nella raccomandazione di ottimizzazione. Allo stesso tempo, questa funzione può portare alle seguenti domande:
- Quando dovrei avere questo consiglio di ottimizzazione?
- Questo consiglio di ottimizzazione è utile? Se non è utile, quando dovrei ripristinare questo consiglio di ottimizzazione?
Di conseguenza, l'ottimizzazione automatica di SQL Azure offre un approccio futuristico.
Riferimenti
Ottimizzazione automatica nel database SQL di Azure
Ottimizzazione delle prestazioni nel database SQL di Azure
L'intelligenza artificiale ottimizza i database SQL di Azure