E-postaviseringar för automatisk justering

Gäller för:Azure SQL DatabaseAzure SQL Managed Instance

Rekommendationer för Azure SQL Database-justering genereras av automatisk justering i Azure SQL Database. Den här lösningen övervakar och analyserar kontinuerligt arbetsbelastningar för databaser med anpassade justeringsrekommendationer för varje enskild databas som rör skapande av index, borttagning av index och optimering av frågekörningsplaner.

Automatiska justeringsrekommendationer för Azure SQL Database kan visas i Azure-portalen, hämtas med REST API-anrop eller med hjälp av T-SQL - och PowerShell-kommandon . Den här artikeln baseras på hur du använder ett PowerShell-skript för att hämta rekommendationer för automatisk justering.

Kommentar

Den här artikeln använder Azure Az PowerShell-modulen, som är den rekommenderade PowerShell-modulen för interaktion med Azure. För att komma igång med Az PowerShell kan du läsa artikeln om att installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Viktigt!

PowerShell Azure Resource Manager-modulen stöds fortfarande av Azure SQL Database, men all framtida utveckling gäller för Az.Sql-modulen. Dessa cmdletar finns i AzureRM.Sql. Argumenten för kommandona i Az-modulen och i AzureRm-modulerna är väsentligen identiska.

Automatisera e-postaviseringar för automatiska justeringsrekommendationer

Följande lösning automatiserar sändning av e-postmeddelanden som innehåller automatiska justeringsrekommendationer. Lösningen som beskrivs består av att automatisera körningen av ett PowerShell-skript för att hämta justeringsrekommendationer med hjälp av Azure Automation och automatisering av schemaläggning av e-postleveransjobb med Hjälp av Microsoft Power Automate.

Skapa Azure Automation-konto

För att använda Azure Automation är det första steget att skapa ett automationskonto och konfigurera det med Azure-resurser som ska användas för körning av PowerShell-skriptet. Mer information om Azure Automation och dess funktioner finns i Komma igång med Azure Automation.

Följ de här stegen för att skapa ett Azure Automation-konto med hjälp av metoden för att välja och konfigurera en Automation-app från Azure Marketplace:

  1. Logga in på Azure Portal.

  2. Klicka på "+ Skapa en resurs" i det övre vänstra hörnet.

  3. Sök efter "Automation" (tryck på retur).

  4. Klicka på Automation-appen i sökresultaten.

    Adding Azure automation

  5. I fönstret "Skapa ett Automation-konto" klickar du på "Skapa".

  6. Fyll i nödvändig information: Ange ett namn för det här automationskontot, välj ditt Azure-prenumerations-ID och Azure-resurser som ska användas för PowerShell-skriptkörningen.

  7. För alternativet "Skapa Azure Kör som-konto" väljer du Ja för att konfigurera vilken typ av konto under vilket PowerShell-skript körs med hjälp av Azure Automation. Mer information om kontotyper finns i Kör som-konto.

  8. Avsluta skapandet av automationskontot genom att klicka på Skapa.

Dricks

Registrera ditt Azure Automation-kontonamn, prenumerations-ID och resurser (till exempel kopiera klistra in till ett anteckningsblock) precis som du angav när du skapade Automation-appen. Du behöver den här informationen senare.

Om du har flera Azure-prenumerationer som du vill skapa samma automatisering för måste du upprepa den här processen för dina andra prenumerationer.

Uppdatera Azure Automation-moduler

PowerShell-skriptet för att hämta rekommendationen för automatisk justering använder kommandona Get-AzResource och Get-AzSqlDatabaseRecommendedAction för vilka Azure Module version 4 och senare krävs.

  • Om dina Azure-moduler behöver uppdateras kan du läsa Stöd för Az-moduler i Azure Automation.

Skapa En Azure Automation-runbook

Nästa steg är att skapa en Runbook i Azure Automation där PowerShell-skriptet för hämtning av justeringsrekommendationer finns.

