SQL Server Advanced Troubleshooting and Performance Tuning (Dmitri Korotkevitch) (Z-Library)

Author: Dmitri Korotkevitch

艺术

This book provides a comprehensive overview on best practices for troubleshooting and performance tuning in SQL Server. It reviews how to identify performance issues, how to troubleshoot the system in a holistic fashion, and how to properly prioritize tuning efforts in order to induce the best system performance possible. The book also discusses interdependencies between database components, while spotlighting ways to avoid the bottlenecks that can be triggered by those dependencies. The troubleshooting and performance tuning techniques presented in the book are compatible with any version of SQL Server. They cover both on-premise and Cloud-based SQL Server installations, including Microsoft Azure SQL Databases and Amazon SQL Server RDS. Reflecting the approaches used by many high-end SQL Server consultants, SQL Server Advanced Troubleshooting and Performance Tuning is a valuable resource that will help readers master troubleshooting and performance tuning skills and get the best performance out of SQL Server.

📄 File Format: PDF
💾 File Size: 18.2 MB
28
Views
0
Downloads
0.00
Total Donations

📄 Text Preview (First 20 pages)

ℹ️

Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

📄 Page 1
Dmitri Korotkevitch SQL Server Advanced Troubleshooting and Performance Tuning Best Practices and Techniques
📄 Page 2
DATA “A great collection of techniques, tips, and scripts to deal with problems in both reactive and proactive ways. I wish I’d had a book like this 25 years ago when I started working with SQL Server.” —Thomas Grohser SQL Server Infrastructure Architect SQL Server Advanced Troubleshooting and Performance Tuning US $69.99 CAN $87.99 ISBN: 978-1-098-10192-3 Twitter: @oreillymedia linkedin.com/company/oreilly-media youtube.com/oreillymedia This practical book provides a comprehensive overview of troubleshooting and performance tuning best practices for Microsoft SQL Server. Database engineers, including database developers and administrators, will learn how to identify performance issues, troubleshoot the system in a holistic fashion, and properly prioritize tuning efforts to attain the best system performance possible. Author Dmitri Korotkevitch, Microsoft Data Platform MVP and Microsoft Certified Master (MCM), explains the interdependencies between SQL Server database components. You’ll learn how to quickly diagnose your system and discover the root cause of any issue. Techniques in this book are compatible with all versions of SQL Server and cover both on-premises and cloud-based SQL Server installations. • Discover how performance issues present themselves in SQL Server • Learn about SQL Server diagnostic tools, methods, and technologies • Perform health checks on SQL Server installations • Learn the dependencies between SQL Server components • Tune SQL Server to improve performance and reduce bottlenecks • Detect poorly optimized queries and inefficiencies in query execution plans • Find inefficient indexes and common database design issues • Use these techniques with Microsoft Azure SQL databases, Azure SQL Managed Instances, and Amazon RDS for SQL Server Dmitri Korotkevitch is a Microsoft Data Platform MVP and Microsoft Certified Master (SQL Server) with years of IT experience, including working with Microsoft SQL Server as an application and database developer, database administrator, and database architect. Dmitri specializes in the design, development, and performance tuning of complex OLTP systems that handle thousands of transactions per second around the clock. Currently, he leads the Database Services team at Chewy.com and he provides SQL Server consulting services and training to clients around the world.
📄 Page 3
Dmitri Korotkevich SQL Server Advanced Troubleshooting and Performance Tuning Best Practices and Techniques Boston Farnham Sebastopol TokyoBeijing
📄 Page 4
978-1-098-10192-3 [LSI] SQL Server Advanced Troubleshooting and Performance Tuning by Dmitri Korotkevitch Copyright © 2022 Dmitri Korotkevitch. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://oreilly.com). For more information, contact our corporate/institutional sales department: 800-998-9938 or corporate@oreilly.com. Acquisitions Editor: Andy Kwan Development Editor: Sarah Grey Production Editor: Beth Kelly Copyeditor: Audrey Doyle Proofreader: Piper Editorial Consulting, LLC Indexer: Potomac Indexing, LLC Interior Designer: David Futato Cover Designer: Karen Montgomery Illustrator: Kate Dullea May 2022: First Edition Revision History for the First Edition 2022-05-13: First Release See http://oreilly.com/catalog/errata.csp?isbn=9781098101923 for release details. The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. SQL Server Advanced Troubleshooting and Performance Tuning, the cover image, and related trade dress are trademarks of O’Reilly Media, Inc. The views expressed in this work are those of the author, and do not represent the publisher’s views. While the publisher and the author have used good faith efforts to ensure that the information and instructions contained in this work are accurate, the publisher and the author disclaim all responsibility for errors or omissions, including without limitation responsibility for damages resulting from the use of or reliance on this work. Use of the information and instructions contained in this work is at your own risk. If any code samples or other technology this work contains or describes is subject to open source licenses or the intellectual property rights of others, it is your responsibility to ensure that your use thereof complies with such licenses and/or rights.
📄 Page 5
Table of Contents Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi 1. SQL Server Setup and Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Hardware and Operating System Considerations 2 CPU 2 Memory 2 Disk Subsystem 3 Network 4 Operating Systems and Applications 5 Virtualization and Clouds 6 Configuring Your SQL Server 7 SQL Server Version and Patching Level 7 Instant File Initialization 7 tempdb Configuration 9 Trace Flags 10 Server Options 12 Configuring Your Databases 15 Database Settings 15 Transaction Log Settings 17 Data Files and Filegroups 17 Analyzing the SQL Server Error Log 19 Consolidating Instances and Databases 22 Observer Effect 23 Summary 25 Troubleshooting Checklist 26 2. SQL Server Execution Model and Wait Statistics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 SQL Server: High-Level Architecture 27 iii
📄 Page 6
SQLOS and the Execution Model 29 Wait Statistics 32 Execution Model–Related Dynamic Management Views 36 sys.dm_os_wait_stats 37 sys.dm_exec_session_wait_stats 38 sys.dm_os_waiting_tasks 38 sys.dm_exec_requests 39 sys.dm_os_schedulers 41 Resource Governor Overview 42 Summary 44 Troubleshooting Checklist 44 3. Disk Subsystem Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Anatomy of the SQL Server I/O Subsystem 45 Scheduling and I/O 46 Data Reads 47 Data Writes 49 The Storage Subsystem: A Holistic View 50 sys.dm_io_virtual_file_stats view 51 Performance Counters and OS Metrics 55 Virtualization, HBA, and Storage Layers 59 Checkpoint Tuning 61 I/O Waits 64 ASYNC_IO_COMPLETION Waits 64 IO_COMPLETION Waits 64 WRITELOG Waits 65 WRITE_COMPLETION Waits 65 PAGEIOLATCH Waits 65 Summary 67 Troubleshooting Checklist 67 4. Inefficient Queries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 The Impact of Inefficient Queries 69 Plan Cache–Based Execution Statistics 70 Extended Events and SQL Traces 82 Query Store 88 Query Store SSMS Reports 92 Working with Query Store DMVs 96 Third-Party Tools 101 Summary 102 Troubleshooting Checklist 103 iv | Table of Contents
📄 Page 7
5. Data Storage and Query Tuning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Data Storage and Access Patterns 105 Row-Based Storage Tables 106 B-Tree Indexes 109 Composite Indexes 114 Nonclustered Indexes 115 Index Fragmentation 120 Statistics and Cardinality Estimation 123 Statistics Maintenance 126 Cardinality Estimation Models 128 Analyzing Your Execution Plan 130 Row Mode and Batch Mode Execution 130 Live Query Statistics and Execution Statistics Profiling 133 Common Issues and Inefficiencies 137 Inefficient Code 137 Inefficient Index Seek 140 Incorrect Join Type 143 Excessive Key Lookups 151 Indexing the Data 154 Summary 157 Troubleshooting Checklist 157 6. CPU Load. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Nonoptimized Queries and T-SQL Code 159 Inefficient T-SQL Code 160 Scripts for Troubleshooting High CPU Load 161 Nonoptimized Query Patterns to Watch For 163 Query Compilation and Plan Caching 164 Parameter-Sensitive Plans 165 Parameter-Value Independence 171 Compilation and Parameterization 174 Auto-Parameterization 176 Simple Parameterization 177 Forced Parameterization 177 Parallelism 180 Summary 182 Troubleshooting Checklist 183 7. Memory Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 SQL Server Memory Usage and Configuration 185 Configuring SQL Server Memory 188 How Much Memory Is Enough? 190 Table of Contents | v
📄 Page 8
Memory Allocations 190 Memory Clerks 192 The DBCC MEMORYSTATUS Command 202 Query Execution and Memory Grants 202 Optimizing Memory-Intensive Queries 206 Memory Grant Feedback 211 Controlling Memory Grant Size 212 In-Memory OLTP Memory Usage and Troubleshooting 214 Summary 217 Troubleshooting Checklist 217 8. Locking, Blocking, and Concurrency. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Lock Types and Locking Behavior 220 Major Lock Types 221 Lock Compatibility 224 Transaction Isolation Levels and Locking Behavior 225 Blocking Issues 228 Troubleshooting Real-Time Blocking 230 Working with Blocked Process Reports 234 Event Notifications and Blocking Monitoring Framework 238 Deadlocks 238 Troubleshooting Deadlocks 240 Locking and Indexes 244 Optimistic Isolation Levels 245 READ COMMITTED SNAPSHOT Isolation Level 247 SNAPSHOT Isolation Level 248 Schema Locks 249 Lock Escalation 251 Lock Escalation Troubleshooting 254 Locking-Related Waits 256 LCK_M_U Wait Type 257 LCK_M_S Wait Type 257 LCK_M_X Wait Type 258 LCK_M_SCH_S and LCK_M_SCH_M Wait Types 258 Intent LCK_M_I* Wait Types 259 Range Locks LCK_M_R* Wait Types 259 Summary 260 Troubleshooting Checklist 260 9. tempdb Usage and Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Temporary Objects: Usage and Best Practices 263 Temporary Tables and Table Variables 264 vi | Table of Contents
📄 Page 9
Temporary Object Caching 270 Table-Valued Parameters 272 Regular Tables in tempdb and Transaction Logging 274 Internal tempdb Consumers 275 Version Store 275 Spills 278 Common tempdb Issues 281 System Page Contention 283 Running Out of Space 287 tempdb Configuration 290 Summary 291 Troubleshooting Checklist 292 10. Latches. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Introduction to Latches 293 Page Latches 295 Addressing Hotspots: The OPTIMIZE_FOR_SEQUENTIAL_KEY Index Option 299 Addressing Hotspots: Hash Partitioning 300 Addressing Hotspots: In-Memory OLTP 302 Other Latch Types 303 Summary 305 Troubleshooting Checklist 306 11. Transaction Log. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Transaction Log Internals 307 Data Modifications and Transaction Logging 308 Explicit and Auto-Committed Transactions and Log Overhead 313 Delayed Durability 316 In-Memory OLTP Transaction Logging 317 Virtual Log Files 317 Transaction Log Configuration 321 Log Truncation Issues 321 LOG_BACKUP Log Reuse Wait 323 ACTIVE_TRANSACTION Log Reuse Wait 323 AVAILABILITY_REPLICA Log Reuse Wait 325 DATABASE_MIRRORING Log Reuse Wait 325 REPLICATION Log Reuse Wait 325 ACTIVE_BACKUP_OR_RESTORE Log Reuse Wait 326 Other Mitigation Strategies 326 Accelerated Database Recovery 326 Transaction Log Throughput 327 Table of Contents | vii
📄 Page 10
Summary 329 Troubleshooting Checklist 330 12. AlwaysOn Availability Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 AlwaysOn Availability Groups Overview 331 Availability Group Queues 333 Synchronous Replication and the Danger of the HADR_SYNC_COMMIT Wait 337 Availability Group Extended Events 340 Asynchronous Replication and Readable Secondaries 345 The Impact of Readable Secondaries 346 Parallel Redo 350 Troubleshooting Failover Events 351 Availability Groups and Windows Server Failover Cluster 351 Troubleshooting Failovers 353 When a Failover Does Not Occur 355 Summary 355 Troubleshooting Checklist 356 13. Other Notable Wait Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 ASYNC_NETWORK_IO Waits 357 THREADPOOL Waits 359 Backup-Related Waits 364 Improving Backup Performance 364 BUFFERCOUNT and MAXTRANSFERSIZE Options 365 Partial Database Backups 365 HTBUILD and Other HT* Waits 366 Preemptive Waits 366 PREEMPTIVE_OS_WRITEFILEGATHER Wait Type 367 PREEMPTIVE_OS_WRITEFILE Wait Type 367 Authentication-Related Wait Types 367 OLEDB Waits 368 Wait Types: Wrapping Up 368 Summary 369 Troubleshooting Checklist 370 14. Database Schema and Index Analysis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Database Schema Analysis 371 Heap Tables 372 Indexes with the uniqueidentifier Data Type 375 Wide and Nonunique Clustered Indexes 376 Untrusted Foreign Keys 378 viii | Table of Contents
📄 Page 11
Nonindexed Foreign Keys 379 Redundant Indexes 382 High Identity Values 385 Index Analysis 388 The sys.dm_db_index_usage_stats View 389 The sys.dm_db_index_operational_stats View 396 Holistic View: sp_Index_Analysis 401 Summary 403 Troubleshooting Checklist 403 15. SQL Server in Virtualized Environments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 To Virtualize or Not to Virtualize, That Is the Question 405 Configuring SQL Server in Virtualized Environments 407 Capacity Planning 407 CPU Configuration 408 Memory 414 Storage 414 Network 416 Virtual Disk Management 417 Backup Strategy and Tools 417 Troubleshooting in Virtual Environments 418 Insufficient CPU Bandwidth 419 Memory Pressure 422 Disk Subsystem Performance 424 Summary 425 Troubleshooting Checklist 426 16. SQL Server in the Cloud. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 Cloud Platforms: A 30,000-Foot View 427 Platform Reliability 428 Throttling 429 Topology 429 Connectivity Considerations and Transient Error Handling 430 Accessing the Database Instance 430 Transient Errors 430 SQL Server in Cloud VMs 431 I/O Setup and Performance 432 High Availability Setup 433 Cross-Region Latency 434 Managed Microsoft Azure SQL Services 435 Services Architecture and Design Considerations 435 Troubleshooting Approaches 439 Table of Contents | ix
📄 Page 12
Amazon SQL Server RDS 441 CloudWatch 442 Performance Insights 443 Google Cloud SQL 445 Summary 446 Troubleshooting Checklist 447 A. Wait Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 x | Table of Contents
📄 Page 13
Preface It’s been a few years since I published my last book. Many things have changed since then. Several SQL Server versions have been released. The product has become more mature, offering cross-OS support and true cloud-friendly capabilities. Nevertheless, I did not think it was the right time to publish the new edition of Pro SQL Server Internals (Apress). There were a couple reasons for that. As great as the new features were, they did not change the way the product works fundamentally. Most of the content from my old books could be applied to SQL Server 2017, SQL Server 2019, and even upcoming SQL Server 2022 releases. More importantly, I wanted to write the book in a different way. Perhaps, I need to elaborate. As some of you may know, I’ve been delivering SQL Server courses for many years, and I considered my books as supplementary materi‐ als for them. In fact, I started to write because I wanted to present the content in a more structured, non–Power Point format. I am glad that my readers liked it and found the books especially useful. All my courses focused on SQL Server Internals. I’ve always believed that any profes‐ sional needs to know their tools to be successful. I taught my audience how SQL Server works, helping them to use this knowledge and build efficient systems. Over time, however, I found that troubleshooting and performance tuning became the most popular topic in my classes—people like when I start with the problem and then explain why it occurs. As I changed the way I teach, I also decided to change the way I write. Now, 18 months later, you look at the result of that decision. Personally, I like the outcome. It is still about SQL Server Internals, although, it is concise and more practical than any of my previous works. It would give you enough knowledge to detect and address key system issues, reducing the information overload. It will also point you in the right direction if you’d like to learn more. xi
📄 Page 14
This book describes the methodology used by many high-end SQL Server consul‐ tants. You’ll learn how to collect and analyze the data, detecting bottlenecks and inefficiencies. More importantly, I’ll show you how to look at the system holistically and avoid tunnel vision. The content is not SQL Server–version specific. With a few exceptions, it would apply to all versions from SQL Server 2005 to soon-to-be-released SQL Server 2022 and beyond. It also works for managed SQL Server services running in the cloud. Who This Book Is For When people ask me about the target audience of my books, I always say that I write for database professionals. I purposefully use that term—I believe that the line that separates database administrators, database developers, and even application developers is quite thin. It is impossible to be successful in IT nowadays if you limit yourself and don’t expand your area of expertise and responsibilities. It is especially important with the DevOps culture. The teams become the owners of their destinies, developing and maintaining solutions on their own. It becomes common for developers to troubleshoot performance issues that may be caused by the infrastructure or inefficient database code. In the end, if you work with SQL Server in any role—on-premises and in the cloud— this book is for you. I hope that you’ll find useful information regardless of what your job title is. Thank you again for your trust in me and I hope you will enjoy reading it as much as I did while writing it for you! Overview of the Chapters This book consists of 16 chapters structured in the following way: • Chapter 1, “SQL Server Setup and Configuration”, provides several guidelines and best practices on how to choose the hardware and configure SQL Server instances. • Chapter 2, “SQL Server Execution Model and Wait Statistics”, discusses a vital SQL Server component—SQLOS—and introduces you to the common trouble‐ shooting technique called Wait Statistics. This chapter is the cornerstone for the book content. • Chapter 3, “Disk Subsystem Performance”, gives you an overview of how SQL Server works with I/O subsystem and shows you how to analyze and trouble‐ shoot its performance. xii | Preface
📄 Page 15
• Chapter 4, “Inefficient Queries”, talks about a few methods that allow you to detect nonoptimized queries and choose targets for further query tuning. • Chapter 5, “Data Storage and Query Tuning”, explains how SQL Server works with data in the database, and shares the set of query tuning tips and techniques. • Chapter 6, “CPU Load”, discusses most common causes that lead to high CPU load and the ways to mitigate CPU bottlenecks. • Chapter 7, “Memory Issues”, covers memory configuration in SQL Server and shows you how to analyze memory usage and address memory-related issues. • Chapter 8, “Locking, Blocking, and Concurrency”, talks about SQL Server’s con‐ currency model and how to remediate blocking and deadlocks in the system. • Chapter 9, “tempdb Usage and Performance”, discusses tempdb utilization, and configuration best practices. It also provides a few guidelines on the optimal usage of temporary objects and shows how to mitigate common tempdb bottle‐ necks. • Chapter 10, “Latches”, talks about latches in SQL Server. It covers several cases when they may become the problem and the ways to address that. • Chapter 11, “Transaction Log”, provides an overview of how SQL Server works with a transaction log and explains how to deal with common bottlenecks and error conditions. • Chapter 12, “AlwaysOn Availability Groups”, covers the most frequently used SQL Server High Availability technology and common issues you may encounter in that setup. • Chapter 13, “Other Notable Wait Types”, discusses several common wait types that have not been covered in other chapters. • Chapter 14, “Database Schema and Index Analysis”, gives you a few tips on how to detect inefficiencies in database design and also evaluate usage and health of the indexes. • Chapter 15, “SQL Server in Virtualized Environments”, talks about configuration best practices and troubleshooting of virtualized SQL Server instances. • Chapter 16, “SQL Server in the Cloud”, discusses how to configure and use SQL Server in cloud VMs. It also provides an overview of managed SQL Server services available in Microsoft Azure, Amazon AWS, and Google GCP. Each chapter will end with a “Troubleshooting Checklist” that covers the most impor‐ tant troubleshooting steps for the topic covered in the chapter. Finally, use Appendix A, “Wait Types”, as the reference for common wait types and troubleshooting techniques when you encounter them during the analysis. Preface | xiii
📄 Page 16
Conventions Used in This Book The following typographical conventions are used in this book: Italic Indicates new terms, URLs, email addresses, filenames, and file extensions. Constant width Used for program listings, as well as within paragraphs to refer to program elements such as variable or function names, databases, data types, environment variables, statements, and keywords. Constant width bold Shows commands or other text that should be typed literally by the user. Constant width italic Shows text that should be replaced with user-supplied values or by values deter‐ mined by context. This element signifies a tip or suggestion. This element signifies a general note. This element indicates a warning or caution. Using Code Examples Supplemental material (code examples, exercises, etc.) is available for download at https://github.com/aboutsqlserver/code. xiv | Preface
📄 Page 17
1 You can download Azure Data Studio from the Microsoft website. The Troubleshooting Scripts folder provides the set of Azure Data Studio1 note‐ books with troubleshooting and diagnostics scripts I used in the book. You can also find example scripts and applications in the Companion Materials (Books) folder. Unless noted, the scripts would work in all SQL Server versions starting with SQL Server 2005. Although, some dynamic management view columns may be unsuppor‐ ted in the old versions and you’d need to comment them. I am planning to maintain and expand the diagnostics scripts library—check the repo for updates in the future. If you have a technical question or a problem using the code examples, please send email to bookquestions@oreilly.com. This book is here to help you get your job done. In general, if example code is offered with this book, you may use it in your programs and documentation. You do not need to contact us for permission unless you’re reproducing a significant portion of the code. For example, writing a program that uses several chunks of code from this book does not require permission. Selling or distributing examples from O’Reilly books does require permission. Answering a question by citing this book and quoting example code does not require permission. Incorporating a significant amount of example code from this book into your product’s documentation does require permission. We appreciate, but generally do not require, attribution. An attribution usually includes the title, author, publisher, and ISBN. For example: “SQL Server Advanced Troubleshooting and Performance Tuning by Dmitri Korotkevitch (O’Reilly). Copy‐ right 2022 Dmitri Korotkevitch, 978-1-098-10192-3.” If you feel your use of code examples falls outside fair use or the permission given above, feel free to contact us at permissions@oreilly.com. O’Reilly Online Learning For more than 40 years, O’Reilly Media has provided technol‐ ogy and business training, knowledge, and insight to help companies succeed. Our unique network of experts and innovators share their knowledge and expertise through books, articles, and our online learning platform. O’Reilly’s online learning platform gives you on-demand access to live training courses, in-depth learning Preface | xv
📄 Page 18
paths, interactive coding environments, and a vast collection of text and video from O’Reilly and 200+ other publishers. For more information, visit https://oreilly.com. How to Contact Us Please address comments and questions concerning this book to the publisher: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 800-998-9938 (in the United States or Canada) 707-829-0515 (international or local) 707-829-0104 (fax) We have a web page for this book, where we list errata, examples, and any additional information. You can access this page at https://oreil.ly/sql-server-advanced. Email bookquestions@oreilly.com to comment or ask technical questions about this book. For news and information about our books and courses, visit https://oreilly.com. Find us on LinkedIn: https://linkedin.com/company/oreilly-media Follow us on Twitter: https://twitter.com/oreillymedia Watch us on YouTube: https://youtube.com/oreillymedia How to Contact the Author You can email me at dk@aboutsqlserver.com if you have any questions about the book or SQL Server in general. I am always happy to help any way I can. You can also visit my blog at https://aboutsqlserver.com. Now that the book is pub‐ lished, I promise to blog more! Acknowledgments First and as always, I’d like to thank my family for their continuous help and support. Writing gives me the perfect excuse to avoid daily chores. I still don’t understand why I can get away with it! Next, I am enormously grateful to Erland Sommarskog, Thomas Grohser and Uwe Ricken who did a great job reviewing the manuscript. Their contributions dramati‐ cally improved the content, shaping it in its final form. xvi | Preface
📄 Page 19
Erland Sommarskog has worked with SQL Server for thirty years, and been a Micro‐ soft Data Platform MVP since 2001. He works as an independent consultant in Stockholm, Sweden. He is passionate about sharing his knowledge and experience with the community. When he isn’t playing with SQL Server, he plays bridge and enjoys traveling. Thomas Grohser has been an IT professional for over 35 years and a Microsoft Data Platform MVP for 12 years. He has been using SQL Server since 1994 and specializes in architecture and implementation of highly secure, available, recoverable, and per‐ forming databases and their underlying infrastructure. In his spare time, Thomas loves to share the knowledge he gained over the decades with the SQL Server and data platform community by speaking at user groups and conferences all around the world. Uwe Ricken is a Microsoft Data Platform MVP and Microsoft Certified Master (SQL Server 2008) based in Frankfurt, Germany. Uwe has worked with SQL Server since 2007, specializing in database internals, indexing, and database architecture and development. He regularly speaks at various SQL Server conferences and events, and blogs at http://www.sqlmaster.de. Thank you very much, Erland, Thomas and Uwe! I truly enjoyed the ride! Huge thanks to my colleague—Andre Fiano—one of the most knowledgeable infra‐ structure engineers I ever met. I learnt quite a few things from Andre over time, and he also helped me to prepare a few demos used in this book. And, of course, I’d like to thank entire O’Reilly team and especially Sarah Grey, Elizabeth Kelly, Kate Dullea, Kristen Brown, and Audrey Doyle. Thank you for keeping my English sounding plausible and for making the impression that I can draw diagrams! This book is about SQL Server, and I want to thank the Microsoft engineering team for their hard work on the product. I am very anxious to see how it would evolve in the future. Last but not least, I’d like to thank all my #SQLFamily friends for all your support and encouragements! It is a pleasure to write to such a wonderful audience! Thank you, all! Preface | xvii
📄 Page 20
(This page has no text content)
The above is a preview of the first 20 pages. Register to read the complete e-book.

💝 Support Author

0.00
Total Amount (¥)
0
Donation Count

Login to support the author

Login Now
Back to List