Azure waste

SQL Managed Instance without Azure Hybrid Benefit

A SQL Managed Instance paying the licence-included rate, which a customer holding SQL Server licences with Software Assurance can lower without downtime.
The agent tells you how to fix it
Reversible
Why it happens

A SQL Managed Instance bills a minimum of four vCores and commonly many more, and its price includes a SQL Server licence unless the customer applies one of their own. Microsoft states that Azure Hybrid Benefit saves up to 30 percent or more and that enabling it requires no downtime, which makes it the cheapest change available on an expensive resource. Eligibility depends on holding SQL Server licences with Software Assurance, which is a fact about the customer's agreements and is invisible from inside their subscription, so this reports the rate being paid and names the entitlement as unverified rather than claiming a saving. Instances billed through an instance pool are excluded, because their compute is purchased at the pool.

Paste this into Resource Graph Explorer in the Azure portal.

resources
| where type =~ 'microsoft.sql/managedinstances'
// Scope below matches CloudFinOpsPro policy DEFAULTS: exclusions.protectTag, environment.tagKeys,
// environment.allowedTagValues, and allowUntagged false so an untagged resource counts as production.
// If your policy.yaml differs, edit the three lines below or this will disagree with your own agent.
| where tolower(tostring(coalesce(tags['cfop:protect'], ''))) !in ('true', 'yes', '1')
| extend cfopEnv = tolower(trim(' ', tostring(coalesce(tags['Environment'], tags['environment'], tags['env'], ''))))
| where cfopEnv in ('dev', 'development', 'test', 'qa', 'sandbox', 'nonprod', 'non-prod', 'staging')
| where tostring(properties.licenseType) =~ 'LicenseIncluded'
| where isempty(tostring(properties.instancePoolId))
| project instance = name, resourceGroup, location,
          vCores = toint(properties.vCores),
          tier = tostring(sku.tier)

LicenseIncluded means you are paying Azure for the SQL Server licence. Instances in a pool are excluded because the pool carries the licence. Azure cannot see whether you hold Software Assurance, so confirm entitlement before switching.

Applies to microsoft.sql/managedinstances
What the agent does about it

A SQL Managed Instance paying the licence-included rate, which a customer holding SQL Server licences with Software Assurance can lower without downtime.

It will not fix this one

It finds it and tells you what to change. The change itself is yours to make, because it is not one the agent should make on your behalf.