Följ dessa steg för att skapa en ny Azure Automation-runbook:

  1. Få åtkomst till det Azure Automation-konto som du skapade i föregående steg.

  2. I fönstret Automation-konto klickar du på menyalternativet "Runbooks" till vänster för att skapa en ny Azure Automation-runbook med PowerShell-skriptet. Mer information om hur du skapar Automation-runbooks finns i Skapa en ny runbook.

  3. Om du vill lägga till en ny runbook klickar du på menyalternativet "+Lägg till en runbook" och klickar sedan på "Snabbskapa – Skapa en ny runbook"..

  4. I fönstret Runbook skriver du in namnet på din runbook (i det här exemplet "AutomaticTuningEmailAutomation" används), väljer du typen av runbook som PowerShell och skriver en beskrivning av den här runbooken för att beskriva dess syfte.

  5. Klicka på knappen Skapa för att slutföra skapandet av en ny runbook.

    Add Azure automation runbook

Följ dessa steg för att läsa in ett PowerShell-skript i den runbook som skapats:

  1. I fönstret "Redigera PowerShell Runbook" väljer du "RUNBOOKS" i menyträdet och expanderar vyn tills du ser namnet på din runbook (i det här exemplet "AutomaticTuningEmailAutomation"). Välj den här runbooken.
  2. På den första raden i "Redigera PowerShell Runbook" (från och med nummer 1) kopierar du följande PowerShell-skriptkod. Det här PowerShell-skriptet tillhandahålls som det är för att komma igång. Ändra skriptet så att det passar dina behov.

I rubriken för det angivna PowerShell-skriptet måste du ersätta <SUBSCRIPTION_ID_WITH_DATABASES> med ditt Azure-prenumerations-ID. Information om hur du hämtar ditt Azure-prenumerations-ID finns i Hämta ditt GUID för Azure-prenumeration.

När det gäller flera prenumerationer kan du lägga till dem som kommaavgränsade till egenskapen "$subscriptions" i huvudet på skriptet.

# 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

Klicka på knappen "Spara" i det övre högra hörnet för att spara skriptet. När du är nöjd med skriptet klickar du på knappen Publicera för att publicera den här runbooken.

I huvudfönstret för runbook kan du välja att klicka på knappen "Start" för att testa skriptet. Klicka på "Utdata" för att visa resultatet av skriptet som körs. Utdata kommer att vara innehållet i din e-post. Exempelutdata från skriptet visas i följande skärmbild.

Run view automatic tuning recommendations with Azure Automation

Se till att justera innehållet genom att anpassa PowerShell-skriptet efter dina behov.

Med stegen ovan läses PowerShell-skriptet för att hämta automatiska justeringsrekommendationer in i Azure Automation. Nästa steg är att automatisera och schemalägga e-postleveransjobbet.

Automatisera e-postjobben med Microsoft Power Automate

För att slutföra lösningen skapar du som sista steg ett automatiseringsflöde i Microsoft Power Automate som består av tre åtgärder (jobb):

  • "Azure Automation – Skapa jobb" – används för att köra PowerShell-skriptet för att hämta automatiska justeringsrekommendationer i Azure Automation-runbooken.
  • "Azure Automation – Hämta jobbutdata" – används för att hämta utdata från det körda PowerShell-skriptet.
  • "Office 365 Outlook – Skicka ett e-postmeddelande" – används för att skicka ut e-post. E-postmeddelanden skickas ut med hjälp av arbets- eller skolkontot för den person som skapar flödet.

Mer information om Microsoft Power Automate-funktioner finns i Komma igång med Microsoft Power Automate.

Förutsättningen för det här steget är att registrera dig för ett Microsoft Power Automate-konto och logga in. När du är inne i lösningen följer du dessa steg för att konfigurera ett nytt flöde:

  1. Öppna menyalternativet Mina flöden.
  2. I Mina flöden väljer du länken "+Skapa från tom" överst på sidan.
  3. Klicka på länken "Sök efter hundratals anslutningsappar och utlösare" längst ned på sidan.
  4. I sökfältet skriver du "upprepning" och väljer "Schema – upprepning" i sökresultaten för att schemalägga att e-postleveransjobbet ska köras.
  5. I fönstret Återkommande i fältet Frekvens väljer du schemaläggningsfrekvensen för det här flödet som ska köras, till exempel skicka automatiserad e-post varje minut, timme, dag, vecka osv.

