Skip to main content
  1. Blog/

Identify SQL Server EOL & ESU Costs with azqr

Carlos Mendible
Author
Carlos Mendible

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-eol plugin (formerly sql-esu), 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:

  1. Do nothing — run unsupported, unpatched SQL Server (serious security risk)
  2. Purchase ESU — pay for up to 3 years of critical security patches at escalating cost
  3. 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-eol plugin automates this discovery and analysis.

Using the azqr sql-eol Command
#

The azqr sql-eol 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-eol Command
#

# Scan all subscriptions
azqr sql-eol

# Scan a specific subscription
azqr sql-eol -s <subscription-id>

Results appear in the “SQL EOL” sheet of the generated Excel report.

Analyzing the Results
#

The plugin produces a detailed table with 32 columns. Here are the most important ones:

ColumnDescription
SubscriptionAzure subscription name
Resource GroupResource group containing the SQL resource
NameSQL Server instance name
LocationAzure region or on-premises location
Arc Server NameName of the underlying Arc machine (Arc-enabled instances only)
Cloud TypeArc-enabled (On-Prem), Arc-enabled (AWS), Arc-enabled (GCP), Arc-enabled (<provider>), or Azure VM (SQL IaaS)
Service TypeSQL Server service type (e.g., Engine, SSIS, SSAS, SSRS)
SQL VersionDetected SQL Server version (e.g., SQL Server 2014)
EditionEnterprise, Standard, Web, Developer, Express, Free
EOL StatusSupported, Upcoming ESU, ESU Active, or Expired
ESU ApplicableWhether ESU applies to this instance
ESU EnabledWhether ESU is already subscribed/enabled on the host
ESU Start DateWhen the ESU window began
ESU End DateWhen ESU support ends (no more patches after this)
vCores / Billable CoresCore count and Microsoft-minimum billable cores (min 4)
SQL License TypePAYG (hourly), AHUB (bring-your-own SA license), or DR
ESU Monthly Cost/CorePer-core ESU rate used in calculations
SQL License Cost/Core/MonthSQL license list rate per core
SQL License Monthly CostTotal SQL license cost (PAYG only; AHUB = $0)
VM Cost/Core/MonthBlended VM compute rate per core
Est VM Compute Monthly CostEstimated VM compute spend ($0 for Arc/on-prem)
Est ESU Monthly CostEstimated ESU spend ($0 if Supported or Expired)
ESU Cost BasisHow ESU billing was determined (per-host or per-instance)
Patch Ops Monthly CostFixed monthly operational overhead for patching
Current Monthly CostSum of: VM compute + SQL license (PAYG) + ESU + patch ops
Consolidation RatioConservative 2:1 source-to-target ratio used in MI cost allocation
Migration Target TierRecommended SQL MI tier (General Purpose or General Purpose (Database assessment required. Server had an Enterprise license))
Migration RecommendationSuggested action for this instance
Est SQL MI Monthly CostProjected SQL MI cost after migration (compute + license; storage excluded by default)
Est SQL MI Monthly SavingMonthly savings vs. current cost (negative = cost increase)
SQL MI Migration VerdictCost Savings, Break Even, or Cost Increase (justified by PaaS/security benefits)

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. ESU Applicable and ESU Enabled

ESU Applicable tells you whether an instance is eligible for ESU billing. ESU Enabled shows whether ESU is already subscribed on the host. An instance that is applicable but not enabled may be running unpatched — a serious security risk.

3. Host-Level ESU Billing

Per Microsoft’s billing model, ESU is metered once per OSE (Operating System Environment), per SQL Server version, at the highest edition present. Multiple same-version instances or components (Engine, SSIS, SSAS, SSRS) on one host are covered by a single charge. The plugin reflects this model via the ESU Cost Basis column.

4. SQL MI Migration Verdict

The plugin provides a verdict for each instance:

  • Cost Savings — migrating to SQL MI saves money; act now
  • Break Even — migration cost roughly equals current spend
  • Cost Increase (justified by PaaS/security benefits) — SQL MI costs more, but PaaS, security, and operational benefits may still justify the move

Free editions (Developer, Express) are excluded from the ESU financial analysis — they do not incur ESU costs.

5. 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. Note that a negative value means SQL MI costs more — common for large AHUB instances not yet in ESU.

6. 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.

7. 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. The Cloud Type column also distinguishes multi-cloud Arc sources: Arc-enabled (AWS), Arc-enabled (GCP), and Arc-enabled (<provider>) for any other registered cloud provider.

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.

AssumptionValue / Rule
Pricing basisUSD public list prices — EA, CSP, or negotiated discounts are not applied
ESU cost modelESU 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 ratesStandard/Web: $139/core/month · Enterprise: $540.50/core/month · Developer/Express/Free: $0
Minimum billable cores4 cores per instance (Microsoft minimum); Standard edition capped at 24 cores
ESU billing unitOnce per OSE, per SQL Server version, at the highest edition on that host. All service types (Engine, SSIS, SSAS, SSRS, PBIRS) roll into a single per-host+version meter
VM compute costBlended PAYG by family: M-series $140, E-series $46, L-series $57, F-series $31, D/B-series $36 (per vCore/month). Windows multiplier ×1.8, West Europe ×1.13. Arc/on-prem = $0
SQL license (PAYG)Enterprise: $274 · Standard: $73 · Web: $6 (per vCore/month). AHUB instances carry no hourly charge — SA is a sunk cost
AHUB default for VMsIf the SQL VM license type is not explicitly set to PAYG, the plugin defaults to AHUB (most enterprise customers have SA)
Patch ops$160/month per instance (2 hrs × $80/hr operational overhead)
SQL MI target tierAll non-UVB cases → General Purpose (conservative estimate). Arc Enterprise AHUB (on-prem) → General Purpose via UVB. Enterprise editions without UVB → General Purpose with a note that a database assessment is required before committing to BC
SQL MI target ratesGP PAYG: $123/vCore/month · GP AHUB: $49/vCore/month
SQL MI storageNot included by default (_estimatedStorageGB = 0). Set _estimatedStorageGB in the KQL to your environment’s expected DB size to add storage to the MI cost estimate. GP rate: $0.115/GB/month (e.g. 512 GB → $58.88/month, 1,024 GB → $117.76/month). Free editions: $0
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 ratioConservative 2:1 (2 SQL Server instances per 1 SQL MI); actual savings may be higher given typical SQL Server utilization of only 10–30%
Savings formulaCurrent (VM compute + SQL license if PAYG + ESU + patch ops) − Est SQL MI cost

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: