Database backups are one of the most critical parts of any data platform strategy. Whether you are protecting transactional systems, reporting environments, or large enterprise workloads, backups directly influence storage consumption, recovery objectives, operational overhead, and even infrastructure cost.
With SQL Server 2025, backup compression gets a major upgrade through support for ZSTD (Zstandard) compression. This is a significant enhancement for database administrators and architects looking to reduce backup size, improve efficiency, and gain more flexibility in how backup workloads are tuned.
In this post, I will walk through what ZSTD compression is, why it matters, and how to test it using a simple end-to-end backup and restore demo.
What is ZSTD Compression?
ZSTD, or Zstandard, is a modern lossless compression algorithm designed to deliver an excellent balance between:
- High compression ratio
- Fast compression speed
- Very fast decompression
- Flexible tuning through compression levels
For years, backup compression has helped reduce storage usage and improve I/O efficiency. But as database sizes continue to grow, traditional compression methods may not always provide the best balance between speed and storage savings.
That is where ZSTD becomes exciting.
SQL Server 2025 now allows backups to use the ZSTD algorithm, giving DBAs a newer and more efficient option for compressing database backups.
Why This Matters
As backup volumes increase, organizations typically face a common set of challenges:
- Backup files consume too much space
- Backup windows become longer
- Restore operations need to stay fast and reliable
- Storage and archival costs continue growing
- Sending backups across environments or regions becomes more expensive
ZSTD helps address these challenges by improving backup compression efficiency while still maintaining strong decompression performance.
In practical terms, this means you may be able to:
- Store more backups using less space
- Improve backup storage utilization
- Reduce backup repository growth
- Optimize retention strategies
- Improve overall operational efficiency
Key Benefits of ZSTD Backup Compression
1. Better Compression Efficiency
One of the biggest advantages of ZSTD is its ability to compress data more efficiently than older approaches in many scenarios. This can result in noticeably smaller backup files, especially for large databases with compressible data patterns.
2. Faster Decompression
Backup is only one half of the story. Restore performance is equally important. ZSTD is known for fast decompression, which is valuable during restore operations when time matters most.
3. Compression Levels for Flexibility
SQL Server 2025 introduces the ability to choose different compression levels when using ZSTD. This is useful because not every environment has the same priorities.
For example:
- If your priority is faster backup completion, a lower level may be enough
- If your priority is maximum storage reduction, a higher level may be better
- If you want a balance, medium can be a good starting point
4. Familiar Backup Workflow
Another great advantage is that ZSTD integrates directly into the backup syntax DBAs are already familiar with. There is no need to redesign the backup process from scratch. You simply use the appropriate compression options while taking the backup.
Demo Objective
In this walkthrough, the goal is to compare:
- A normal compressed backup
- A ZSTD backup with the default compression level
- A ZSTD backup with MEDIUM compression level
- A ZSTD backup with HIGH compression level
After each backup, we also validate the backup metadata and restore the database to separate target names and file paths. This gives us a complete end-to-end validation of both backup creation and restore success.
For this demo, we will use the JBFinance database and the exact script provided below.
What We Will Validate
This demo helps validate several things:
- Backup command executes successfully
- Backup header can be read
- Backup file can be restored successfully
- Different ZSTD compression levels can be tested easily
- Separate restored copies can be created for comparison and verification
Step 1: Review the Source Database
Before taking backups, it is always useful to review the source database size and file layout.
USE [master]GOsp_helpdb JBFinanceGO
This gives you a quick overview of the database structure and helps confirm the logical file names that will later be used during restore.
Step 2: Take a Regular Compressed Backup
First, take a standard compressed backup using the familiar compression option.
BACKUP DATABASE JBFinance to DISK ='C:\temp\ZSTD\JBFinance_normal.bak' with COMPRESSION,STATS=1;GO
What this does
This command creates a compressed backup of the JBFinance database and writes it to the specified backup location.
Why this matters
This serves as your baseline. You can compare this backup later with the ZSTD-based backups to understand whether ZSTD offers better storage efficiency or operational benefits in your environment.
Step 3: Inspect the Backup Metadata
After the backup completes, inspect the backup header.
RESTORE HEADERONLY FROM DISK ='C:\temp\ZSTD\JBFinance_normal.bak';GO
Why this step is useful
This confirms that:
- The backup file is valid
- SQL Server can read the backup metadata
- The backup can be used in restore operations
It is also a good verification step before running a restore.
Step 4: Restore the Regular Compressed Backup
Now restore that baseline backup to a separate database name.
RESTORE DATABASE [JBFinance_Normal] FROM DISK = N'c:\temp\zstd\JBFinance_normal.bak' WITH FILE = 1, MOVE N'JBFinance_Data1' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Data1.mdf', MOVE N'JBFinance_Data2' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Data2.mdf', MOVE N'JBFinance_Data3' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Data3.mdf', MOVE N'JBFinance_Data4' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Data4.mdf', MOVE N'JBFinance_Log' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Log.ldf', NOUNLOAD, STATS = 1GO
Why restore it?
A backup is only useful if it can be restored successfully. This step validates the full backup-and-restore chain.
Step 5: Take a ZSTD Backup Using the Default Compression Level
Now let’s move to the new feature.
BACKUP DATABASE JBFinance to DISK ='C:\temp\ZSTD\JBFinance_ZSTD.bak' with COMPRESSION(ALGORITHM = ZSTD),STATS=1; --Default compression Level is LOWGO
Important note
When only ALGORITHM = ZSTD is specified, the default compression level is LOW.
Why this is interesting
This gives you a first look at how ZSTD behaves with minimal additional tuning. It is a good starting point for most first-time tests.
Step 6: Validate the ZSTD Backup Header
RESTORE HEADERONLY FROM DISK ='C:\temp\ZSTD\JBFinance_ZSTD.bak';GO
Again, this confirms the backup is readable and valid.
Step 7: Restore the ZSTD LOW Backup
RESTORE DATABASE [JBFinance_Low] FROM DISK = N'c:\temp\zstd\JBFinance_ZSTD.bak' WITH FILE = 1, MOVE N'JBFinance_Data1' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Data1.mdf', MOVE N'JBFinance_Data2' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Data2.mdf', MOVE N'JBFinance_Data3' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Data3.mdf', MOVE N'JBFinance_Data4' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Data4.mdf', MOVE N'JBFinance_Log' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Log.ldf', NOUNLOAD, STATS = 1GO
This confirms that a backup created using ZSTD can be restored just as expected.
Step 8: Take a ZSTD Backup with MEDIUM Compression Level
Now let’s test the MEDIUM compression level.
BACKUP DATABASE JBFinance to DISK ='C:\temp\ZSTD\JBFinance_ZSTD_MEDIUM.bak' with COMPRESSION(ALGORITHM = ZSTD, LEVEL = MEDIUM),STATS=1;GO
Why MEDIUM matters
This is often the level many teams will be interested in because it may provide a stronger balance between:
- Backup size reduction
- CPU cost
- Backup duration
Step 9: Validate the MEDIUM Backup Header
RESTORE HEADERONLY FROM DISK ='C:\temp\ZSTD\JBFinance_ZSTD_MEDIUM.bak';GO
Step 10: Restore the MEDIUM Backup
RESTORE DATABASE [JBFinance_Medium] FROM DISK = N'c:\temp\zstd\JBFinance_ZSTD_MEDIUM.bak' WITH FILE = 1, MOVE N'JBFinance_Data1' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Data1.mdf', MOVE N'JBFinance_Data2' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Data2.mdf', MOVE N'JBFinance_Data3' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Data3.mdf', MOVE N'JBFinance_Data4' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Data4.mdf', MOVE N'JBFinance_Log' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Log.ldf', NOUNLOAD, STATS = 1GO
This gives you a restored copy from the ZSTD MEDIUM backup for validation and comparison.
Step 11: Take a ZSTD Backup with HIGH Compression Level
Now let’s test the HIGH compression level.
BACKUP DATABASE JBFinance to DISK ='C:\temp\ZSTD\JBFinance_ZSTD_HIGH.bak' with COMPRESSION(ALGORITHM = ZSTD, LEVEL = HIGH),STATS=1;GO
Why HIGH matters
If your main goal is maximum backup size reduction, this option is worth testing. In some environments, HIGH can offer the most aggressive storage savings, though it may also require more CPU resources during backup creation.
Step 12: Validate the HIGH Backup Header
RESTORE HEADERONLY FROM DISK ='C:\temp\ZSTD\JBFinance_ZSTD_HIGH.bak';GO
Step 13: Restore the HIGH Backup
RESTORE DATABASE [JBFinance_High] FROM DISK = N'c:\temp\zstd\JBFinance_ZSTD_HIGH.bak' WITH FILE = 1, MOVE N'JBFinance_Data1' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Data1.mdf', MOVE N'JBFinance_Data2' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Data2.mdf', MOVE N'JBFinance_Data3' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Data3.mdf', MOVE N'JBFinance_Data4' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Data4.mdf', MOVE N'JBFinance_Log' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Log.ldf', NOUNLOAD, STATS = 1GO
This completes the end-to-end validation of all backup variants in the test.
Full Demo Script
For convenience, here is the complete script exactly as provided for the demo.
--- ZSTD CompressionUSE [master]GOsp_helpdb JBFinanceGOBACKUP DATABASE JBFinance to DISK ='C:\temp\ZSTD\JBFinance_normal.bak' with COMPRESSION,STATS=1; GO RESTORE HEADERONLY FROM DISK ='C:\temp\ZSTD\JBFinance_normal.bak'; GO RESTORE DATABASE [JBFinance_Normal] FROM DISK = N'c:\temp\zstd\JBFinance_normal.bak' WITH FILE = 1, MOVE N'JBFinance_Data1' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Data1.mdf', MOVE N'JBFinance_Data2' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Data2.mdf', MOVE N'JBFinance_Data3' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Data3.mdf', MOVE N'JBFinance_Data4' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Data4.mdf', MOVE N'JBFinance_Log' TO N'C:\temp\ZSTD\Non-STD\JBFinance_Log.ldf', NOUNLOAD, STATS = 1GO -------BACKUP DATABASE JBFinance to DISK ='C:\temp\ZSTD\JBFinance_ZSTD.bak' with COMPRESSION(ALGORITHM = ZSTD),STATS=1; --Default compression Level is LOWGO RESTORE HEADERONLY FROM DISK ='C:\temp\ZSTD\JBFinance_ZSTD.bak';GO RESTORE DATABASE [JBFinance_Low] FROM DISK = N'c:\temp\zstd\JBFinance_ZSTD.bak' WITH FILE = 1, MOVE N'JBFinance_Data1' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Data1.mdf', MOVE N'JBFinance_Data2' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Data2.mdf', MOVE N'JBFinance_Data3' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Data3.mdf', MOVE N'JBFinance_Data4' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Data4.mdf', MOVE N'JBFinance_Log' TO N'C:\temp\ZSTD\ZSTD\JBFinance_Log.ldf', NOUNLOAD, STATS = 1GO -------BACKUP DATABASE JBFinance to DISK ='C:\temp\ZSTD\JBFinance_ZSTD_MEDIUM.bak' with COMPRESSION(ALGORITHM = ZSTD, LEVEL = MEDIUM),STATS=1;GO RESTORE HEADERONLY FROM DISK ='C:\temp\ZSTD\JBFinance_ZSTD_MEDIUM.bak';GO RESTORE DATABASE [JBFinance_Medium] FROM DISK = N'c:\temp\zstd\JBFinance_ZSTD_MEDIUM.bak' WITH FILE = 1, MOVE N'JBFinance_Data1' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Data1.mdf', MOVE N'JBFinance_Data2' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Data2.mdf', MOVE N'JBFinance_Data3' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Data3.mdf', MOVE N'JBFinance_Data4' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Data4.mdf', MOVE N'JBFinance_Log' TO N'C:\temp\ZSTD\ZSTD_MEDIUM\JBFinance_Log.ldf', NOUNLOAD, STATS = 1GO ------BACKUP DATABASE JBFinance to DISK ='C:\temp\ZSTD\JBFinance_ZSTD_HIGH.bak' with COMPRESSION(ALGORITHM = ZSTD, LEVEL = HIGH),STATS=1;GO RESTORE HEADERONLY FROM DISK ='C:\temp\ZSTD\JBFinance_ZSTD_HIGH.bak';GORESTORE DATABASE [JBFinance_High] FROM DISK = N'c:\temp\zstd\JBFinance_ZSTD_HIGH.bak' WITH FILE = 1, MOVE N'JBFinance_Data1' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Data1.mdf', MOVE N'JBFinance_Data2' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Data2.mdf', MOVE N'JBFinance_Data3' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Data3.mdf', MOVE N'JBFinance_Data4' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Data4.mdf', MOVE N'JBFinance_Log' TO N'C:\temp\ZSTD\ZSTD_HIGH\JBFinance_Log.ldf', NOUNLOAD, STATS = 1GO
What to Observe During the Demo
When you run this demo in your environment, pay close attention to the following:
1. Backup File Size
Compare the sizes of:
JBFinance_normal.bakJBFinance_ZSTD.bakJBFinance_ZSTD_MEDIUM.bakJBFinance_ZSTD_HIGH.bak
This helps you understand how each compression option affects storage savings.
2. Backup Completion Time
Capture how long each backup takes to complete. Higher compression levels may reduce backup size further, but they can also use more CPU.
3. Restore Success
Each backup should restore successfully into its own database copy. This confirms backup reliability and end-to-end usability.
4. Compression Trade-Offs
The best compression level is not always the smallest file. In many real-world environments, the right choice depends on:
- Backup window
- CPU availability
- Storage cost
- Restore expectations
- Workload sensitivity
4. My Test details

