I was pleased to get sent a copy of Benjamin Nevarez's new book High Performance SQL Server. I've known Benjamin for a long time. He's a very skilled SQL Server professional, and you'll see him at conferences around the world. (Or at least once Covid is tackled more completely).
And the technical reviewer for the book is another very skilled old friend in Mark Broadbent. So my expectations were high for the new edition of this book.
I wasn't disappointed.
It was refreshing to read a book that covered so much of the core knowledge that's needed when working with SQL Server and getting it to perform well.
Benjamin covers a wide variety of topics: an introduction to how SQL Server works internally (including now on Linux), how to configure it and how to work with tempdb. He then headed into monitoring, so that you could find what issues need to be dealt with. The book then looks at performance troubleshooting, and indexing. It finishes with a discussion of the Intelligent Query Processing features added in recent versions followed by a discussion on storage.
As I read, I kept seeing how he led into topics, and as soon as I'd think "I hope he mentions topic X" as I thought it was important, he'd then describe topic X. There were a few areas where I disagreed, but they were few and far between.
I can't tell you how pleasing it was to read a technical book that was well written, used English well, and wasn't full of technical errors. I've seen so many books lately that just aren't like this. By comparison, I was the tech reviewer on a book just the other day, that I'd rather I'm not mentioned in the book at all once it's released. It was so poorly written.
Now, were there areas that I disagreed with Benjamin on?
In particular, I just don't share the enthusiasm for the in-memory OLTP options in SQL Server, even for temporary objects. I've spent so much time trying them, and let's just say, I don't use them. I'm pretty sure if I extended Benjamin's examples on those a bit further, I think he'd agree.
Were there areas where I'd love to see the book improved?
Here are some suggestions:
- I think there are a few areas that are suffering from being updates, rather than having been written from scratch recently. As an example, Benjamin linked to an MSDN white paper that I wrote in 2008, and while still somewhat relevant, I did an update to that paper in 2012. That would be a better reference.
- The discussion on storage feels dated. What I would also love to see discussed in this section is info on other current challenges in this area. For example, the impact of de-duplicating I/O subsystems.
- There are a number of style aspects I'd love to see changed. I'd like to see WideWorldImporters instead of AdventureWorks. I'd like to see statement terminators in all the code (personal bugbear).
- The order of the topics in theory makes sense, but in practice, I'm not so sure. I think a lot of readers would be put off by being thrown into a discussion of TDS as soon as they start reading.
- The discussion on filtered indexes needs to be fleshed out further. They're an awesome feature, but you have to learn to use them, not just configure them.
I'd also like to see the book call out more on the importance of appropriate application design. In my work, I find that at least 70% of the SQL Server performance-related issues that I run into, are application design issues. When you're trying to fix them at the back end, it's already way too late to get real outcomes. I realise though, that that's all many people have a chance to do.
The Verdict ?
Overall though? What a wonderful book. 9 out of 10.