다음을 통해 공유


자동 튜닝 이메일 알림 활성화

적용 대상: Azure SQL 데이터베이스 Azure SQL Managed Instance

Azure SQL 데이터베이스 조정 권장 사항은 Azure SQL 데이터베이스 자동 조정에서 생성됩니다. 이 솔루션은 인덱스 생성, 인덱스 삭제 및 쿼리 실행 계획의 최적화와 관련된 각 개별 데이터베이스에 대해 사용자 지정된 튜닝 권장 사항을 제공하는 데이터베이스 워크로드를 지속적으로 모니터링하고 분석합니다.

Azure SQL 데이터베이스 자동 튜닝 권장 사항은 Azure Portal에서 확인하거나 REST API 호출을 사용하여 검색하거나 T-SQLPowerShell 명령을 사용하여 확인할 수 있습니다. 이 문서는 PowerShell 스크립트를 사용하여 자동 튜닝 권장 사항을 검색하는 방법을 기반으로 합니다.

참고 항목

이 문서에서는 Azure와 상호 작용하는 데 권장되는 PowerShell 모듈인 Azure Az PowerShell 모듈을 사용합니다. Az PowerShell 모듈을 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

중요

PowerShell Azure Resource Manager 모듈은 여전히 Azure SQL 데이터베이스에서 지원되지만 향후의 모든 개발은 Az.Sql 모듈을 위한 것입니다. 이러한 cmdlet은 AzureRM.Sql을 참조하세요. Az 모듈 및 AzureRm 모듈의 명령에 대한 인수는 실질적으로 동일합니다.

자동 튜닝 권장 사항에 대한 전자 메일 알림 자동화

다음 솔루션은 자동 튜닝 권장 사항을 포함하는 메일 알림 전송을 자동화합니다. 설명된 솔루션은 Azure Automation을 사용하여 튜닝 권장 사항을 검색하기 위한 PowerShell 스크립트 실행을 자동화하고 Microsoft Power Automate를 사용하여 전자 메일 배달 작업을 예약하는 자동화로 구성됩니다.

Azure Automation 계정 만들기

Azure Automation을 사용하려면 우선 자동화 계정을 만들고 PowerShell 스크립트 실행에 사용할 Azure 리소스를 사용하여 구성해야 합니다. Azure Automation 및 해당 기능에 대해 자세히 알아보려면 Azure Automation 시작하기를 참조하세요.

다음 단계를 따라 Azure Marketplace의 Automation 앱을 선택하고 구성하는 메서드를 통해 Azure Automation 계정을 만듭니다.

  1. Azure Portal에 로그인합니다.

  2. 왼쪽 위 모서리에서 "+ 리소스 만들기"를 클릭합니다.

  3. "Automation"을 검색합니다(Enter 키를 누릅니다).

  4. 검색 결과에서 Automation 앱을 클릭합니다.

    Azure Automation 추가

  5. "Automation 계정 만들기" 창에서 "만들기"를 클릭합니다.

  6. 필요한 정보를 채웁니다. 이 자동화 계정의 이름을 입력하고, PowerShell 스크립트 실행에 사용할 Azure 구독 ID 및 Azure 리소스를 선택합니다.

  7. "Azure 실행 계정 만들기" 옵션의 경우 를 선택하여 Azure Automation의 도움을 받아 PowerShell 스크립트가 실행되는 계정 유형을 구성합니다. 계정 유형에 대한 자세한 내용은 실행 계정을 참조 하세요.

  8. 만들기를 클릭하여 자동화 계정 만들기를 완료합니다.

Azure Automation 계정 이름, 구독 ID 및 리소스를 Automation 앱을 만들 때 입력한 대로 정확히 적어 둡니다(예: 메모장에 복사하여 붙여넣기). 이 정보는 이후 단계에서 필요합니다.

동일한 Automation을 구축하려는 Azure 구독이 여러 개 있는 경우 다른 구독에 대해서도 이 프로세스를 반복해야 합니다.

Azure 모듈 업데이트

Automation 조정 권장 사항을 검색하는 PowerShell 스크립트는 Azure 모듈 버전 4 이상이 필요한 Get-AzResourceGet-AzSqlDatabaseRecommendedAction 명령을 사용합니다.

Azure Automation Runbook 만들기

다음 단계는 Azure Automation에서 조정 권장 사항의 검색하기 위한 PowerShell 스크립트가 있는 Runbook을 만드는 것입니다.