Practical Guidance
Here are a few practical recommendations when evaluating ZSTD backup compression in your environment.
Start with LOW or MEDIUM
If you are testing this feature for the first time, LOW or MEDIUM is a practical place to begin.
Measure Before Standardizing
Do not assume one level is best for every database. Compression results vary depending on:
- Data types
- Existing data compression
- Row patterns
- Repetitive versus random data
- Binary or already compressed content
Test Restore Performance Too
Do not focus only on backup size. Make sure you also validate restore workflows, especially for recovery-critical systems.
Use Realistic Data
Whenever possible, test this against an actual workload or database that resembles production.
Final Thoughts
ZSTD compression in SQL Server 2025 is a meaningful enhancement for modern backup strategies. It gives database professionals more flexibility in how they balance storage efficiency, backup throughput, and operational cost.
The biggest advantage is not just smaller backup files. It is the ability to tune compression behavior based on your environment and priorities.
If your organization manages large backups, retention-heavy workloads, or storage-sensitive environments, this feature is definitely worth testing.
The script used in this post provides a simple and effective way to compare:
- Standard compressed backup
- ZSTD LOW
- ZSTD MEDIUM
- ZSTD HIGH
and validate the complete backup-and-restore workflow.
Thank You,
Vivek Janakiraman
Disclaimer:
The views expressed on this blog are mine alone and do not reflect the views of my company or anyone else. All postings on this blog are provided “AS IS” with no warranties, and confers no rights.
- backup and restore SQL Server
- Database Administration
- database backup compression
- database backup tutorial
- database performance optimization
- DBA tutorial
- enterprise SQL backup
- JBSWiki
- MSSQL backup compression
- SQL backup and recovery tutorial
- SQL backup best practices
- SQL backup demo
- SQL backup optimization
- SQL backup performance
- SQL backup performance improvement
- SQL backup storage savings
- SQL backup strategy
- SQL backup tuning
- SQL disaster recovery
- SQL high availability
- SQL infrastructure
- SQL operations
- SQL restore demo
- sql server 2025
- SQL Server 2025 backup compression
- sql server 2025 features
- sql server 2025 tutorial
- SQL Server Administration
- SQL Server advanced features
- SQL Server Backup
- SQL Server backup compression
- SQL Server backup explained
- SQL Server backup management
- SQL Server backup size reduction
- SQL Server compression algorithm
- SQL Server compression levels
- SQL Server database backup
- SQL Server DBA
- SQL Server hands on demo
- SQL Server live demo
- SQL Server new features
- SQL Server performance tuning
- SQL Server storage optimization
- SQL Server technology
- SQL Server tutorial
- SQL Server ZSTD
- SQL training
- Zstandard compression SQL Server
- ZSTD Compression