Azure waste

Dedicated SQL pool online with nothing querying it

A dedicated SQL pool whose status is Online, so its compute is billing, but which ran no queries at all over the window.
The agent reports this
Reversible
Saving holds until someone undoes it
Why it happens

A dedicated SQL pool bills compute for every hour it is Online, whether or not a query is ever run, and it does not pause itself the way a serverless database does. A DW1000c pool is about $15 an hour, roughly $11,000 a month, for a warehouse that may have been left running after a migration finished or a nightly load moved elsewhere. Microsoft documents pause as the remedy and states that compute is not charged while paused, that storage continues to be charged, and that the data stays intact, so the compute line is fully recoverable and reversible. The rule fires only on zero queries over the whole window, never on low usage, because query counts are summed and zero is the one thing a sum can prove. It only ever considers a pool reporting status Online: a paused pool has released its compute nodes and stops emitting metrics, so reading absent data as idleness would report every already-paused pool as waste. Pausing is not consequence-free, and the finding says so: all running and queued operations are cancelled, anything connected such as a scheduled pipeline or a Power BI DirectQuery report will fail until it is resumed, and automatic restore points are not taken while paused.

Paste this into Resource Graph Explorer in the Azure portal.

resources
| where type =~ 'microsoft.synapse/workspaces/sqlpools'
// 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.status) =~ 'Online'
| project pool = name, resourceGroup, location,
          dwu = tostring(sku.name)

Only an Online pool bills compute; a paused one does not, though its storage still does. Resource Graph cannot show query activity, so check the ActiveQueries and QueuedQueries metrics before pausing. The standalone form is a microsoft.sql/servers/databases row with sku.name DataWarehouse and is a different resource type.

Applies to microsoft.synapse/workspaces/sqlpools
What the agent does about it

A dedicated SQL pool whose status is Online, so its compute is billing, but which ran no queries at all over the window.

It will not fix this one

It reports this and takes no action. A check only earns the right to change something once the action behind it can re-read live state before it fires and knows the way back.