Notifiche tramite posta elettronica per l'ottimizzazione automatica

Si applica a: Database SQL di Azure Istanza gestita di SQL di Azure

Azure SQL le raccomandazioni di ottimizzazione del database vengono generate dall'ottimizzazione automatica del database di Azure SQL. Questa soluzione monitora e analizza continuamente i carichi di lavoro dei database fornendo raccomandazioni di ottimizzazione personalizzate per ogni singolo database correlato alla creazione di indici, all'eliminazione dell'indice e all'ottimizzazione dei piani di esecuzione delle query.

Azure SQL raccomandazioni per l'ottimizzazione automatica del database possono essere visualizzate nel portale di Azure, recuperate con le chiamate API REST o usando i comandi T-SQL e PowerShell. Questo articolo si basa sull'utilizzo di uno script di PowerShell per recuperare suggerimenti di ottimizzazione automatica.

Nota

Questo articolo usa il modulo Azure Az PowerShell, che è il modulo PowerShell consigliato per l'interazione con Azure. Per iniziare a usare il modulo Az PowerShell, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Importante

Il modulo Azure Resource Manager di PowerShell è ancora supportato da Database SQL di Azure, ma tutte le attività di sviluppo future sono incentrate sul modulo Az.Sql. Per informazioni su questi cmdlet, vedere AzureRM.Sql. Gli argomenti per i comandi nei moduli Az e AzureRm sono sostanzialmente identici.

Automatizzare le notifiche tramite posta elettronica per le raccomandazioni per l'ottimizzazione automatica

La soluzione seguente automatizza l'invio di notifiche tramite posta elettronica contenenti raccomandazioni per l'ottimizzazione automatica. La soluzione descritta consiste nell'automatizzare l'esecuzione di uno script di PowerShell per recuperare le raccomandazioni di ottimizzazione usando Automazione di Azure e l'automazione della pianificazione del processo di recapito della posta elettronica tramite Microsoft Power Automate.

Creare un account di Automazione di Azure

Per usare Automazione di Azure, il primo passaggio consiste nel creare un account di automazione e configurarlo con le risorse di Azure da usare per l'esecuzione dello script di PowerShell. Per altre informazioni su Automazione di Azure e le relative funzionalità, vedere Introduzione ad Automazione di Azure.

Seguire questa procedura per creare un account Automazione di Azure tramite il metodo di selezione e configurazione di un'app di Automazione da Azure Marketplace:

  1. Accedere al portale di Azure.

  2. Fare clic su "+ Crea una risorsa" nell'angolo superiore sinistro.

  3. Cercare "Automazione" (premere INVIO).

  4. Fare clic sull'app Automazione nei risultati della ricerca.

    Aggiunta di Automazione di Azure

  5. Una volta all'interno del riquadro "Crea un account di Automazione", fare clic su "Crea".

  6. Popolare le informazioni necessarie: immettere un nome per questo account di automazione, selezionare l'ID sottoscrizione di Azure e le risorse di Azure da usare per l'esecuzione dello script di PowerShell.

  7. Per l'opzione "Crea account RunAs di Azure" selezionare per configurare il tipo di account in cui viene eseguito lo script di PowerShell con l'aiuto di Automazione di Azure. Per altre informazioni sui tipi di account, vedere Account RunAs.

  8. Terminare la creazione dell'account di automazione facendo clic su Crea.

Suggerimento

Annotare il nome dell'account di Automazione di Azure, l'ID della sottoscrizione e le risorse (ad esempio, copiandoli e incollandoli in un blocco note), esattamente come sono stati immessi durante la creazione dell'app Automazione. Queste informazioni saranno necessarie più avanti.

Se si hanno più sottoscrizioni di Azure per le quali si vuole creare la stessa automazione, è necessario ripetere questo processo anche per le altre sottoscrizioni.

Aggiornare i moduli di Automazione di Azure

Lo script di PowerShell per recuperare la raccomandazione di ottimizzazione automatica usa i comandi Get-AzResource e Get-AzSqlDatabaseRecommendedAction per i quali è necessario il modulo di Azure versione 4 e successive.

Creare Automazione di Azure runbook

Il passaggio successivo consiste nella creazione di un runbook in Automazione di Azure all'interno del quale si trova lo script di PowerShell per il recupero dei suggerimenti di ottimizzazione.

