License and Edition Footprint
Overview
Before a license true-up or a migration, the questions are how many cores do we license here, does anything need Enterprise edition, and what would Standard save? The answers are spread over the processor facts, a database scoped DMV in every database, the availability group settings and the Agent jobs.
The License and Edition Footprint report reads them in one pass and shows:
- a verdict on moving this instance to Standard edition, with the reasons,
- the facts a license is counted from: edition, version, licensable cores, sockets, hyperthreading, physical or virtual host, and memory,
- the cost at Enterprise and Standard prices you enter, the difference, and what the instance costs today,
- a grid of every Enterprise feature in use and every Standard capacity limit the instance would run into, with whether it blocks the move and what to do about it.
The Estate view does the same for every instance connected in the server tree, one row each, with totals.
This is a planning estimate, not a quote. Software Assurance, host based licensing, license mobility and negotiated prices can all change the answer, and the page says so.
Where to find it
| Route | How |
|---|---|
| Server tree | Right-click the server → Instance Level Reports → License and Edition Footprint |
| Instance reports navigator | Configuration group |
| Related Links bar | From Host and Hardware and Migration Planner |
| Consolidation Planner | The License and Edition Footprint button opens it for the instance selected in the tree |
| Report arrows | Previous is Latches and Spinlocks, next is Linked Servers |
The toolbar
| Control | What it does |
|---|---|
| Instance / Estate | This instance, or every instance connected in the server tree |
| Target (Instance view) | The version of Standard edition to assess against. See below |
| Server type picker (Estate view) | All server types, or only the instances with one server type (the Production, Test or DR label the server tree carries); instances without one are (no type) |
| Enterprise per 2 cores | Your price for an Enterprise two core pack. Default $15,123 |
| Standard per 2 cores | Your price for a Standard two core pack. Default $3,945 |
| Refresh | Reads the instance again, or on the Estate view, every connected instance |
| Cancel | Stops an Estate read in progress (shown while it runs) |
The default prices are Microsoft’s published list prices per two core pack for SQL Server 2022. Type your own and press Enter or leave the box: the page recalculates without querying again, and the prices are saved in Database Health Monitor’s settings for next time. “$15,123”, “15123” and “15123.00” are all accepted; anything that is not a number at or above zero keeps the previous price.
Target lists Standard at this instance’s own build first (Standard 2016 (this build), for example), then Standard 2016 SP1 or later when the instance is SQL Server 2016 before Service Pack 1, then every later version up to Standard 2025. A database cannot be restored to an older version, so older ones are never offered. Picking a target recalculates the verdict and the grid.
The verdict
The banner at the top gives one of these, colored by how easy the move is:
| Verdict | Color | When |
|---|---|---|
| Downgrade to <target> is possible. | Green | Nothing in use blocks it |
| Downgrade to <target> is possible after removing N items. | Amber | Only features that can be taken out block it |
| Downgrade to <target> is not possible without losing capacity or redesigning. | Red | A Standard capacity limit is exceeded, or a structural feature is in use |
| Already <edition> edition. | Blue | Standard or Web edition. The reasons say how many items would not work on the target |
| Express edition is free; there is nothing to downgrade. | Blue | Express |
| Azure SQL is licensed through the service; there is no edition to downgrade. | Blue | Azure SQL Database, Managed Instance and other Azure engine editions |
The reasons under it name each capacity limit and structural feature, how many further items would also have to be removed, and how many databases or checks could not be read. A database that could not be read never makes the verdict worse on its own, but the verdict says it does not cover it.
The structural features, the ones that make the verdict red, are an availability group with more than two replicas, a readable secondary replica, and a distributed availability group.
The tiles
| Tile | What it shows |
|---|---|
| Edition | Enterprise, Standard, Developer, Evaluation, Express, Web, Azure SQL or Other, with the full edition name |
| Version | SQL Server version, service pack and cumulative update, with the build number |
| Licensable cores | The cores a license must cover, and how many two core packs that is (“estimated” when the core count had to be estimated) |
| Sockets | Sockets, with the physical or virtual core count (or the logical processors when cores are not reported) |
| Hyperthreading | Yes, No, Unknown, or n/a (virtual), with the logical processor count |
| Host | Physical or Virtual, with the virtual machine type, or “Failover cluster instance” |
| Memory | Physical memory in GB, with the max server memory setting (“not set”, “above physical”, or its value) |
| Enterprise at your price | Licensable cores at the Enterprise price |
| Standard at your price | Licensable cores at the Standard price |
| Difference | Enterprise minus Standard |
| This instance today | The cost of the edition it runs now |
The line under the tiles gives the rule that counted the cores.
How cores are counted:
- Virtual machine: every virtual core is licensed, with a minimum of 4.
- Physical host: every physical core is licensed, with a minimum of 4 per processor.
- Physical host, estimated: before SQL Server 2016 SP2 and 2017, SQL Server does not report physical cores, so logical processors are counted (with the 4 per processor minimum). That overcounts when hyperthreading is on, and the page says so.
Two core packs are the licensable cores divided by two, rounded up.
This instance today is the Enterprise cost for Enterprise edition and the Standard cost for Standard. It is zero for Developer and Evaluation (no production license), Express (free), Web (licensed through a hosting provider), Azure (billed by the service) and an unknown edition. SQL Server 2025’s Enterprise Developer and Standard Developer editions count as Developer.
The grid
| Column | What it shows |
|---|---|
| Database | The database, or (instance) for an instance setting |
| Feature | The Enterprise feature or capacity limit |
| Source | Persisted SKU feature, Instance setting, Agent job step text, Capacity or Not readable |
| Standard Allowed Since | “Allowed in Standard since …”, “Not available in Standard”, or the target’s limit for a capacity row |
| Blocks Downgrade | Yes in red, Unknown in amber, No in green |
| Detail | What was found |
| What To Do | How to take it out |
Rows that block come first, then the ones that could not be read, then the ones that are fine. Hover a row for all of it in one tooltip.
The features it knows:
| Feature | Allowed in Standard since |
|---|---|
| Data compression, table and index partitioning, change data capture, columnstore indexes, In-Memory OLTP, multiple FILESTREAM containers, database snapshots | 2016 SP1 |
| Transparent data encryption | 2019 |
| Resource Governor (when enabled) | 2025 |
| Availability group (Basic in Standard) | 2016 |
| Availability group with more than two replicas, readable secondary replica, distributed availability group | Not available in Standard (structural) |
| Availability group with more than one database | Not available in Standard (split it into one Basic availability group per database) |
| Online index operation in an Agent job | Not available in Standard (the job step fails on Standard) |
A feature name sys.dm_db_persisted_sku_features reports that the report does not know is treated as not allowed in Standard, so an unknown Enterprise feature is never called safe.
The capacity limits of Standard edition at the target version:
| Limit | 2012 | 2014 | 2016 to 2022 | 2025 |
|---|---|---|---|---|
| Cores | 16 | 16 | 24 | 32 |
| Sockets | 4 | 4 | 4 | 4 |
| Buffer pool | 64 GB | 128 GB | 128 GB | 256 GB |
The memory check uses the smaller of physical memory and max server memory.
The Estate view
Estate lists every instance connected in the server tree (instances that are not connected are listed as Not connected) and reads them one at a time in the background, with a 10 second connect timeout for each. The toolbar shows “Checking N of M…” while it runs, and Cancel stops it; instances not reached are marked Not checked (cancelled).
Each instance is assessed against Standard at its own current version. The columns are Server, Server Type, Edition, Version, Licensable Cores, Blockers, Not Readable, Verdict (Possible, After removing items, Not possible, Already Standard or Not applicable), Cost Today, Standard Cost and Status. A bold Total row adds up the instances that were checked.
The banner counts the instances checked, how many Enterprise class instances could move to Standard, could after removing features, or could not, how many could not be reached, and how many databases or checks could not be read. The tiles show Instances checked, Licensable cores, Downgrade blockers, Estate today, All Enterprise and All Standard.
Copying
Right-click the grid for:
- Copy downgrade blockers as text (Instance view): the target, the verdict, the reasons and every row that blocks or could not be read, with its detail and remedy.
- Copy the estate summary as text (Estate view): the totals and one line per instance.
- Copy Chart to Clipboard and Save Chart as PNG…, for the verdict band and tiles as a picture. Right-clicking the band itself offers the same.
The grid exports to CSV and Excel like every other grid.
Permissions and versions
- The report needs SQL Server 2012 or later; on an older instance it says so.
- It needs VIEW SERVER STATE to read
sys.dm_os_sys_info. Without it the page says the license facts could not be read. sys.dm_db_persisted_sku_featuresis read inside each database. A database that is not ONLINE, or that the login cannot open, is a Database could not be checked row rather than being skipped.- Resource Governor, availability groups (
sys.availability_groups,sys.availability_replicas,sys.availability_databases_cluster) and Agent job steps (msdb.dbo.sysjobsteps) are each read on their own; one that fails is a Check could not be run row with the error. - The job step search looks for
ONLINE=ONin T-SQL steps, ignoring spaces, tabs and line breaks. - Sockets and cores per socket are read when the instance reports them (SQL Server 2016 SP2 and later); before that the socket count comes from
cpu_countandhyperthread_ratio. - The read can take up to 180 seconds, since it opens every database on the instance.