One of the technical books that sit on my work desk (or dining table, whichever is the case because I work from home full time now) at arm’s length as a resource book is Benjamin Navarez’s ( t | b ) book on SQL Server performance, High Performance SQL Server: Consistent Response for Mission-Critical Applications, now on it’s second edition.
I have the first edition of this book, and you can find my review here.
There are 2 new chapters in the new edition: SQL Server on Linux & Intelligent Query Processing. All the other chapters are also updated. The total number of new pages is at around 120 according to the author. And what I like with the new edition is that the chapters are divided among Part Headings which gives a good flow of the content. The chapters are divided into:
- SQL Server Internals (Chapter 1 & 2)
- Design and Configuration (Chapter 3 & 4)
- Monitoring (Chapter 5 & 6)
- Performance Tuning and Troubleshooting (Chapter 8, 9, 10 & 11)
Just to give you an idea of how much has changed since the first edition, aside from the fact that the first edition has smaller fonts and was hard to read for people like me who wears prescription glasses (thanks, Apress!), here’s the physical comparison of the two editions:
The first chapter, which deals with Internals, has more coverage on the process of SQL Server Query Processing such as Simplification, Trivial Plan Optimization, the Memo, Full Optimization, Cost Estimation, etc.
The new Chapter 2 is a short chapter which covers SQL Server on Linux. It deals mostly with the short history and background of how SQL Server on Linux became possible (SQLOS/SQLPAL, Project Helsinki, and Drawbridge).
Chapter 3 (SQL Server Configuration) has a new section for Configuring SQL Server On Linux with new topics like Environment Variables, Performance Best Practices, Memory, Kernel Setting, etc.
Chapter 4 (tempdb Troubleshooting and Configuration) has a new sub-section for the SQL Server 2019 tempdb enhancement, Memory-Optimized tempdb Metadata.
Chapter 5 (Analyzing Wait Statistics) includes a sub-section for What’s New on SQL Server 2019. This was Chapter 2 in the first edition. So this is one chapter that was moved so the book can have a better flow.
Chapter 6 (The Query Store) has a new sub-section for Wait Statistics. As noted in this chapter, “collecting wait information on the Query Store was not implemented until SQL Server 2017.” So that was a good tidbit.
Not much has changed in Chapter 7 (SQL Server In-Memory Technologies). This chapter is placed under the heading of Performance Tuning and Troubleshooting. As such, I’d like to believe that this might be a good component to consider for performance purposes. I have no experience with In-Memory/Memory-Optimized Tables and so I cannot really tell if the author has done In-Memory Technologies justice. The in-depth coverage of any important technology like this probably requires an entire book by itself. This chapter gives me a good overview of the technology and examples, which, I think, is enough to provide me the understanding that I need to get started.
Chapter 8 (Performance Troubleshooting) deals with, as the heading suggests, performance troubleshooting. This chapter lists and explains the most useful Performance Counters, Dynamic Management Views and Functions.
Chapter 9 (Indexing) did not change that much, if updated at all from the first edition. Indexing is a big topic and you can find full books on this topic (I suggest Jason Strate’s Expert Performance Indexing in SQL Server 2019: Toward Faster Results and Lower Maintenance).
Chapter 10 (Intelligent Query Processing) is a new chapter. As noted by the author, this chapter is an introduction to this feature. The short topics included in this chapter are Batch Mode Adaptive Joins, Memory Grant Feedback, Interleaved Execution, Batch Mode on Rowstore, Table Variable Deferred Compilation, Scalar UDF Inlining, and Approximate Count Distinct.
Finally, Chapter 11 (SQL Server Storage) which deals with, well, storage. Data files configurations, VLFs, Volumes, RAID Levels, and other related topic are discussed in this final volume. This did not change much, if updated at all from the first edition.
One note that I have though is that, on Chapter 8, there are a couple of instances where the author emphasized certain topics with phrase “Introduced in SQL Server 2016 blah blah” but he did not clarify whether or not the same topics were updated or improved (or not) in SQL Server 2019. I’m talking specifically about the sub-sections on Operator-Level Performance Statistics and Trace Flags on Plans. Maybe they did not change at all; but the fact that these features were referred to in terms of the older version of SQL Server made it sound like this whole chapter is outdated. But it’s no big deal.
Do I recommend this book?
Yes, that’s for sure!