Synapse Pricing Explained: DWUs, Serverless, and Spark
Azure Synapse has three separate cost meters — dedicated SQL pools, serverless SQL, and Spark pools — and each works completely differently. Understanding all three is essential before you build anything, because it is easy to design an architecture that looks cheap on a whiteboard but becomes expensive in practice. This page gives you real numbers, real examples, and concrete strategies to keep costs under control.
The three pricing models side by side
| Component | Pricing model | East US rate (approx.) | When you pay |
|---|---|---|---|
| Dedicated SQL pool compute | Hourly per DWU tier | $1.51/hr (DW100c) to $181.20/hr (DW30000c) | While pool is running (paused = $0) |
| Dedicated SQL pool storage | Per TB per month | $23.20/TB/month | Always, even while paused |
| Serverless SQL pool | Per TB data processed | $5.00/TB scanned | Per query (10 MB minimum) |
| Spark pool | Per vCore-hour | $0.1765/vCore-hr (East US) | While cluster is running (auto-pause = $0) |
| Synapse Pipelines | Per activity run + DIU-hour for data movement | $0.25/1000 pipeline activity runs; $0.25/DIU-hr | Per execution |
| Data integration (data flows) | Per vCore-hr for cluster + execution overhead | $0.274/vCore-hr | Per data flow execution |
All prices are approximate as of early 2026 in East US and vary by region. Always verify current rates on the Azure Synapse pricing page before budgeting.
Dedicated SQL pool pricing: DWU tiers
The dedicated SQL pool is measured in Data Warehouse Units (DWUs). A DWU is an abstraction — it represents a bundle of CPU, memory, and I/O resources allocated to your pool. More DWUs means more compute nodes, which means faster query execution and higher concurrency.
Synapse uses the Gen2 DWU scale (prefixed with “DW” and suffixed with “c”), ranging from DW100c to DW30000c. Gen2 can also be scaled in steps: DW100c, DW200c, DW300c, DW400c, DW500c, DW1000c, DW1500c, DW2000c, DW2500c, DW3000c, and up to DW30000c in 1000c increments.
| DWU tier | Compute nodes | Max concurrency (queries) | Hourly cost (East US) | Monthly cost (24/7) |
|---|---|---|---|---|
| DW100c | 1 | 4 | $1.51 | $1,087 |
| DW500c | 5 | 20 | $7.54 | $5,429 |
| DW1000c | 10 | 32 | $15.08 | $10,858 |
| DW3000c | 30 | 64 | $45.24 | $32,573 |
The key insight here is that you can and should pause the pool when it is not in use. Unlike the serverless pool, you pay for the dedicated pool by the hour whether or not any queries are running. Pausing a DW1000c pool for 16 hours per day reduces the monthly compute bill from $10,858 to $3,620 — a 67% saving with no architectural changes.
Automating pause and resume with Azure CLI
Do not rely on manually pausing pools. Automate it:
# Pause a dedicated SQL pool
az synapse sql pool pause \
--workspace-name ws-synapse-demo \
--name myDedicatedPool \
--resource-group rg-synapse-demo
# Resume a dedicated SQL pool
az synapse sql pool resume \
--workspace-name ws-synapse-demo \
--name myDedicatedPool \
--resource-group rg-synapse-demo
# Check pool state
az synapse sql pool show \
--workspace-name ws-synapse-demo \
--name myDedicatedPool \
--resource-group rg-synapse-demo \
--query "status" \
--output tsvIn production, put these commands inside an Azure Logic App or Azure Automation runbook triggered by a schedule or by the completion of your nightly load pipeline.
Serverless SQL pricing: pay per query
The serverless pool charges $5 per terabyte of data processed. “Processed” means data read from storage — not data returned to you. A query that reads 1 TB of Parquet files and returns 1,000 rows still costs $5 for the TB scanned.
This makes file format and query writing critically important for cost control. Here is a concrete example:
| Scenario | File format | Data scanned | Cost per query |
|---|---|---|---|
| SELECT * from 12-month dataset, 100 columns | CSV | ~500 GB (entire files) | $2.50 |
| SELECT 5 columns from same 12-month dataset | CSV | ~500 GB (all columns read) | $2.50 |
| SELECT 5 columns from same 12-month dataset | Parquet | ~25 GB (only 5/100 columns) | $0.13 |
| SELECT 5 columns, filter on partitioned month folder | Parquet (partitioned) | ~2 GB (1/12 months, 5 columns) | $0.01 |
Moving from unpartitioned CSV to partitioned Parquet reduces cost by 99.6% for filtered queries. This is not a minor optimisation — it is the difference between a $2,500/month serverless SQL bill and a $10/month bill for the same analytical workload.
Spark pool pricing: vCore-hours
Spark pools charge per vCore-hour. Each Spark pool has a driver node and executor nodes. The driver always runs for the duration of the session. Executors scale between your min and max node counts based on workload.
Node sizes in Synapse Spark:
| Node size | vCores | Memory | Cost per node-hour (East US) |
|---|---|---|---|
| Small | 4 vCores | 32 GB | $0.706 |
| Medium | 8 vCores | 64 GB | $1.412 |
| Large | 16 vCores | 128 GB | $2.824 |
| XLarge | 32 vCores | 256 GB | $5.648 |
A Medium pool with 1 driver + 5 executors running for 2 hours costs: 6 nodes × $1.412/node-hour × 2 hours = $16.94. With auto-pause set to 15 minutes, you pay for the actual job time plus up to 15 minutes of idle time. For a nightly job that runs for 1.5 hours, this comes to roughly $13/night or $390/month — far less than running a dedicated pool around the clock.
# Create a Spark pool with auto-pause enabled
az synapse spark pool create \
--workspace-name ws-synapse-demo \
--name SparkPoolDev \
--resource-group rg-synapse-demo \
--node-size Medium \
--min-node-count 3 \
--max-node-count 10 \
--enable-auto-scale true \
--delay 15 \
--enable-auto-pause true \
--spark-version 3.4
# --delay 15 means auto-pause after 15 minutes of inactivityArchitecture decisions that reduce cost
The biggest cost lever in Synapse is architectural: choosing the right engine for each workload instead of defaulting to a dedicated pool for everything.
Use the serverless pool for exploration and low-frequency reporting. If a report runs once a day and reads 50 GB of Parquet, the serverless pool costs $0.25/day. The same report on a DW100c pool that runs 24/7 costs $1.51/hour regardless of query frequency.
Use a dedicated pool only for high-concurrency, latency-sensitive BI. If 50 users are hitting Power BI dashboards that need sub-second response, and those dashboards query a 10 TB warehouse, a dedicated pool with result-set caching is worth the cost. For 5 users running a daily report, it is not.
Use Spark pools for ETL and ML — not for SQL. Spark is priced per vCore-hour and auto-pauses. Running a nightly Spark ETL job is much cheaper than using a dedicated SQL pool for transformation work, because you pay only for the hours the job runs.
Common mistakes
- Not pausing the dedicated pool during development. Development is exploratory — you run a query, think for 10 minutes, run another query. The dedicated pool charges for all 10 minutes of thinking time. Use the serverless pool during development; use the dedicated pool only for production workloads.
- Storing data in CSV format in ADLS and querying it with serverless SQL. CSV reads all bytes of all columns. Parquet reads only the bytes in the columns your query uses. Converting a CSV-heavy data lake to Parquet can reduce serverless SQL costs by 10x or more.
- Running Spark pool notebooks interactively without auto-pause. An open Synapse Studio notebook session keeps a Spark cluster alive until it times out or is manually stopped. A 5-node Medium pool left running overnight costs 8 hours × 6 nodes × $1.412 = $67.78 for doing nothing.
- Sizing the dedicated pool for peak load and leaving it there permanently. Use the elastic scaling API to scale up before heavy ETL loads and back down for regular query traffic. A pool that is 10x oversized for most of the day is 10x more expensive than it needs to be.
Summary
- Dedicated SQL pools charge hourly per DWU tier while running; pausing stops compute charges but storage continues.
- Serverless SQL charges $5 per TB scanned — using partitioned Parquet instead of flat CSV can reduce costs by 99%.
- Spark pools charge per vCore-hour; always enable auto-pause to avoid paying for idle clusters.
- The single biggest cost optimisation is architectural: use the serverless pool for exploration and infrequent reports instead of running a dedicated pool 24/7.
- Automate pool pausing with Azure CLI and Logic Apps so human forgetfulness cannot inflate your bill.
Frequently asked questions
How much does a Synapse dedicated SQL pool cost per month?
A DW100c pool running 24/7 in East US costs approximately $1.51/hour or about $1,087/month. However, you can pause the pool when not in use. If you run it only 8 hours per day on weekdays (roughly 174 hours/month), the cost drops to around $263/month. You still pay for storage separately.
Is the serverless SQL pool free?
There is no fixed charge for the serverless SQL pool — you pay only for the data it scans, at roughly $5 per terabyte in most regions. There is a minimum charge of 10 MB per query. Querying a well-partitioned Parquet table that reads 2 GB costs about $0.01.
Can I set a spending limit on Synapse?
Synapse does not have built-in hard spending caps. You can set a data processed limit on the serverless SQL pool (a soft stop that blocks new queries once the monthly threshold is reached). For dedicated pools and Spark pools, use Azure Cost Management budgets with alerts, and automate pool pausing via Logic Apps or Azure Automation.