다음 단계에 따라 새 Azure Automation Runbook을 만듭니다.

  1. 이전 단계에서 만든 Azure Automation 계정에 액세스합니다.

  2. Automation 계정 창 왼쪽에서 "Runbook" 메뉴 항목을 클릭하여 PowerShell 스크립트로 새 Azure Automation Runbook을 만듭니다. 자동화 Runbook을 만드는 방법에 대한 자세한 내용은 새 Runbook 만들기를 참조하세요.

  3. 새 Runbook을 추가하려면 "+ Runbook 추가" 메뉴 옵션을 클릭하고 "빨리 만들기 – 새 Runbook 만들기"를 클릭합니다.

  4. Runbook 창에서 Runbook의 이름(이 예시에서는 "AutomaticTuningEmailAutomation"이 사용됨)을 입력하고, Runbook 유형을 PowerShell로 선택하고, 이 Runbook에 대한 설명을 작성하여 용도를 설명합니다.

  5. 만들기 단추를 클릭하여 새 Runbook 만들기를 완료합니다.

    Azure Automation Runbook 추가

다음 단계에 따라 만든 Runbook 내에 PowerShell 스크립트를 로드합니다.

  1. "PowerShell Runbook 편집" 창 내에서 메뉴 트리에서 "RUNBOOKS"를 선택하고 Runbook 이름이 표시될 때까지 보기를 확장합니다(이 예시에서는 "AutomaticTuningEmailAutomation"). 해당 Runbook을 선택합니다.
  2. "PowerShell Runbook 편집"(숫자 1부터 시작)의 첫 번째 줄에서 다음 PowerShell 스크립트 코드를 복사하여 붙여넣습니다. 이 PowerShell 스크립트는 시작하기 위해 있는 그대로 제공됩니다. 요구 사항을 충족하도록 스크립트를 수정합니다.

제공된 PowerShell 스크립트의 헤더에서 <SUBSCRIPTION_ID_WITH_DATABASES>를 Azure 구독 ID로 바꾸어야 합니다. Azure 구독 ID를 검색하는 방법을 알아보려면 Azure 구독 GUID 가져오기를 참조하세요.

여러 구독의 경우 스크립트 헤더의 "$subscriptions" 속성에 쉼표로 구분된 것으로 추가할 수 있습니다.

# 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

오른쪽 위 모서리에서 "저장" 단추를 클릭하여 스크립트를 저장합니다. 스크립트에 만족하면 "게시" 단추를 클릭하여 이 Runbook을 게시합니다.

기본 Runbook 창에서 "시작" 단추를 클릭하여 스크립트를 테스트하도록 선택할 수 있습니다. "출력"을 클릭하여 실행된 스크립트의 결과를 봅니다. 이 출력은 전자 메일의 내용이 될 것입니다. 스크립트의 샘플 출력은 다음 스크린샷에서 볼 수 있습니다.

Azure Automation을 사용한 자동 조정 권장 사항 보기 실행

PowerShell 스크립트를 필요에 맞게 사용자 지정하여 콘텐츠를 조정해야 합니다.

위의 단계를 사용하면 자동 튜닝 권장 사항을 검색하는 PowerShell 스크립트가 Azure Automation에 로드됩니다. 다음 단계는 전자 메일 배달 작업을 자동화하고 예약하는 것입니다.

Microsoft Power Automate로 이메일 작업 자동화하기

솔루션을 완료하려면 최종 단계로, Microsoft Power Automate에서 다음 세 가지 작업으로 구성되는 자동화 흐름을 만듭니다.

  • "Azure Automation - 작업 만들기" Azure Automation Runbook 내에서 자동 튜닝 권장 사항을 검색하기 위한 PowerShell 스크립트를 실행하는 데 사용합니다.
  • "Azure Automation - 작업 출력 가져오기" 실행된 PowerShell 스크립트에서 출력을 검색하는 데 사용합니다.
  • "Office 365 Outlook - 이메일 보내기" 이메일을 보내는 데 사용합니다. 전자 메일은 플로우를 만드는 개인의 업무 또는 학교 계정을 사용하여 전송됩니다.

Power Automate의 기능에 대해 자세히 알아보려면 Microsoft Power Automate 시작하기를 참조하세요.

이 단계의 필수 조건은 Microsoft Power Automate 계정에 등록 및 로그인입니다. 솔루션 내부로 들어가면 다음 단계에 따라 새 플로우를 설정합니다.

  1. "내 흐름" 메뉴 항목에 액세스합니다.
  2. 내 플로우 내에서 페이지 맨 위에 있는 "+빈 플로우 만들기" 링크를 선택합니다.
  3. 페이지 아래쪽에서 "수백 개의 커넥터 및 트리거 검색" 링크를 클릭합니다.
  4. 검색 필드에 "되풀이"를 입력하고 검색 결과에서 "일정 - 되풀이"를 선택하여 전자 메일 배달 작업을 실행하도록 예약합니다.
  5. 빈도 필드의 되풀이 창에서 각 분, 시간, 일, 주 등 자동화된 전자 메일을 보내는 등 이 Flow가 실행될 예약 빈도를 선택합니다.

