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.
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/sqlpoolsWhat 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.
Related checks
Data Explorer cluster running idle that will never stop itself
A running Azure Data Explorer cluster with no queries and no ingestion in the window, which auto-stop will never reach because it is switched off or the cluster sits in a virtual network.
Machine Learning compute instance with no automatic stop
A running Azure Machine Learning compute instance with neither an idle shutdown time nor an enabled stop schedule, so it bills the full VM rate until somebody stops it by hand.
Analysis Services server running with no queries and no processing
A running Azure Analysis Services server with no user sessions, no query threads and no model processing in the window, billing its hourly rate for every replica.