Nästa steg är att lägga till tre jobb (skapa, hämta utdata och skicka e-post) till det nyligen skapade återkommande flödet. Följ dessa steg för att lägga till de jobb som krävs i flödet:

  1. Skapa åtgärd för att köra PowerShell-skript för att hämta justeringsrekommendationer

    • Välj "+Nytt steg", följt av "Lägg till en åtgärd" i fönstret Upprepningsflöde.
    • I sökfältet skriver du "automation" och väljer "Azure Automation – Skapa jobb" i sökresultaten.
    • I fönstret Skapa jobb konfigurerar du jobbegenskaperna. För den här konfigurationen behöver du information om ditt Azure-prenumerations-ID, resursgrupp och Automation-konto som tidigare registrerats i fönstret Automation-konto. Mer information om tillgängliga alternativ i det här avsnittet finns i Azure Automation – Skapa jobb.
    • Slutför skapandet av den här åtgärden genom att klicka på "Spara flöde".
  2. Skapa en åtgärd för att hämta utdata från det körda PowerShell-skriptet

    • Välj "+Nytt steg", följt av "Lägg till en åtgärd" i fönstret Upprepningsflöde
    • I sökfältet skriver du "automation" och väljer "Azure Automation – Hämta jobbutdata" i sökresultaten. Mer information om tillgängliga alternativ i det här avsnittet finns i Azure Automation – Hämta jobbutdata.
    • Fyll i fält som krävs (ungefär som när du skapade föregående jobb) – fyll i ditt Azure-prenumerations-ID, resursgrupp och Automation-konto (som anges i fönstret Automation-konto).
    • Klicka i fältet "Jobb-ID" för att visa menyn "Dynamiskt innehåll". I den här menyn väljer du alternativet "Jobb-ID".
    • Slutför skapandet av den här åtgärden genom att klicka på "Spara flöde".
  3. Skapa en åtgärd för att skicka ut e-post med hjälp av Office 365-integrering

    • Välj "+Nytt steg", följt av "Lägg till en åtgärd" i fönstret Upprepningsflöde.
    • I sökfältet skriver du "skicka ett e-postmeddelande" och väljer "Office 365 Outlook – Skicka ett e-postmeddelande" i sökresultaten.
    • I fältet "Till" anger du den e-postadress som du behöver skicka e-postmeddelandet till.
    • I fältet "Ämne" skriver du ämnet för din e-post, till exempel "E-postavisering för automatiska justeringsrekommendationer".
    • Klicka i fältet "Brödtext" för att visa menyn "Dynamiskt innehåll". Från den här menyn, under "Hämta jobbutdata", väljer du "Innehåll".
    • Slutför skapandet av den här åtgärden genom att klicka på "Spara flöde".

Dricks

Skapa separata flöden om du vill skicka automatiserade e-postmeddelanden till olika mottagare. I dessa ytterligare flöden ändrar du mottagarens e-postadress i fältet "Till" och e-postämnesraden i fältet "Ämne". Genom att skapa nya runbooks i Azure Automation med anpassade PowerShell-skript (till exempel med ändring av Azure-prenumerations-ID) kan du anpassa automatiserade scenarier ytterligare, till exempel genom att skicka e-post till separata mottagare för automatiska justeringsrekommendationer för separata prenumerationer.

Ovanstående avslutar de steg som krävs för att konfigurera arbetsflödet för e-postleveransjobbet. Hela flödet som består av tre åtgärder som skapats visas i följande bild.

View automatic tuning email notifications flow

Om du vill testa flödet klickar du på "Kör nu" i det övre högra hörnet i flödesfönstret.

Statistik över körning av automatiserade jobb, som visar lyckade e-postaviseringar som skickats ut, kan visas i fönstret Flödesanalys.

Running flow for automatic tuning email notifications

Fönstret Flödesanalys är användbart för att övervaka lyckade jobbkörningar och om det behövs för felsökning. Vid felsökning kanske du också vill undersöka körningsloggen för PowerShell-skript som är tillgänglig via Azure Automation-appen.

De slutliga utdata från det automatiserade e-postmeddelandet ser ut ungefär som följande e-postmeddelande som tas emot när du har skapat och kört den här lösningen:

Sample email output from automatic tuning email notifications

Genom att justera PowerShell-skriptet kan du justera utdata och formatering för det automatiserade e-postmeddelandet efter dina behov.

Du kan ytterligare anpassa lösningen för att skapa e-postaviseringar baserat på en specifik justeringshändelse och till flera mottagare för flera prenumerationer eller databaser, beroende på dina anpassade scenarier.

Nästa steg