다음 단계는 새로 만든 되풀이 흐름에 3개의 작업(전자 메일 만들기, 출력 가져오기 및 전자 메일 전송)을 추가하는 것입니다. 필요한 작업을 흐름에 추가하려면 다음 단계를 따릅니다.

  1. 조정 권장 사항을 검색하는 PowerShell 스크립트를 실행하는 작업을 만듭니다.

    • 되풀이 흐름 창에서 "+새 단계","작업 추가"를 차례로 선택합니다.
    • 검색 필드에 "Automation"을 입력하고 검색 결과에서 "Azure Automation - 작업 만들기"를 선택합니다.
    • 작업 만들기 창에서 작업 속성을 구성합니다. 이 구성에 대해 Automation 계정 창에서 이전에 기록한 Azure 구독 ID, 리소스 그룹 및 Automation 계정의 세부 정보가 필요합니다. 이 섹션에서 사용할 수 있는 옵션에 대한 자세한 내용은 Azure Automation - 작업 만들기를 참조하세요.
    • "플로우 저장"을 클릭하여 이 작업 만들기를 완료합니다.
  2. 실행된 PowerShell 스크립트에서 출력을 검색하는 작업 만들기

    • 되풀이 Flow 창에서 "+새 단계","작업 추가"를 차례로 선택합니다.
    • 검색 필드에 "Automation"을 입력하고 검색 결과에서 "Azure Automation - 작업 출력 가져오기"를 선택합니다. 이 섹션에서 사용할 수 있는 옵션에 대한 자세한 내용은 Azure Automation - 작업 출력 가져오기를 참조하세요.
    • 필수 필드를 채웁니다(이전 작업을 만들 때와 유사) - Azure 구독 ID, 리소스 그룹 및 Automation 계정을 채웁니다(Automation 계정 창에 입력한 것과 같음).
    • "동적 콘텐츠" 메뉴가 표시되도록 필드 "작업 ID" 내부를 클릭합니다. 이 메뉴 내에서 "작업 ID" 옵션을 선택합니다.
    • "플로우 저장"을 클릭하여 이 작업 만들기를 완료합니다.
  3. Office 365 통합을 사용하여 메일을 전송하기 위한 작업을 만듭니다.

    • 되풀이 흐름 창에서 "+새 단계","작업 추가"를 차례로 선택합니다.
    • 검색 필드에서 "이메일 전송"을 입력하고 검색 결과에서 "Office 365 Outlook - 이메일 전송"을 선택합니다.
    • "받는 사람" 필드에 알림 전자 메일을 보내야 하는 전자 메일 주소를 입력합니다.
    • "제목" 필드에 이메일의 제목(예: "자동 조정 권장 사항 이메일 알림")을 입력합니다.
    • "동적 콘텐츠" 메뉴가 표시되도록 필드 "본문" 내부를 클릭합니다. 이 메뉴의 "작업 출력 가져오기"에서 "콘텐츠"를 선택합니다.
    • "플로우 저장"을 클릭하여 이 작업 만들기를 완료합니다.

자동화된 전자 메일을 다른 받는 사람에게 보내려면 별도의 플로우를 만듭니다. 이러한 추가 Flow에서 "받는 사람" 필드의 받는 사람 전자 메일 주소와 "제목" 필드의 전자 메일 제목 줄을 변경합니다. 사용자 지정된 PowerShell 스크립트를 사용하여 Azure Automation에서 새 Runbook을 만들면(예: Azure 구독 ID 변경), 별도의 구독마다 별도의 받는 사람에게 자동 조정 권장 사항에 대한 이메일을 전송하는 것과 같이 자동화 시나리오를 추가로 사용자 지정할 수 있습니다.

위에서는 전자 메일 배달 작업 워크플로를 구성하는 데 필요한 단계를 마무리합니다. 빌드된 세 가지 작업으로 구성된 전체 Flow가 다음 이미지에 나와 있습니다.

자동 조정 이메일 알림 흐름 보기

Flow를 테스트하려면 Flow 창 안쪽의 오른쪽 위 모서리에서 "지금 실행"을 클릭합니다.

전송된 메일 알림 성공을 보여 주는 자동화된 작업 실행 통계는 Flow 분석 창에서 확인할 수 있습니다.

자동 조정 이메일 알림에 대한 실행 흐름

Flow 분석 창은 작업 실행의 성공 여부를 모니터링하는 데 도움이 되며, 문제 해결에 필요한 경우에도 유용합니다. 문제 해결의 경우 Azure Automation 앱을 통해 액세스할 수 있는 PowerShell 스크립트 실행 로그를 검사할 수도 있습니다.

자동화된 전자 메일의 최종 출력은 이 솔루션을 빌드하고 실행한 후 받은 다음 전자 메일과 유사합니다.

자동 조정 이메일 알림의 샘플 이메일 출력

PowerShell 스크립트를 조정하여 자동화된 전자 메일의 출력 및 서식을 사용자 필요에 맞게 조정할 수 있습니다.

사용자 지정 시나리오에 따라 특정 튜닝 이벤트에 따라 메일 알림 빌드하고 여러 구독 또는 데이터베이스의 경우 여러 받는 사람에게 솔루션을 추가로 사용자 지정할 수 있습니다.

다음 단계