Azure SQL Database Documentation

Configure Monitoring for Azure SQL Database

This guide explains how to monitor Azure SQL Database using built‑in tools, Azure Monitor, and custom scripts. Monitoring helps you track performance, detect anomalies, and ensure SLA compliance.

Prerequisites

  • Azure subscription with appropriate permissions (Reader or Contributor on the SQL resource).
  • SQL Database or Managed Instance you wish to monitor.
  • Azure CLI 2.0+ or PowerShell Az module installed (optional for scripting).

Monitoring Options

Azure Portal (Built‑in monitoring)

Navigate to SQL Database → Monitoring → Overview to see:

  • DTU / vCore usage
  • CPU, memory, storage consumption
  • Recent query performance (Query Performance Insight)
  • Failover and connectivity metrics

Use the Metrics Explorer to create custom charts and dashboards.

Azure Monitor (Metrics & Logs)

Enable diagnostic settings to route logs to Log Analytics, Event Hub, or Storage.

# Sample Azure CLI to enable diagnostics
az monitor diagnostic-settings create \
  --name "sqlDiag" \
  --resource /subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.Sql/servers/{server}/databases/{db} \
  --workspace /subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.OperationalInsights/workspaces/{law} \
  --logs '[{"category":"SQLSecurityAuditEvents","enabled":true}]' \
  --metrics '[{"category":"AllMetrics","enabled":true}]'

After enabling, query logs using Kusto Query Language (KQL) in Log Analytics.

// Example KQL query: average CPU percent per database
Perf
| where ObjectName == "SQLServer:Resource Stats"
| where CounterName == "CPU percent"
| summarize avg(CounterValue) by InstanceName, bin(TimeGenerated, 5m)
| order by avg_CounterValue desc
PowerShell Monitoring Script
# Requires Az.Sql module
Import-Module Az.Sql

$resourceGroup = "myResourceGroup"
$serverName    = "mySqlServer"
$dbName        = "myDatabase"

$metrics = Get-AzMetric -ResourceId (Get-AzSqlDatabase -ResourceGroupName $resourceGroup -ServerName $serverName -DatabaseName $dbName).Id `
    -MetricName "cpu_percent","dtu_consumption_percent" -TimeGrain 00:05:00 -StartTime (Get-Date).AddHours(-1) -EndTime (Get-Date)

$metrics | Format-Table Timestamp, MetricName, Average

Schedule this script with Azure Automation or a local task scheduler for regular monitoring.

Best Practices

  • Set up alert rules for critical metrics (e.g., CPU > 90% for 5 minutes).
  • Retain logs for at least 30 days to troubleshoot performance regressions.
  • Use dashboards to visualize key KPIs across multiple databases.

Related Topics