Running SQL Server past its end-of-life date exposes your organization to unpatched security vulnerabilities and growing Extended Security Update (ESU) costs. Understanding exactly which instances are affected — and what it could cost you — is the first step toward a sound modernization strategy.
This post introduces the Azure Quick Review sql-esu plugin, which scans both Arc-enabled SQL Servers and Azure SQL VMs, estimates your possible ESU spend, and recommends migration paths to Azure SQL Managed Instance (SQL MI).
Knowing what you could be paying for ESU — and what you’d save by migrating — turns an abstract compliance concern into a concrete financial decision.
Prerequisites#
Before you begin, ensure you have:
- An Azure subscription with SQL Server resources (Arc-enabled or SQL IaaS VMs)
- Azure CLI installed and authenticated
- Latest version of azqr installed
- Reader permissions on the target subscription(s)
The SQL Server EOL Problem#
Microsoft’s mainstream and extended support lifecycle for SQL Server versions eventually ends. After end of support, you have three options:
- Do nothing — run unsupported, unpatched SQL Server (serious security risk)
- Purchase ESU — pay for up to 3 years of critical security patches at escalating cost
- Migrate — move to a modern, fully managed service like Azure SQL Managed Instance
So how do you know which SQL Server instances are approaching end-of-life, and what the ESU costs will be? The azqr sql-esu plugin automates this discovery and analysis.
Using the azqr sql-esu Command#
The azqr sql-esu command scans your subscriptions using Azure Resource Graph, covering:
- Arc-enabled SQL Servers (
microsoft.azurearcdata/sqlserverinstances) — on-premises or multi-cloud SQL managed by Azure Arc - Azure SQL VMs (
microsoft.sqlvirtualmachine/sqlvirtualmachines) — SQL Server running on Azure IaaS VMs
Install the Latest azqr#
bash -c "$(curl -fsSL https://raw.githubusercontent.com/azure/azqr/main/scripts/install.sh)"Run the sql-esu Command#
# Scan all subscriptions
azqr sql-esu
# Scan a specific subscription
azqr sql-esu -s <subscription-id>Results appear in the “SQL ESU” sheet of the generated Excel report.
Analyzing the Results#
The plugin produces a detailed table with 27 columns. Here are the most important ones:
| Column | Description |
|---|---|
| Subscription | Azure subscription name |
| Resource Group | Resource group containing the SQL resource |
| Name | SQL Server instance name |
| Location | Azure region or on-premises location |
| Cloud Type | Arc-enabled (On-Prem) or Azure VM (SQL IaaS) |
| SQL Version | Detected SQL Server version (e.g., SQL Server 2014) |
| Edition | Enterprise, Standard, Web, Developer, Express, Free |
| EOL Status | Supported, Upcoming ESU, ESU Active, or Expired |
| ESU Start Date | When the ESU window began |
| ESU End Date | When ESU support ends (no more patches after this) |
| vCores / Billable Cores | Core count used for cost calculations |
| SQL License Type | PAYG (hourly) or AHUB (bring-your-own SA license) |
| Est ESU Monthly Cost | Estimated ESU spend per month |
| Current Monthly Cost | Sum of applicable components: VM compute (Azure VMs only) + SQL license + ESU (only when in an active ESU window) + patch ops |
| Migration Target Tier | Recommended SQL MI tier (General Purpose or Business Critical) |
| Migration Recommendation | Suggested action for this instance |
| Est SQL MI Monthly Cost | Projected SQL MI cost after migration |
| Est SQL MI Monthly Saving | Monthly savings vs. current cost |
| SQL MI Migration Verdict | Recommended, Optional, or Not Applicable |
Key Areas to Focus On#
1. Instances with EOL Status = ESU Active or Expired
These are your highest-priority instances. ESU Active means you’re in the paid ESU window — every month of delay adds to your ESU spend. Expired means you’re beyond all support, with no security patches at all.
2. SQL MI Migration Verdict
The plugin provides a verdict for each instance:
- Recommended — migrating to SQL MI saves money and reduces risk; act now
- Optional — migration makes sense but isn’t urgent
- Not Applicable — free editions (
Developer,Express) do not incur ESU costs and are excluded from the ESU financial analysis
3. Est SQL MI Monthly Saving
Sort by this column descending to identify the highest-value migration targets. Instances with large savings should be at the top of your migration backlog.
4. Consolidation Ratio
The plugin applies a conservative 2:1 consolidation ratio — two SQL Server instances per one SQL MI — reflecting typical SQL Server utilization of only 10–30%. Your actual savings may be even higher.
5. Cloud Type
Arc-enabled (on-premises) Enterprise instances with Software Assurance may qualify for the Unlimited Virtualization Benefit (UVB), where 1 on-premises core with SA covers up to 4 SQL MI General Purpose vCores. The plugin accounts for this automatically.
Assumptions#
The plugin’s cost estimates are based on a set of explicit assumptions. Understanding them helps you interpret the numbers correctly — treat them as indicative, not exact.
| Assumption | Value / Rule |
|---|---|
| Pricing basis | USD public list prices — EA, CSP, or negotiated discounts are not applied |
| ESU cost model | ESU annual price follows a Year 1 = 75%, Year 2 = 100%, Year 3 = 125% schedule of the annual license cost; the plugin uses the blended 3-year average (~100%) so estimates are stable regardless of which ESU year you are in |
| ESU rates | Standard/Web: $139/core/month · Enterprise: $540.50/core/month · Developer/Express/Free: $0 |
| VM compute cost | Estimated per-core monthly rate derived from the VM SKU size |
| SQL license (PAYG) | Hourly license cost included; AHUB instances are treated as $0 SQL license cost |
| AHUB default for VMs | If the SQL VM license type is not explicitly set to PAYG, the plugin defaults to AHUB (most enterprise customers have SA) |
| SQL MI target rates | GP PAYG: $123/vCore/month · GP AHUB: $49/vCore/month · BC PAYG: $367/vCore/month · BC AHUB: $147/vCore/month |
| Migration target tier | All cases are mapped to General Purpose for a conservative estimate |
| UVB (Arc Enterprise + AHUB only) | 1 on-premises core with SA → up to 4 SQL MI GP vCores; sized at max(4, vCores ÷ 4). Azure VMs are excluded — UVB is on-premises only |
| Consolidation ratio | Conservative 2:1 (2 SQL Server instances per 1 SQL MI); actual savings may be higher given typical SQL Server utilization of only 10–30% |
| Patch ops cost | A fixed monthly estimate for operational overhead of patching out-of-support servers |
| vCore count for Azure VMs | Derived from the VM SKU; well-known legacy SKUs use a hardcoded lookup table, modern SKUs use regex extraction |
Actual Microsoft ESU pricing depends on your agreement type, SQL Server version, and whether you pay annually or monthly. Always verify current rates with Microsoft or your licensing partner before making budget decisions.
Hope it helps!
References:
