SQL Server 2025 CU3 Backup/Restore Performance: Benchmark and the Real Impact of Patch 4836855
🔥 SQL Server 2025 CU3 vs CU2 – Testing Fix 4836855 (Backup/Restore I/O Alignment)
Hi SQL SERVER Guys,
In the previous post we started analyzing performance differences between SQL Server 2025 CU2 and CU3. We showed real benchmark results and performances increment nobody talks about.
👉 If you missed it, here is the previous article:
SQL Server 2025 CU3 – The Hidden Performance Fix Nobody Talks About (False Sharing Benchmark)
Today we continue our investigation and analyze the performance improvements introduced by the patch below:
🧪 Fix 4836855 – Backup/Restore I/O Alignment
This fix aims to improve how SQL Server handles I/O operations during backup and restore.
👉 In simple terms:
- Reduces inefficient I/O alignment
- Improves throughput during backup/restore
- Reduces latch contention on I/O operations
- Removes hidden bottlenecks caused by internal serialization
💡 Important insight:
The fix doesn’t make your disk faster — it removes artificial serialization.
So… do you want faster backups and restores? Keep reading.
⚙️ Benchmark Setup
The goal is to compare:
- SQL Server 2025 CU2
- SQL Server 2025 CU3
Same hardware, same database, same workload.
We want to isolate the effect of fix 4836855.
🧪 Test Query
This time we use a simple but very effective workload, the database used in the previous post.
-- Backup test
BACKUP DATABASE biondi_test
TO DISK = 'C:\temp\biondi_test.bak'
WITH INIT, STATS = 5;
-- Restore test
RESTORE DATABASE biondi_test_copy
FROM DISK = 'C:\temp\biondi_test.bak'
WITH MOVE 'biondi_test' TO 'C:\temp\biondi_test_copy.mdf',
MOVE 'biondi_test_log' TO 'C:\temp\biondi_test_copy.ldf',
REPLACE, STATS = 5;
📊 What We Measure
To understand if the fix really works, we focus on two key areas:
1️⃣ Throughput (MB/s)
- Measured directly from backup output
👉 Expectation:
- CU3 should show higher MB/s
2️⃣ I/O Latch Contention
We specifically monitor:
- PAGEIOLATCH_SH
- PAGEIOLATCH_EX
- PAGEIOLATCH_UP
👉 These waits indicate pressure on physical I/O operations.
👉 Expectation:
- Lower wait time in CU3
- Lower average wait per task
🔍 How to Measure Waits
SELECT
wait_type,
wait_time_ms,
waiting_tasks_count,
wait_time_ms / NULLIF(waiting_tasks_count,0) AS avg_wait_ms
FROM sys.dm_os_wait_stats
WHERE wait_type LIKE 'PAGEIOLATCH%'
ORDER BY wait_time_ms DESC;
📈 What We Expect to See
If fix 4836855 is effective:
- 🚀 Higher backup/restore throughput
- 🔽 Reduced PAGEIOLATCH waits
- ⚡ Lower average wait time
- 📉 Better scalability under load
If nothing changes:
- Same MB/s
- Same latch contention
🧠 Results
Throughput test
| Version | Avg(MB/s) | Var | Dev. Std |
|---|---|---|---|
| CU2 | 562.90 | 105.59 | 10.28 |
| CU3 | 565.02 | 17.42 | 4.17 |
Variance measured in CU2 is roughly 6× more variable than CU3
👉 This means that CU3 is significantly more stable, which is critical for predictable backup performance.
🠆 Restore results
![]() |
| CU2 vs. CU3a |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Performances: Virtually identical. CU3 exibith +0.3 MB/s so there is not real speed gain. Stability: The Std.Dev decrease from 6.33 to 4.65. Restore is 25/30% more stable. I/O waits testIn this test we measured the PAGEIOLATCH% wait types. We used then following procedure for test the backup statement. We replaced the backup statements with the restore one for the restore test. 🠆 Backup: We analyzed wait stats during backups, focusing on PAGEIOLATCH_UP and PAGEIOLATCH_EX waits — these reflect typical page I/O operations.We looked at two key metrics:
The CU2
Interpretation:
The CU3
Interpretation:
Comparison CU2 vs CU3:
Overall Analysis I/O Performance
Stability
Finally:
🠆 Restore If the backup command showed only a limited improvent, the restore one instead surprise me! We analyzed wait stats during database restores, focusing on PAGEIOLATCH_SH, PAGEIOLATCH_UP, and PAGEIOLATCH_EX waits — these reflect typical page I/O operations under high load.
Two key metrics were considered:
The CU2
Interpretation:
The CU3
Interpretation:
Comparison CU2 vs CU3:
Overall AnalysisI/O Performance:
Stability:
Impact:
📈 ConclusionThe “fix” introduced in CU3 appears to work as intended: there is less contention, shorter wait times, and more stable throughput. The data confirm both a reduction in latch spikes and a more uniform management of waiting threads. |
🧠 Final Thoughts
This is a classic example where performance improvements are not about raw hardware speed, but about removing internal inefficiencies. Fix 4836855 targets exactly that.
👉 Hope you liked this post. I will be happy to read your suggestions and your comments.
Stay tuned for the next posts!
Luca Biondi @2025



Comments
Post a Comment