Use o PowerShell para monitorar e dimensionar um pool elástico no Banco de Dados SQL do AzureUse PowerShell to monitor and scale an elastic pool in Azure SQL Database

Este exemplo de script do PowerShell monitora as métricas de desempenho de um pool elástico, dimensiona-o para um tamanho da computação maior e cria uma regra de alerta em uma das métricas de desempenho.This PowerShell script example monitors the performance metrics of an elastic pool, scales it to a higher compute size, and creates an alert rule on one of the performance metrics.

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.If you don't have an Azure subscription, create a free account before you begin.

Observação

Este artigo foi atualizado para usar o novo módulo Az do Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Você ainda pode usar o módulo AzureRM, que continuará a receber as correções de bugs até pelo menos dezembro de 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Para saber mais sobre o novo módulo Az e a compatibilidade com o AzureRM, confira Apresentação do novo módulo Az do Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Para obter instruções de instalação do módulo Az, confira Instalar o Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Abrir o Azure Cloud ShellOpen Azure Cloud Shell

O Azure Cloud Shell é um ambiente de shell interativo hospedado no Azure e usado no seu navegador.Azure Cloud Shell is an interactive shell environment hosted in Azure and used through your browse. O Azure Cloud Shell permite que você use os shells bash ou PowerShell para executar várias ferramentas para trabalhar com os serviços do Azure.Azure Cloud Shell allows you to use either bash or PowerShell shells to run a variety of tools to work with Azure services. O Azure Cloud Shell vem pré-instalado com os comandos para permitir que você execute o conteúdo deste artigo, sem precisar instalar nada em seu ambiente local.Azure Cloud Shell comes pre-installed with the commands to allow you to run the content of this article without having to install anything on your local environment.

Para executar qualquer código contido neste artigo no Azure Cloud Shell, abra uma sessão do Cloud Shell, use o botão Copiar em um bloco de códigos para copiar o código e colá-lo na sessão do Cloud Shell com Ctrl+Shift+V no Windows e no Linux ou Cmd+Shift+V no macOS.To run any code contained in this article on Azure Cloud Shell, open a Cloud Shell session, use the Copy button on a code block to copy the code, and paste it into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS. O texto colado não é executado automaticamente; portanto, pressione Enter para executar o código.Pasted text is not automatically executed, so press Enter to run code.

É possível iniciar o Azure Cloud Shell com:You can launch Azure Cloud Shell with:

Selecione Experimente no canto superior direito de um bloco de código.Select Try It in the upper-right corner of a code block. Isso não copia automaticamente o texto para o Cloud Shell.This doesn't automatically copy text to Cloud Shell. Exemplo de “Experimente” no Azure Cloud Shell
Abra shell.azure.com no seu navegador.Open shell.azure.com in your browser. Botão Iniciar o Azure Cloud ShellLaunch Azure Cloud Shell button
Selecione o botão Cloud Shell no menu no canto superior direito do Portal do Azure.Select the Cloud Shell button on the menu in the upper-right corner of the Azure portal. Botão Cloud Shell no portal do Azure

Se você optar por instalar e usar o PowerShell localmente, este tutorial exigirá o AZ PowerShell 1.4.0 ou posterior.If you choose to install and use the PowerShell locally, this tutorial requires AZ PowerShell 1.4.0 or later. Se você precisa atualizar, consulte Instalar o módulo do Azure PowerShell.If you need to upgrade, see Install Azure PowerShell module. Se você estiver executando o PowerShell localmente, também precisará executar o Connect-AzAccount para criar uma conexão com o Azure.If you are running PowerShell locally, you also need to run Connect-AzAccount to create a connection with Azure.

Script de exemploSample script

# Connect-AzAccount
$SubscriptionId = ''
# Set the resource group name and location for your server
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$location = "westus2"
# Set elastic pool names
$poolName = "MySamplePool"
# Set an admin login and password for your database
$adminSqlLogin = "SqlAdmin"
$password = "ChangeYourAdminPassword1"
# The logical server name has to be unique in the system
$serverName = "server-$(Get-Random)"
# The sample database names
$firstDatabaseName = "myFirstSampleDatabase"
$secondDatabaseName = "mySecondSampleDatabase"
# The ip address range that you want to allow to access your server
$startIp = "0.0.0.0"
$endIp = "0.0.0.0"

# Set subscription 
Set-AzContext -SubscriptionId $subscriptionId 

# Create a new resource group
$resourceGroup = New-AzResourceGroup -Name $resourceGroupName -Location $location