Per creare un nuovo runbook di Automazione di Azure, seguire questa procedura:

  1. Accedere all'account Automazione di Azure creato nel passaggio precedente.

  2. Una volta nel riquadro dell'account di automazione, fare clic sulla voce di menu "Runbook" sul lato sinistro per creare un nuovo runbook Automazione di Azure con lo script di PowerShell. Per altre informazioni sulla creazione di runbook di automazione, vedere Creare un nuovo runbook.

  3. Per aggiungere un nuovo runbook, fare clic sull'opzione di menu "+Aggiungi un runbook" e quindi fare clic su "Creazione rapida - Crea un nuovo runbook".

  4. Nel riquadro Runbook digitare il nome del runbook (ai fini di questo esempio viene usato "AutomaticTuningEmailAutomation"), selezionare il tipo di runbook come PowerShell e scrivere una descrizione di questo runbook per descriverne lo scopo.

  5. Fare clic sul pulsante Crea per completare la creazione di un nuovo runbook.

    Aggiungere un runbook di Automazione di Azure

Seguire questa procedura per caricare uno script di PowerShell nel runbook creato:

  1. Nel riquadro "Modifica runbook di PowerShell" selezionare "RUNBOOK" nell'albero dei menu ed espandere la visualizzazione fino a visualizzare il nome del runbook (in questo esempio "AutomaticTuningEmailAutomation"). Selezionare questo runbook.
  2. Nella prima riga del "Edit PowerShell Runbook" (a partire dal numero 1), copiare e incollare il codice di script di PowerShell seguente. Questo script di PowerShell viene fornito così com'è per iniziare. Modificare lo script in base alle esigenze.

Nell'intestazione dello script di PowerShell fornito è necessario sostituire <SUBSCRIPTION_ID_WITH_DATABASES> con l'ID della sottoscrizione di Azure. Per informazioni su come recuperare l'ID della sottoscrizione di Azure, vedere Getting your Azure Subscription GUID (Recupero del codice GUID della sottoscrizione).

Nel caso di più sottoscrizioni, è possibile aggiungerle come delimitate da virgole alla proprietà "$subscriptions" nell'intestazione dello script.

# PowerShell script to retrieve Azure SQL Database automatic tuning recommendations.
#
# Provided "as-is" with no implied warranties or support.
# The script is released to the public domain.
#
# Replace <SUBSCRIPTION_ID_WITH_DATABASES> in the header with your Azure subscription ID.
#
# Microsoft Azure SQL Database team, 2018-01-22.

# Set subscriptions : IMPORTANT – REPLACE <SUBSCRIPTION_ID_WITH_DATABASES> WITH YOUR SUBSCRIPTION ID
$subscriptions = ("<SUBSCRIPTION_ID_WITH_DATABASES>", "<SECOND_SUBSCRIPTION_ID_WITH_DATABASES>", "<THIRD_SUBSCRIPTION_ID_WITH_DATABASES>")

# Get credentials
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

# Define the resource types
$resourceTypes = ("Microsoft.Sql/servers/databases")
$advisors = ("CreateIndex", "DropIndex");
$results = @()

# Loop through all subscriptions
foreach($subscriptionId in $subscriptions) {
    Select-AzSubscription -SubscriptionId $subscriptionId
    $rgs = Get-AzResourceGroup

    # Loop through all resource groups
    foreach($rg in $rgs) {
        $rgname = $rg.ResourceGroupName;

        # Loop through all resource types
        foreach($resourceType in $resourceTypes) {
            $resources = Get-AzResource -ResourceGroupName $rgname -ResourceType $resourceType

            # Loop through all databases
            # Extract resource groups, servers and databases
            foreach ($resource in $resources) {
                $resourceId = $resource.ResourceId
                if ($resourceId -match ".*RESOURCEGROUPS/(?<content>.*)/PROVIDERS.*") {
                    $ResourceGroupName = $matches['content']
                } else {
                    continue
                }
                if ($resourceId -match ".*SERVERS/(?<content>.*)/DATABASES.*") {
                    $ServerName = $matches['content']
                } else {
                    continue
                }
                if ($resourceId -match ".*/DATABASES/(?<content>.*)") {
                    $DatabaseName = $matches['content']
                } else {
                    continue
                }

                # Skip if master
                if ($DatabaseName -eq "master") {
                    continue
                }

                # Loop through all automatic tuning recommendation types
                foreach ($advisor in $advisors) {
                    $recs = Get-AzSqlDatabaseRecommendedAction -ResourceGroupName $ResourceGroupName -ServerName $ServerName  -DatabaseName $DatabaseName -AdvisorName $advisor
                    foreach ($r in $recs) {
                        if ($r.State.CurrentValue -eq "Active") {
                            $object = New-Object -TypeName PSObject
                            $object | Add-Member -Name 'SubscriptionId' -MemberType Noteproperty -Value $subscriptionId
                            $object | Add-Member -Name 'ResourceGroupName' -MemberType Noteproperty -Value $r.ResourceGroupName
                            $object | Add-Member -Name 'ServerName' -MemberType Noteproperty -Value $r.ServerName
                            $object | Add-Member -Name 'DatabaseName' -MemberType Noteproperty -Value $r.DatabaseName
                            $object | Add-Member -Name 'Script' -MemberType Noteproperty -Value $r.ImplementationDetails.Script
                            $results += $object
                        }
                    }
                }
            }
        }
    }
}

