Moneybags
Duplicating data for reporting, outside of moving it to a data warehouse where there’s some transformations involved, can be an expensive and perilous task.
Your options come down to a native solution like AGs, Replication, or Log Shipping. You can brew something up yourself that relies on native stuff too, like Change Data Capture, Change Tracking, Temporal Tables, or triggers.
Outside of that, you’re getting into the world of SSIS/ADF, other third party vendors, etc. to get data where it ought to go. That’s none of my business, and good luck to you.
As soon as you let people read that data, you have to fully license the SQL Server that it’s sitting on.
Alt Rock
I’ve talked to a few dozen people about this over the years, too. Most were shocked to learn about the licensing implications, thinking that having Software Assurance from Microsoft covered their needs.
The most frequent desire for offloading reads is real-time reporting, and the most frequently cited reason is that reporting queries put too much load on the current server hardware.
You can see where the conflict sits, here. People think they’re getting a free SQL Server to report off of, so they don’t need to up their current hardware and pay for it. Microsoft may be dumb, but it ain’t that dumb.
Once you get people past the licensing issues, tuning the current hardware becomes a more approachable subject.
Gestalt Block
Of course, the idea of tuning the reporting queries has occurred to most people, but the attempts at tuning are usually flailing attempts to solve problems that aren’t there.
- Maybe this local variable will do a thing for parameter sniffing
- NOLOCK is better for reports, anyway
- Don’t forget to recompile, too
- Add a DISTINCT, there’s too many rows
- Throw up hands, rebuild indexes
While everything has its place, it’s rare that this combination will get you past all of your performance issues. Reporting queries are especially interesting to me, because of how few people embrace batch mode to any degree for them.
The cost of tuning queries is far cheaper than the cost of licensing a whole other server, especially for Enterprise Edition customers. If you’re on Standard Edition, you have many other problems. Many, many other problems, standing in the way of scaling and performance issues.
If this is the kind of thing you need help with, drop me a line. This is exactly the kind of thing I do.
Thanks for reading!
Going Further
If this is the kind of SQL Server stuff you love learning about, you’ll love my training. I’m offering a 75% discount to my blog readers if you click from here. I’m also available for consulting if you just don’t have time for that and need to solve performance problems quickly.
Batch mode rocks! I first used it with columnstore. It’s nice we can use it on rowstore as well.
Hahaha, hell yeah!
We made the choice to offload reads because the particulars of our AG topology means that we’re paying the licensing fee for one of the secondary instances anyways, so we may as well direct some traffic at it and keep each coequal instance in the topology as small as possible (we’re in the clooooud!).
How’s the food up there?