SQL Database DTU throttling — high DTU utilization
Query timeout errors (timeout expired) from the application
Focused incident mode — strips away everything but this runbook.
Symptoms
- Query timeout errors (timeout expired) from the application
- Azure portal shows DTU percentage at or near 100 percent
- az sql db show returns throttling events in the resource health
Evidence to grab
Collect these artifacts before you change anything — they prove (or rule out) each cause.
Current DTU utilization
az monitor metrics list --resource <DB-RESOURCE-ID> --metric "dtu_used" --interval PT1M --query "value[0].timeseries[0].data[-5:]" -o jsonDatabase service objective
az sql db show --server <SERVER> --database <DB> --resource-group <RG> --query currentServiceObjective -o tsv
Diagnostic flow
Run the steps in order, marking each claim confirmed or refuted. The evidence you gather feeds the ranked causes below.
Guided decision tree is ready.
Steps with commands, expected output, and pass/fail branches.
Ranked root causes
Evidence checklist
- DTU percentage consistently above 90 percent
- No specific slow query identified, overall load is high
Confirm before fixing
az monitor metrics list --resource <DB-RESOURCE-ID> --metric "dtu_used" --interval PT1M --query "value[0].timeseries[0].data[-5:]" -o jsonCheck sustained DTU usage
Fix
az sql db update --server <SERVER> --database <DB> --resource-group <RG> --service-objective S3Scale up the DTU tier
Expected: Database '<DB>' created or updated.
Resolution runbook
Apply from top to bottom after the cause is confirmed. Review every command before running it — risk tags are shown on each.
az monitor metrics list --resource <DB-RESOURCE-ID> --metric "dtu_used" --interval PT5M --query "value[0].timeseries[0].data[-10:]" -o jsonConfirm DTU saturation
az sql db show --server <SERVER> --database <DB> --resource-group <RG> --query currentServiceObjective -o tsvCheck current tier
az sql db update --server <SERVER> --database <DB> --resource-group <RG> --service-objective S3Scale up the DTU tier
Prevention
- Monitor DTU percentage and alert at 80 percent sustained usage.
- Use query performance insights to identify and optimize expensive queries.
- Consider migrating to vCore-based tiers for predictable scaling.
- Implement connection pooling to reduce per-connection DTU overhead.
Related runbooks
Same stack, same failure family — worth a skim.
Commands marked READ CHANGE DESTRUCTIVE — never run DESTRUCTIVE commands against production data you cannot restore. Copy → verify → execute.