# Create a new server with a system wide unique server name
$server = New-AzSqlServer -ResourceGroupName $resourceGroupName `
    -ServerName $serverName `
    -Location $location `
    -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminSqlLogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))

# Create elastic database pool
$elasticPool = New-AzSqlElasticPool -ResourceGroupName $resourceGroupName `
    -ServerName $serverName `
    -ElasticPoolName $poolName `
    -Edition "Standard" `
    -Dtu 50 `
    -DatabaseDtuMin 10 `
    -DatabaseDtuMax 50

# Create a server firewall rule that allows access from the specified IP range
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
    -ServerName $serverName `
    -FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp

# Create two blank database in the pool
$firstDatabase = New-AzSqlDatabase  -ResourceGroupName $resourceGroupName `
    -ServerName $serverName `
    -DatabaseName $firstDatabaseName `
    -ElasticPoolName $poolName
$secondDatabase = New-AzSqlDatabase  -ResourceGroupName $resourceGroupName `
    -ServerName $serverName `
    -DatabaseName $secondDatabaseName `
    -ElasticPoolName $poolName

# Monitor the pool
$monitorparameters = @{
  ResourceId = "/subscriptions/$($(Get-AzContext).Subscription.Id)/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/elasticPools/$poolName"
  TimeGrain = [TimeSpan]::Parse("00:05:00")
  MetricNames = "dtu_consumption_percent"
}
(Get-AzMetric @monitorparameters -DetailedOutput).MetricValues

# Scale the pool
$elasticPool = Set-AzSqlElasticPool -ResourceGroupName $resourceGroupName `
    -ServerName $serverName `
    -ElasticPoolName $poolName `
    -Edition "Standard" `
    -Dtu 100 `
    -DatabaseDtuMin 20 `
    -DatabaseDtuMax 100

# Add an alert that fires when the pool utilization reaches 90%
Add-AzMetricAlertRule -ResourceGroup $resourceGroupName `
    -Name "mySampleAlertRule" `
    -Location $location `
    -TargetResourceId "/subscriptions/$($(Get-AzContext).Subscription.Id)/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/elasticPools/$poolName" `
    -MetricName "dtu_consumption_percent" `
    -Operator "GreaterThan" `
    -Threshold 90 `
    -WindowSize $([TimeSpan]::Parse("00:05:00")) `
    -TimeAggregationOperator "Average" `
    -Action $(New-AzAlertRuleEmail -SendToServiceOwner)

# Clean up deployment 
# Remove-AzResourceGroup -ResourceGroupName $resourceGroupName

Limpar a implantaçãoClean up deployment

Use o comando a seguir para remover o grupo de recursos e todos os recursos associados a ele.Use the following command to remove the resource group and all resources associated with it.

Remove-AzResourceGroup -ResourceGroupName $resourcegroupname

Explicação sobre o scriptScript explanation

Este script usa os seguintes comandos.This script uses the following commands. Cada comando da tabela é vinculado à documentação específica do comando.Each command in the table links to command specific documentation.

ComandoCommand ObservaçõesNotes
New-AzResourceGroupNew-AzResourceGroup Cria um grupo de recursos no qual todos os recursos são armazenados.Creates a resource group in which all resources are stored.
New-AzSqlServerNew-AzSqlServer Cria um servidor do Banco de Dados SQL que hospeda um banco de dados individual ou um pool elástico.Creates a SQL Database server that hosts a single database or elastic pool.
New-AzSqlElasticPoolNew-AzSqlElasticPool Cria um pool elástico.Creates an elastic pool.
New-AzSqlDatabaseNew-AzSqlDatabase Cria um banco de dados individual ou um banco de dados em um pool elástico.Creates a single database or database in an elastic pool.
Get-AzMetricGet-AzMetric Mostra as informações de uso do tamanho do banco de dados.Shows the size usage information for the database.
Add-AzMetricAlertRuleAdd-AzMetricAlertRule Adiciona ou atualiza uma regra de alerta com base em métricas.Adds or updates a metric-based alert rule.
Set-AzSqlElasticPoolSet-AzSqlElasticPool Atualiza as propriedades do pool elásticoUpdates elastic pool properties
Add-AzMetricAlertRuleAdd-AzMetricAlertRule Define uma regra de alerta para monitorar automaticamente DTUs no futuro.Sets an alert rule to automatically monitor DTUs in the future.
Remove-AzResourceGroupRemove-AzResourceGroup Exclui um grupo de recursos, incluindo todos os recursos aninhados.Deletes a resource group including all nested resources.

Próximas etapasNext steps

Para obter mais informações sobre o Azure PowerShell, confira Documentação do Azure PowerShell.For more information on the Azure PowerShell, see Azure PowerShell documentation.

Outros exemplos de script do PowerShell para Banco de Dados SQL podem ser encontrados nos scripts do PowerShell para Banco de Dados SQL do Azure.Additional SQL Database PowerShell script samples can be found in the Azure SQL Database PowerShell scripts.