# Format and output results for the email
$table = $results | Format-List
Write-Output $table

Fare clic sul pulsante "Salva" nell'angolo superiore destro per salvare lo script. Quando si è soddisfatti dello script, fare clic sul pulsante "Pubblica" per pubblicare il runbook.

Nel riquadro principale del runbook è possibile scegliere di fare clic sul pulsante "Avvia" per testare lo script. Fare clic su "Output" per visualizzare i risultati dello script eseguito. Questo output diventerà il contenuto del messaggio di posta elettronica. L'output dello script di esempio può essere visualizzato nella schermata seguente.

Eseguire i suggerimenti di ottimizzazione automatica con Automazione di Azure

Modificare il contenuto personalizzando lo script di PowerShell in base alle esigenze.

Con i passaggi precedenti, lo script di PowerShell per recuperare le raccomandazioni per l'ottimizzazione automatica viene caricato in Automazione di Azure. Il passaggio successivo consiste nell'automatizzazione e nella pianificazione del processo di recapito della posta elettronica.

Automatizzare i processi di posta elettronica con Microsoft Power Automate

Per completare la soluzione, come passaggio finale, creare un flusso di automazione in Microsoft Power Automate costituito da tre azioni (processi):

  • "Automazione di Azure - Crea processo" usato per eseguire lo script di PowerShell per recuperare le raccomandazioni di ottimizzazione automatica all'interno del runbook Automazione di Azure.
  • "Automazione di Azure - Ottenere l'output del processo" usato per recuperare l'output dallo script di PowerShell eseguito.
  • "Office 365 Outlook – Invia un messaggio di posta elettronica" usato per inviare un messaggio di posta elettronica. I messaggi di posta elettronica vengono inviati usando l'account aziendale o dell'istituto di istruzione del singolo utente che crea il flusso.

Per altre informazioni sulle funzionalità di Microsoft Power Automate, vedere Introduzione a Microsoft Power Automate.

Il prerequisito per questo passaggio consiste nell'iscriversi per ottenere un account Di Microsoft Power Automate e accedere. Dopo aver eseguito l'accesso alla soluzione, seguire questa procedura per configurare un nuovo flusso:

  1. Accedere alla voce di menu "Flussi personali".
  2. In Flussi personali selezionare il collegamento "+Crea da vuoto" nella parte superiore della pagina.
  3. Fare clic sul collegamento "Cerca centinaia di connettori e trigger" nella parte inferiore della pagina.
  4. Nel campo di ricerca digitare "ricorrenza" e selezionare "Pianificazione - Ricorrenza" nei risultati della ricerca per pianificare l'esecuzione del processo di recapito tramite posta elettronica.
  5. Nel campo Frequenza del riquadro Ricorrenza selezionare la frequenza di pianificazione per l'esecuzione del flusso, ad esempio per inviare messaggi di posta elettronica automatici ogni minuto, ora, giorno, settimana e così via.

