I love how Microsoft treats deprecated and discontinued features in SQL Server.
No, seriously. I give Microsoft a lot of sarcasm and lip around here, but Microsoft takes serious care to make it easy to upgrade versions without worrying about your application breaking. If you disagree, hear me out for a minute.
“Discontinued” means it’s dead and removed.
The Books Online page for discontinued database engine functionality is pretty doggone short. There have only been a few things deprecated in the last several years:
- Big Data Clusters
- PolyBase scale-out groups
- A few database-scoped configuration options
- And a few others you’re not gonna miss, like the 32-bit version of SQL Server
This is fantastic. If you’ve written a new app in the last 10 years and it used SQL Server as a back end, odds are every query you wrote is still going to compile and execute today. Contrast that with the nightmare that developers have to deal with around .NET and .NET Core, and the difference is night and day. SQL Server queries just work, and they’ve worked the same for decades, with almost all additive changes only.
Deprecated means alive,
but it’s walking dead.
The Books Online page for SQL Server 2022’s deprecated features is tomorrow’s obituaries. These are features Microsoft has publicly walked away from, and while the features are still in the product, they’re not getting any love, and they might be removed at any time.
For SQL Server 2022, Microsoft deprecated Distributed Replay.
The idea behind the feature was that you’d capture a trace against your production environment, set up another environment for load testing or QA testing, and then replay that exact same workload against it. You’d be able to measure which queries got better or worse, and how.
The reality was a complete mess. It was a giant pain in the rear to set up and use, to the point where I got frustrated with it within a few hours and asked my peers about their experiences with it. I got back a string of four-letter words – everybody really struggled to get it across the finish line. Over subsequent versions, Microsoft made token efforts to improve it, but never really gave it the love it required.
The writing was on the wall when Distributed Replay didn’t support collecting a trace from SQL Server 2019.
Now, the writing’s getting carved into stone. My guess is that even in SQL Server 2022, Microsoft still won’t support gathering data from SQL Server 2019, which means this thing’s already dead. Sure, you can technically use it with SQL Server 2017, but…
So what do you use instead?
Me personally, I don’t believe that capturing a production workload trace has ever been a good long-term idea. I’ve written about the problems with database load testing before, and my opinion still stands: it’s a really, really hard problem, much harder than it looks at first glance.
If you do wanna try it, check out Gianluca Sartori’s open source WorkloadTools.
Otherwise, you need application-level load testing instead. Something needs to call the app’s APIs, generate the relevant workload, and get the app to send in the appropriate queries. Plus, then you’re testing the entire stack – not just the database server.
I will inevitably be crucified over my next statement from some impassioned DBAs but IMHO I believe Microsoft’s SQL Merge Replication feature should not just be Deprecated but should be erased from the earth especially since the advent of API’s in applications these days. I cringe everytime I see this dead feature still walking. I can’t believe I still see clients with Merge Replication still in the wild (as it is so 90’s) or at least on my doorstep when asked for DBA assistance to fix the publisher and subscriber functionality problems. Ugh!) MS PLEASE KILL THIS FEATURE FOR REALSY!
Speaking of which, “GRANT ALL” was deprecated in SQL 2005, yet my logs still always have a healthy population of the following message after patches:
“The ALL permission is deprecated and maintained only for compatibility. It DOES NOT imply ALL permissions defined on the entity.”
Why? Because the Microsoft team themselves are still using “GRANT ALL” in their patch scripts a full 17 years after deprecation 🙂 Can you imagine if they ever discontinued support for statements not terminated by semicolons (deprecated back in a 2008 version)? We’d be looking at Y2K all over again 🙂
As anyone ever used Microsoft Database Experimentation Assistant, aka DEA Tool?
Or is this another walking dead?
It hasn’t been officially deprecated as far as I know, but… I don’t know anyone who uses it regularly.
I swear I remember Big Data Clusters being the biggest talking point when SQL2019 came out. Wasn’t that Microsoft’s main focus at the Summit?
I think so!
I like this tool. Yes, total agreement, an enormous pain in the bottom to get set up and functional. However, once there, it was really useful.
Oh well, good news is, that’s a chapter I don’t have to rewrite for the book, so WIN!!!!
HA! There we go, always looking on the bright side.
Well, that’s unfortunate. Finally got to the point that we wanted to start using it…and it’s gone 🙂
Are there any similar options out there for replaying production load en masse, with multiple client nodes?
Read this and the comments: https://www.brentozar.com/archive/2019/01/how-to-load-test-a-database-application/
Doesn’t the DEA need the distributed-replay feature to work?
If Distributed Replay is deprecated, I would think the DEA is not far behind.
I personally echo the hate of (I’m sure) many people for these 2 features, which look nice and shiny on the outside but a punishment from hell on the inside… 🙂
I won’t shed a tear when they are gone. I will no longer need to convince anyone that no, I’m not lazy, it’s just that these tools are really, really hard and time consuming to set up and work with.
Incidentally, I am not able to find any links that mention that DR trace is not supported in SQL 2019.
Brent, do you have any links handy on this?
Sure, here you go: https://github.com/MicrosoftDocs/sql-docs/issues/5974
It’s not clear whether Microsoft fixed 2019’s inability to gather the Distributed Replay traces, or if they just removed it from the documentation.