Synapse Cost Optimisation Strategies
Azure Synapse Analytics has multiple compute engines — Dedicated SQL pools, Serverless SQL pools, Apache Spark pools, and Data Integration pipelines — each with different pricing models and optimisation strategies. Understanding which engine to use and how to operate it efficiently can reduce Synapse costs by 40–80%.
Synapse Cost Components
A Synapse workspace can generate costs from multiple sources simultaneously:
| Component | Pricing Model | Typical Monthly Cost | Key Optimisation |
|---|---|---|---|
| Dedicated SQL Pool (DW100c) | $1.20/hr when running | $876 (24/7) or ~$120 (14 hrs/day weekdays) | Pause/resume, scale DWUs |
| Serverless SQL Pool | $5/TB data scanned | Varies — $0 to $200+ | Query only needed columns, use Parquet |
| Apache Spark Pool (Small) | $0.00025/vCore-hour | Varies with usage | Auto-pause, right-size, spot nodes |
| Data Integration (pipeline runs) | $1.00/1,000 activity runs | Usually $1–20 | Reduce pipeline frequency, batch activities |
| Storage (ADLS Gen2) | ~$0.023/GB/month | Depends on data volume | Lifecycle management, compression |
Optimising Dedicated SQL Pools
Dedicated SQL pools are the most expensive Synapse component. A DW1000c pool (the middle of the scale) costs approximately $12/hour or $8,760/month if left running 24/7. Optimisation here has the biggest financial impact.
Pause and resume automation
Pausing a dedicated pool stops compute billing entirely. If your analytical workloads run during business hours only, pausing outside those hours cuts costs by 60–70%.
# Pause a dedicated SQL pool (stops compute billing, retains data)
az synapse sql pool pause \
--name my-dedicated-pool \
--workspace-name my-synapse-workspace \
--resource-group my-rg
# Resume the pool
az synapse sql pool resume \
--name my-dedicated-pool \
--workspace-name my-synapse-workspace \
--resource-group my-rg
# Check current pool status
az synapse sql pool show \
--name my-dedicated-pool \
--workspace-name my-synapse-workspace \
--resource-group my-rg \
--query "status" \
--output tsvSchedule-based auto-pause with Azure Automation
Use an Azure Automation runbook triggered by a schedule to pause pools outside business hours:
# Example runbook logic (PowerShell):
# Pause at 7pm weekdays, resume at 7am weekdays
# Weekend: pause Friday 7pm, resume Monday 7am
# Estimated saving: DW500c ($6/hr) paused 12hrs/day + 48hrs weekend
# Running hours: (12hrs * 5 days) + 0 weekend = 60hrs/week vs 168hrs
# Saving: (168-60)/168 = 64% cost reduction
# $6 * 60 hrs/week * 4.3 weeks = $1,548/month vs $4,354/month PAYGScale DWUs to match workload requirements
The DWU count scales cost linearly and performance roughly linearly. Running at DW1000c when only DW300c is needed doubles the cost for no benefit. Scale up before major batch jobs and scale down for lighter ad-hoc query workloads.
# Scale pool to a different DWU count
az synapse sql pool update \
--name my-dedicated-pool \
--workspace-name my-synapse-workspace \
--resource-group my-rg \
--performance-level DW300c
# Check available performance levels for scaling
# DW100c, DW200c, DW300c, DW400c, DW500c, DW1000c, DW1500c, DW2000c, DW2500c, DW3000c, DW5000c, DW6000c, DW7500c, DW10000c, DW15000c, DW30000cOptimising Serverless SQL Pool
Serverless SQL pool charges $5 per TB of data scanned. The amount of data scanned is controlled by your query design and file format. Poorly written queries can scan far more data than necessary.
Use Parquet instead of CSV
Parquet is a columnar format that allows Serverless SQL to skip columns not referenced in the query. A CSV file requires scanning every byte even if only one column is needed. For a 1 TB dataset:
- CSV query selecting 3 of 30 columns: scans ~1 TB = $5.00
- Parquet query selecting 3 of 30 columns: scans ~3/30 of data = ~100 GB = $0.50
Use partition pruning
Store data in partitioned folder structures (e.g., /year=2026/month=03/day=19/) and include partition columns in WHERE clauses. Serverless SQL uses partition pruning to skip entire folders that do not match the filter.
-- EXPENSIVE: scans entire dataset across all partitions
SELECT customer_id, amount
FROM OPENROWSET(
BULK 'https://storage.dfs.core.windows.net/container/sales/**',
FORMAT = 'PARQUET'
) AS data
WHERE YEAR(sale_date) = 2026;
-- OPTIMISED: partition pruning skips all non-2026 folders
SELECT customer_id, amount
FROM OPENROWSET(
BULK 'https://storage.dfs.core.windows.net/container/sales/year=2026/**',
FORMAT = 'PARQUET'
) AS data;SELECT specific columns, not SELECT *
With Parquet’s columnar format, selecting only the columns you need reduces the data scanned and the cost proportionally.
Optimising Apache Spark Pools
Spark pools in Synapse charge per vCore-hour. A Small pool (4 vCores, 3 executors) costs approximately $0.00025/vCore-hour when running. The key optimisation levers are:
- Enable auto-pause: Spark pools can be configured to auto-pause after a period of inactivity (minimum 5 minutes). This prevents idle pool billing between sessions.
- Enable auto-scale: Configure minimum and maximum node counts. The pool scales up during heavy processing and down to minimum during light use.
- Use spot instances for Spark nodes: Synapse Spark pools support spot (low-priority) nodes at significantly reduced rates. Enable spot for non-critical analytics workloads.
- Right-size the node count: Many teams provision large Spark pools for initial testing and never scale back down. Review node counts against actual job parallelism.
# Create a Spark pool with auto-pause enabled
az synapse spark pool create \
--name optimised-spark \
--workspace-name my-synapse-workspace \
--resource-group my-rg \
--node-count 3 \
--node-size Small \
--enable-auto-pause true \
--delay 15 \
--enable-auto-scale true \
--min-node-count 3 \
--max-node-count 10Storage Cost Optimisation in Synapse
Synapse workspaces use Azure Data Lake Storage Gen2 as their primary storage layer. Storage costs are modest compared to compute but scale with data volume. Key approaches:
- Compress data: Parquet with Snappy compression typically reduces data size by 3–5x compared to uncompressed CSV, directly reducing storage costs.
- Implement lifecycle policies: Move older analytical data from hot to cool tier (reduces cost from $0.023 to $0.01/GB/month) or archive tier ($0.00099/GB/month) for data accessed infrequently.
- Delete intermediate datasets: ETL pipelines often create temporary datasets that accumulate indefinitely. Add cleanup steps to pipelines that delete intermediate data after it is no longer needed.
Common Mistakes
- Leaving a dedicated pool running 24/7 for ad-hoc queries. If analysts run queries sporadically throughout the day, consider Serverless SQL pool at $5/TB scanned instead of maintaining a dedicated pool that sits idle 80% of the time.
- Using SELECT * on large Parquet datasets in Serverless SQL. This negates columnar format’s cost advantages. Always specify only the columns required for the query.
- Not enabling auto-pause on Spark pools. A Spark pool left running overnight between sessions accrues hours of unnecessary compute charges. Auto-pause should be enabled on every non-production Spark pool as a default.
- Over-provisioning DWUs for “performance headroom”. DWUs scale both cost and performance proportionally. Provision for actual workload requirements and scale up programmatically before heavy loads rather than running at peak capacity permanently.
Summary
- Dedicated SQL pool pause/resume automation is the single highest-impact Synapse cost reduction, cutting compute costs by 60–70% for business-hours-only workloads.
- Serverless SQL pool costs $5/TB scanned — Parquet format, specific column selection, and partition pruning can reduce scanned data by 80–90%.
- Spark pools should always have auto-pause enabled. Auto-scale prevents over-provisioning during variable workloads.
- Storage costs are modest but grow with data volume — compress to Parquet and implement lifecycle policies for older data.
Frequently asked questions
What is the biggest cost driver in Azure Synapse Analytics?
Dedicated SQL pools (formerly SQL Data Warehouse) are typically the largest cost component. A DW100c dedicated pool costs approximately $1.20/hour. Leaving a large pool running 24/7 without pause/resume automation is the most common source of avoidable Synapse cost.
Can I pause a Synapse Dedicated SQL pool without losing data?
Yes. Pausing a dedicated SQL pool suspends compute billing but retains all data in storage. Data storage costs continue at approximately $23/TB/month. The pool resumes from the same state within a few minutes of restart.
Is Synapse Serverless SQL pool expensive?
Serverless SQL pool charges only for data scanned: $5 per TB scanned. It has no idle cost. For ad-hoc queries on data lake files, it is very cost-effective. The key to keeping costs low is querying only the columns you need (SELECT specific columns, not SELECT *) and using Parquet format instead of CSV.