Il passaggio successivo consiste nell'aggiunta dei tre processi (creazione, acquisizione dell'output e invio del messaggio di posta elettronica) al flusso ricorrente appena creato. Per aggiungere al flusso i tre processi richiesti, seguire questa procedura:

  1. Creare l'azione per eseguire lo script di PowerShell per recuperare i suggerimenti di ottimizzazione

    • Selezionare "+Nuovo passaggio", seguito da "Aggiungi un'azione" nel riquadro Flusso ricorrenza.
    • Nel campo di ricerca digitare "automazione" e selezionare "Automazione di Azure – Crea processo" nei risultati della ricerca.
    • Nel riquadro di creazione del processo configurare le proprietà del processo. Per questa configurazione saranno necessari l'ID della sottoscrizione di Azure, il gruppo di risorse e l'account di Automazione precedentemente annotati dal riquadro dell'account di Automazione. Per altre informazioni sulle opzioni disponibili in questa sezione, vedere Azure Automation - Create Job (Automazione di Azure - Creare il processo).
    • Completare la creazione di questa azione facendo clic su "Salva flusso".
  2. Creare un'azione per recuperare l'output dallo script di PowerShell eseguito

    • Selezionare "+Nuovo passaggio", seguito da "Aggiungi un'azione" nel riquadro Flusso ricorrenza
    • Nel campo di ricerca digitare "automazione" e selezionare "Automazione di Azure – Ottenere l'output del processo" nei risultati della ricerca. Per altre informazioni sulle opzioni disponibili in questa sezione, vedere Azure Automation – Get job output (Automazione di Azure - Ottenere l'output del processo).
    • Popolare i campi necessari (in modo analogo alla creazione del processo precedente): popolare l'ID sottoscrizione di Azure, il gruppo di risorse e l'account di Automazione , come immesso nel riquadro Account di Automazione.
    • Fare clic all'interno del campo "ID processo" per visualizzare il menu "Contenuto dinamico". Nel menu selezionare l'opzione "ID processo".
    • Completare la creazione di questa azione facendo clic su "Salva flusso".
  3. Creare un'azione per inviare un messaggio di posta elettronica tramite l'integrazione di Office 365

    • Selezionare "+Nuovo passaggio", seguito da "Aggiungi un'azione" nel riquadro Flusso ricorrenza.
    • Nel campo di ricerca digitare "invia un messaggio di posta elettronica" e selezionare "Office 365 Outlook - Invia un messaggio di posta elettronica" dai risultati della ricerca.
    • Nel campo "To" digitare nell'indirizzo di posta elettronica a cui è necessario inviare il messaggio di posta elettronica di notifica.
    • Nel campo "Oggetto" digitare nell'oggetto del messaggio di posta elettronica, ad esempio "Notifiche di posta elettronica di ottimizzazione automatica".
    • Fare clic all'interno del campo "Corpo" per visualizzare il menu "Contenuto dinamico". Da questo menu, in "Recupera output processo", selezionare "Contenuto".
    • Completare la creazione di questa azione facendo clic su "Salva flusso".

Suggerimento

Per inviare messaggi di posta elettronica automatizzati a destinatari diversi, creare flussi separati. In questi flussi aggiuntivi modificare l'indirizzo di posta elettronica del destinatario nel campo "To" e la riga dell'oggetto di posta elettronica nel campo "Oggetto". La creazione di nuovi runbook in Automazione di Azure con script di PowerShell personalizzati (ad esempio con la modifica dell'ID sottoscrizione di Azure) consente una ulteriore personalizzazione degli scenari automatizzati, ad esempio la posta elettronica di destinatari separati nelle raccomandazioni di ottimizzazione automatizzate per le sottoscrizioni separate.

Si è così conclusa la procedura per configurare il flusso di lavoro del processo di recapito di posta elettronica. Nell'immagine seguente è illustrato il flusso intero costituito dalle tre azioni create.

Visualizzare il flusso delle notifiche tramite posta elettronica per l'ottimizzazione automatica

Per testare il flusso, fare clic su "Esegui ora" nell'angolo superiore destro all'interno del riquadro del flusso.

Le statistiche di esecuzione dei processi automatizzati, con esito positivo delle notifiche di posta elettronica inviate, possono essere visualizzate nel riquadro Analisi di flusso.

Esecuzione del flusso delle notifiche tramite posta elettronica per l'ottimizzazione automatica

Il riquadro Analisi flusso è utile per monitorare l'esito positivo delle esecuzioni dei processi e, se necessario per la risoluzione dei problemi. Nel caso della risoluzione dei problemi, è anche possibile esaminare il log di esecuzione dello script di PowerShell accessibile tramite l'app Automazione di Azure.

L'output finale del messaggio di posta elettronica automatizzato è simile al seguente messaggio di posta elettronica ricevuto dopo aver compilato ed eseguito questa soluzione:

Esempio di output di notifiche tramite posta elettronica per l'ottimizzazione automatica

Modificando lo script di PowerShell è possibile modificare l'output e la formattazione del messaggio di posta elettronica automatizzato in base alle proprie esigenze.

In base agli scenari personalizzati, è possibile anche personalizzare ulteriormente la soluzione in modo da creare notifiche tramite posta elettronica basate su uno specifico evento di ottimizzazione.

Passaggi successivi