Tài liệu SQL Server 2012 Query Performance Tuning pptx

521 9.3K 4
Tài liệu SQL Server 2012 Query Performance Tuning pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

For your convenience Apress has placed some of the front matter material after the index. Please use the Bookmarks and Contents at a Glance links to access them. SQL Server 2012 Query Performance Tuning Grant Fritchey iii Contents at a Glance About the Author xxiii About the Technical Reviewer xxv Acknowledgments xxvII Introduction xxix Chapter 1: SQL Query Performance Tuning ■ 1 Chapter 2: System Performance Analysis ■ 15 Chapter 3: SQL Query Performance Analysis ■ 59 Chapter 4: Index Analysis ■ 99 Chapter 5: Database Engine Tuning Advisor ■ 149 Chapter 6: Lookup Analysis ■ 163 Chapter 7: Statistics Analysis ■ 175 Chapter 8: Fragmentation Analysis ■ 211 Chapter 9: Execution Plan Cache Analysis ■ 241 Chapter 10: Query Recompilation ■ 281 Chapter 11: Query Design Analysis ■ 313 Chapter 12: Blocking Analysis ■ 349 Chapter 13: Deadlock Analysis ■ 393 ■ Contents at a GlanCe iv Chapter 14: Cursor Cost Analysis ■ 407 Chapter 15: Database Performance Testing ■ 429 Chapter 16: Database Workload Optimization ■ 437 Chapter 17: SQL Server Optimization Checklist ■ 469 Index 489 xxix Introduction Performance is frequently one of the last things on peoples’ minds when they’re developing a system. Unfortunately, that means it usually becomes the biggest problem after that system goes to production. You can’t simply rely on getting a phone call that tells you that procedure X on database Y that runs on server Z is running slow. You have to have a mechanism in place to find this information for yourself. You also can’t work o the general word slow. Slow compared to what? Last week? Last month? e way it ran in development? And once you’ve identified something as running slow, you need to identify why. Does it need an index? Does it have an index that it isn’t using? Is it the CPU, the disk, the memory, the number of users, the amount of data? And now you’ve identified what and why, you have to do something about it. How? Rewrite the query? Change the WHERE clause? e questions that will come your way when you start performance tuning are endless. is book provides you with the tools you need to answer those questions. I’ll show you how to set up mechanisms for collecting performance metrics on your server for the SQL Server instances and databases living there. I’ll go over the more tactical methods of collecting data on individual T-SQL calls. Along the way, I’ll be discussing index structure, choice, and maintenance; how best to write your T-SQL code; how to test that code; and a whole slew of other topics. One of my goals when writing this book was to deliver all these things using examples that resemble the types of queries you’ll see in the real world. e tools and methods presented are mostly available with SQL Server Standard Edition, although some are available only with SQL Server Enterprise Edition. ese are called out whenever you might encounter them. Almost all the tuning advice in the book is directly applicable to SQL Azure, as well as to the more earthbound SQL Server 2012. e main point is to learn how to answer all those questions that are going to be presented to you. is book gives you the tools to do that and to answer those questions in a methodical manner that eliminates much of the guesswork that is so common in performance optimization today. Performance problems aren’t something to be feared. With the right tools, you can tackle performance problems with a calmness and reliability that will earn the respect of your peers and your clients and that will contribute directly to their success. Who This Book Is For is book is for just about anyone responsible for the performance of the system. Database administrators, certainly, are targeted because they’re responsible for setting up the systems, creating the infrastructure, and monitoring it over time. Developers are, too, because who else is going to generate all the well-formed and highly performant T-SQL code? Database developers, more than anyone, are the target audience, if only because that’s what I do for work. Anyone who has the capability to write T-SQL, design tables, implement indexes, or manipulate server settings on the SQL Server system is going to need this information to one degree or another. How This Book Is Structured e purpose of this book was to use as many “real-looking” queries as possible. To do this, I needed a “real” database. I could have created one and forced everyone to track down the download. Instead, I chose to use the sample database created by Microsoft, called AdventureWorks2008R2. is is available through CodePlex (http://www.codeplex.com/MSFTDBProdSamples). I suggest keeping a copy of the restore handy and resetting ■ IntroduCtIon xxx your sample database after you have read a couple of topics from the book. Microsoft updates these databases over time, so you might see dierent sets of data or dierent behavior with some of the queries than what is listed in this book. But, I stuck with the older version because it’s likely to be a little more stable. To a degree, this book builds on the knowledge presented from previous chapters. However, most of the chapters present information unique within that topic, so it is possible for you to jump in and out of particular chapters. You will still receive the most benefit by a sequential reading of Chapter 1 through Chapter 17. • Chapter 1: “SQL Query Performance Tuning” introduces the iterative process of performance tuning. You’ll get a first glimpse at establishing a performance baseline, identifying bottlenecks, resolving the problems, and quantifying the improvements. • Chapter 2: “System Performance Analysis” starts you o with monitoring the Windows system on which SQL Server runs. Performance Monitor and Dynamic Management Objects are shown as a mechanism for collecting data. • Chapter 3: “SQL Query Performance Analysis” defines the best ways to look “under the hood” and see what kinds of queries are being run on your system. It provides a detailed look at the new Extended Events tools. Several of the most useful dynamic management views and functions used to monitor queries are first identified in this chapter. • Chapter 4: “Index Analysis” explains indexes and index architecture. It defines the dierences between clustered and nonclustered indexes. It shows which types of indexes work best with dierent types of querying. Basic index maintenance is also introduced. • Chapter 5: “Database Engine Tuning Advisor” covers the Microsoft tool Database Engine Tuning Advisor. e chapter goes over in detail how to use the Database Engine Tuning Advisor; you’re introduced to the various mechanisms for calling the tool and shown how it works under real loads. • Chapter 6: “Lookup Analysis” takes on the classic performance problem, the key lookup, which is also known as the bookmark lookup. is chapter explores various solutions to the lookup operation. • Chapter 7: “Statistics Analysis” introduces the concept of statistics. e optimizer uses statistics to make decisions regarding the execution of the query. Maintaining statistics, understanding how they’re stored, learning how they work, and learning how they aect your queries are all topics covered within this chapter. • Chapter 8: “Fragmentation Analysis” shows how indexes fragment over time. You’ll learn how to identify when an index is fragmented. You’ll also see what happens to your queries as indexes fragment, and you’ll learn mechanisms to eliminate index fragmentation. • Chapter 9: “Execution Plan Cache Analysis” presents the mechanisms that SQL Server uses to store execution plans. Plan reuse is an important concept within SQL Server. You’ll learn how to identify whether plans are being reused. You’ll get various mechanisms for looking at the cache. is chapter also introduces dynamic management views that allow excellent access to the cache. • Chapter 10: “Query Recompilation” displays how and when SQL Server will recompile plans that were stored in cache. You’ll learn how plan recompiles can hurt or help the performance of your system. You’ll pick up mechanisms for forcing a recompile and for preventing one. ■ IntroduCtIon xxxi • Chapter 11: “Query Design Analysis” reveals how to write queries that perform well within your system. Common mistakes are explored, and solutions are provided. You’ll learn several best practices to avoid common bottlenecks. • Chapter 12: “Blocking Analysis” teaches the best ways to recognize when various sessions on your server are in contention for resources. You’ll learn how to monitor for blocking along with methods and techniques to avoid blocked sessions. • Chapter 13: “Deadlock Analysis” shows how deadlocks occur on your system. You’ll get methods for identifying sessions involved with deadlocks. e chapter also presents best practices for avoiding deadlocks or fixing your code if deadlocks are already occurring. • Chapter 14: “Cursor Cost Analysis” diagrams the inherent costs that cursors present to set-oriented T-SQL code. However, when cursors are unavoidable, you need to understand how they work, what they do, and how best to tune them within your environment if eliminating them outright is not an option. • Chapter 15: “Database Performance Testing” provides you with mechanisms to replicate the performance of your production system onto test systems in order to help you validate that the changes you’ve introduced to your queries really are helpful. You’ll be using the Distributed Replay utility, introduced in SQL Server 2012, along with all the other tools you’ve been using throughout the book. • Chapter 16: “Database Workload Optimization” demonstrates how to take the information presented in all the previous chapters and put it to work on a real database workload. You’ll identify the worst-performing procedures and put them through various tuning methods to arrive at better performance. • Chapter 17: “SQL Server Optimization Checklist” summarizes all the preceding chapters into a set of checklists and best practices. e goal of the chapter is to enable you to have a place for quickly reviewing all you have learned from the rest of the book. Downloading the code You can download the code examples used in this book from the Source Code section of the Apress website (http://www.apress.co). Most of the code is straight T-SQL stored in a .sql file, which can be opened and used in any SQL Server T-SQL editing tool. ere are a couple of PowerShell scripts that will have to be run through a PowerShell command line. Contacting the Author You can contact the author, Grant Fritchey, at grant@scarydba.com. You can visit his blog at http://scarydba.com. 1 Chapter 1 SQL Query Performance Tuning Query performance tuning remains an important part of today’s database applications. Yes, hardware performance is constantly improving. Upgrades to SQL Server—especially to the optimizer, which helps determine how a query is executed, and the query engine, which executes the query—lead to better performance all on their own. Many systems are moving into the cloud where certain aspects of the systems are managed for you. Despite all this, query performance tuning remains a vital mechanism for improving the performance of your database management systems. e beauty of query performance tuning is that, in many cases, a small change to an index or a SQL query can result in a far more efficient application at a very low cost. In those cases, the increase in performance can be orders of magnitude better than that oered by an incrementally faster CPU or a slightly better optimizer. ere are, however, many pitfalls for the unwary. As a result, a proven process is required to ensure that you correctly identify and resolve performance bottlenecks. To whet your appetite for the types of topics essential to honing your query optimization skills, the following is a quick list of the query optimization aspects I cover in this book: Identifying problematic SQL queries• Analyzing a query execution plan• Evaluating the eectiveness of the current indexes• Avoiding bookmark lookups• Evaluating the eectiveness of the current statistics• Analyzing and resolving fragmentation• Optimizing execution plan caching• Analyzing and avoiding stored procedure recompilation• Minimizing blocking and deadlocks• Analyzing the eectiveness of cursor use• Applying performance-tuning processes, tools, and optimization techniques to optimize • SQL workload Before jumping straight into these topics, let’s first examine why we go about performance tuning the way we do. In this chapter, I discuss the basic concepts of performance tuning for a SQL Server database system. It’s important to have a process you follow in order to be able to find and identify performance problems, fix those CHAPTER 1 ■ SQL QUERY PERFORMANCE TUNING 2 problems, and document the improvements that you’ve made. Without a well-structured process, you’re going to be stabbing the dark, hoping to hit a target. I detail the main performance bottlenecks and show just how important it is to design a database-friendly application, which is the consumer of the data, as well as how to optimize the database. Specifically, I cover the following topics: e performance tuning process• Performance vs. price• e performance baseline• Where to focus eorts in tuning• e top 13 SQL Server performance killers• What I don’t cover within these pages could fill a number of other books. e focus of this book is on TSQL query performance tuning, as the title says. But, just so we’re clear, there will be no coverage of the following: Hardware choices• Application coding methodologies• Server configuration (except where it impacts query tuning)• SQL Server Integration Services• SQL Server Analysis Services• SQL Server Reporting Services• PowerShell• The Performance Tuning Process e performance tuning process consists of identifying performance bottlenecks, prioritizing the issues, troubleshooting their causes, applying dierent resolutions, and quantifying performance improvements—and then repeating the whole process again and again. It is necessary to be a little creative, since most of the time there is no one silver bullet to improve performance. e challenge is to narrow down the list of possible causes and evaluate the eects of dierent resolutions. You can even undo modifications as you iterate through the tuning process. e Core Process During the tuning process, you must examine various hardware and software factors that can aect the performance of a SQL Server-based application. You should be asking yourself the following general questions during the performance analysis: Is any other resource-intensive application running on the same server?• Is the capacity of the hardware subsystem capable of withstanding the maximum • workload? Is SQL Server configured properly?• Is the database connection between SQL Server and the database application efficient?• [...]... resource usage and performance of query Query performance improved? No Undo the change No Have more optimization techniques? Yes Query performance acceptable? Yes Costliest query optimized Yes No Have more costly steps? Yes No Costliest query cannot be optimized Figure 1-2 Optimization of the costliest query 7 CHAPTER 1 ■ SQL Query Performance Tuning “Good Enough” Tuning Instead of tuning a system to... 5 CHAPTER 1 ■ SQL Query Performance Tuning Set performance target for application Analyze application performance Poor performance? No Yes Identity resource bottlenecks Ensure proper configuration for hardware, operating system, SQL Server, and database Identify costliest query associated with bottleneck Optimize query No Application performance acceptable? Yes Figure 1-1 Performance tuning process... CHAPTER 2 ■ System Performance Analysis Figure 2-4 SQL Server memory configuration properties the same server as SQL Server, but if you must, I recommend you first get estimates on how much memory is needed by other applications and then configure SQL Server with a max server memory value set to prevent the other applications from starving SQL Server of memory On a system where SQL Server is running on... willing to consume Total Server Memory (KB) indicates the amount of memory currently assigned to SQL Server The Total Server Memory (KB) counter value can be very high if the system is dedicated to SQL Server If Total Server Memory (KB) is much less than Target Server Memory (KB), then either the SQL Server memory requirement is low, the max server memory configuration parameter of SQL Server is set at too... usually the largest portion of SQL Server memory SQL Server manages memory by growing or shrinking its memory pool size dynamically You can configure SQL Server for dynamic memory management in SQL Server Management Studio (SSMS) Go to the Memory folder of the Server Properties dialog box, as shown in Figure 2-3 19 CHAPTER 2 ■ System Performance Analysis Figure 2-3 SQL Server memory configuration The... using Performance Monitor • How to retrieve Performance Monitor data within SQL Server using dynamic management views • How to resolve hardware resource bottlenecks • How to analyze the overall performance of SQL Server • Considerations for monitoring virtual machines • How to create a baseline for the system Performance Monitor Tool Windows Server 2008 provides a tool called Performance Monitor Performance. .. particularly true for a system running SQL Server When SQL Server runs out of cache (or memory), a process within SQL Server (called lazy writer) has to work extensively to maintain enough free internal memory pages within SQL Server This consumes extra CPU cycles and performs additional physical disk I/O to write memory pages back to disk The good news is that SQL Server 2012 has changed memory management... acceptable? Yes Figure 1-1 Performance tuning process 6 Application performance may change over time CHAPTER 1 ■ SQL Query Performance Tuning Baseline performance and resource usage of costliest query Set performance target for costliest query Analyze and optimize factors (such as statistics and fragmentation) that influence query execution Analyze query execution plan Analyze and priotize costly steps in execution... connectivity between SQL Server and the database application can hurt application performance One of the questions you should ask yourself is, How good is the database connection? For example, the query executed by the application may be highly optimized, but the database connection used to submit this query may 3 CHAPTER 1 ■ SQL QuERy PERfoRmAnCE Tuning add considerable overhead to the query performance Ensuring... one of the biggest performance killers in SQL Server In the absence of proper indexing for a query, SQL Server has to retrieve and process much more data while executing the query This causes high amounts of stress on the disk, memory, and CPU, increasing the query execution time significantly Increased query execution time then can lead to excessive blocking and deadlocks in SQL Server You will learn . methodologies• Server configuration (except where it impacts query tuning) • SQL Server Integration Services• SQL Server Analysis Services• SQL Server Reporting. acceptable? No Figure 1-1. Performance tuning process CHAPTER 1 ■ SQL QUERY PERFORMANCE TUNING 7 Baseline performance and resource usage of costliest query. Set performance

Ngày đăng: 12/02/2014, 12:20

Từ khóa liên quan

Mục lục

  • 9781430242031_OnlineFM_O.pdf

    • Who This Book Is For

    • How This Book Is Structured

    • Downloading the code

    • Chapter 1: SQL Query Performance Tuning

      • The Performance Tuning Process

        • The Core Process

        • Iterating the Process

        • Performance vs. Price

          • Performance Targets

          • “Good Enough” Tuning

          • Performance Baseline

          • Where to Focus Efforts

          • SQL Server Performance Killers

            • Poor Indexing

            • Inaccurate Statistics

            • Poor Query Design

            • Poor Execution Plans

            • Excessive Blocking and Deadlocks

            • Non-Set-Based Operations

            • Poor Database Design

            • Excessive Fragmentation

            • Nonreusable Execution Plans

            • Frequent Recompilation of Queries

            • Improper Use of Cursors

Tài liệu cùng người dùng

Tài liệu liên quan