Авто SQL SQL Azure на основе оповещения потребления DTU - PullRequest
0 голосов
/ 27 декабря 2018

Я должен масштабировать свой SQL Azure, если использование DTU в любой момент велико, и уменьшать, если потребление низкое в течение определенной продолжительности.

Я знаю, что это можно сделать, установив правило оповещения и веб-ловушку, ноищу что-то новое, что я могу сослаться и использовать ....

1 Ответ

0 голосов
/ 27 декабря 2018

Для увеличения и уменьшения требуется время, а иногда и больше, чем ожидалось.Обычно это занимает 5-10 минут, но иногда это занимает 25-30 минут.Чем занятее база данных во время масштабирования, тем больше времени требуется для увеличения или уменьшения масштаба.Размер базы данных также имеет значение.

Помните также, что транзакции откатываются, когда выполняется шкала.

Я предлагаю использовать следующий запрос для определения закономерностей потребления ресурсов, а затемавтоматизируйте масштабирование базы данных вверх и вниз.

SELECT *
FROM sys.dm_db_resource_stats
ORDER BY end_time

Табулируйте эти данные по часам и дням недели, чтобы упростить идентификацию шаблона.После этого используйте Azure Automation и части следующего PowerShell, чтобы автоматизировать масштабирование базы данных.Следующий PowerShell делает все, что вы хотите, он отслеживает использование DTU, а затем на основе потребления запускает процесс масштабирования.

# Login-AzureRmAccount
# Set the resource group name and location for your server
$resourcegroupname = "myResourceGroup-$(Get-Random)"
$location = "southcentralus"
# Set an admin login and password for your server
$adminlogin = "ServerAdmin"
$password = "ChangeYourAdminPassword1"
# The logical server name has to be unique in the system
$servername = "server-$(Get-Random)"
# The sample database name
$databasename = "mySampleDatabase"
# The ip address range that you want to allow to access your server
$startip = "0.0.0.0"
$endip = "0.0.0.0"

# Create a new resource group
$resourcegroup = New-AzureRmResourceGroup -Name $resourcegroupname -Location $location

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

# Create a server firewall rule that allows access from the specified IP range
$serverfirewallrule = New-AzureRmSqlServerFirewallRule -ResourceGroupName $resourcegroupname `
    -ServerName $servername `
    -FirewallRuleName "AllowedIPs" -StartIpAddress $startip -EndIpAddress $endip

# Create a blank database with S0 performance level
$database = New-AzureRmSqlDatabase  -ResourceGroupName $resourcegroupname `
    -ServerName $servername `
    -DatabaseName $databasename -RequestedServiceObjectiveName "S0"

# Monitor the DTU consumption on the imported database in 5 minute intervals
$MonitorParameters = @{
  ResourceId = "/subscriptions/$($(Get-AzureRMContext).Subscription.Id)/resourceGroups/$resourcegroupname/providers/Microsoft.Sql/servers/$servername/databases/$databasename"
  TimeGrain = [TimeSpan]::Parse("00:05:00")
  MetricNames = "dtu_consumption_percent"

}
(Get-AzureRmMetric @MonitorParameters -DetailedOutput).MetricValues

# Scale the database performance to Standard S1
$database = Set-AzureRmSqlDatabase -ResourceGroupName $resourcegroupname `
    -ServerName $servername `
    -DatabaseName $databasename `
    -Edition "Standard" `
    -RequestedServiceObjectiveName "S1"

# Set an alert rule to automatically monitor DTU in the future
Add-AzureRMMetricAlertRule -ResourceGroup $resourcegroupname `
    -Name "MySampleAlertRule" `
    -Location $location `
    -TargetResourceId "/subscriptions/$($(Get-AzureRMContext).Subscription.Id)/resourceGroups/$resourcegroupname/providers/Microsoft.Sql/servers/$servername/databases/$databasename" `
    -MetricName "dtu_consumption_percent" `
    -Operator "GreaterThan" `
    -Threshold 90 `
    -WindowSize $([TimeSpan]::Parse("00:05:00")) `
    -TimeAggregationOperator "Average" `
    -Actions $(New-AzureRmAlertRuleEmail -SendToServiceOwners)

# Clean up deployment 
# Remove-AzureRmResourceGroup -ResourceGroupName $resourcegroupname
...