IE2: Immersion Event on Performance Tuning


This 5-day SQL Server training class is focused on the many areas surrounding performance. While we strongly recommend that the IE1: Immersion Event on Internals and Performance should be taken prior to taking this class, this class also stands alone for anyone wanting to focus on some of the most important aspects of performance tuning for SQL Server.

There are many aspects to performance tuning – some should be done when the database is designed, prototyped and tested, while others must be implemented over time. Why can’t you do all of this during design? Data churn varies, user needs change and what the users told you during development often turns out to be untrue; the end result is that workloads change. The key to long term success is being able to understand, recognize and respond to these changes.

In terms of resource troubleshooting, we introduce key concepts that explain how your SQL Server is performing – IO, SQLOS, waits, queues, and inconsistent plans– and explain how to investigate performance issues related to them. We focus on features (many were new for SQL Server 2008 and 2012) that allow better analysis and/or control to constrained and protect critical workloads and perform very in-depth troubleshooting.

Instructors: Paul S. Randal, Kimberly L. Tripp, Jonathan Kehayias, Erin Stellato

Need Help Justifying Training? Here’s a letter to your boss explaining why SQLskills training is worthwhile and a list of community blog posts about our classes.

Please see our Immersion Events Schedule for class dates and our comprehensive Immersion Events FAQ for class costs and other frequently asked questions.


Module 1: SQL Server I/O

Before we talk about how storage works, you need to understand what SQL Server needs. We cover each of SQL Server’s commonly used storage devices (such as data, log, tempdb, and backups) and cover their I/O patterns and trends. For each, we go into detail about how certain kinds of activities change those requirements requirements and how to monitor resource usage using DMVs. Topics covered include:

  • Files, filegroups, and physical DB layout
  • Data: writing, logging, reading, restoring
  • Tempdb: always a special case
  • Basic monitoring

Module 2: I/O Concepts for DBAs

Now that you understand what SQL Server needs from your storage, we can explore the different kinds of storage available to you. Topics covered include:

  • Defining storage terminology
    • IOPS, MB/sec, Latency
  • Magnetic vs. Solid-State Drives (SSDs)
  • RAID configurations
  • Mount points
  • Partition alignment
  • Testing with SQLIO and IOMeter
  • Direct-attached storage
    • Traditional vs. PCI-Express drives

Module 3: I/O – Storage Area Networks for DBAs

Shared storage makes things a lot more complicated, but we demystify the black box. We cover each of the major SAN components, explain how it affects SQL Server performance, and show how to get the right configurations from your SAN administrators. Topics covered include:

  • SAN components
  • Multipathing
  • iSCSI vs. fibre channel (FC)
  • Shared vs. dedicated arrays
  • Cache (on the drives, SAN controller, RAID controller, and Windows)
  • Clustering
  • Appendix: snapshot backups (SAN, not SQL)

Module 4: SQLOS Scheduling and CPU Performance Tuning

SQLOS helps SQL Server perform by managing queries, internal jobs, the buffer pool, and many other shared resources. We discuss how SQL Server interacts with Windows and the underlying hardware, and how you may need to tweak it in order to really push the scaling limits. Topics covered include:

  • Understanding Windows scheduling
  • Server hardware and NUMA
  • CPU scheduling under SQLOS
  • DMV monitoring
  • Troubleshooting CPU performance issues
  • Using Resource Governor to limit CPU usage

Module 5: Data Collection and Baselining

One of the fundamentals of performance tuning is being able to tell how performance has changed from a known point, and also what your system is capable of. This module will show techniques for load testing and creating a baseline. While using Profiler is an expected skill coming into this class, Profiler will still be discussed for some of its more advanced uses including server-side trace queues, automating traces through jobs, Transact-SQL and Performance Monitor counter thresholds as well as collecting the “RIGHT” data for analysis.

In addition to benchmarking and baselining, it is also important to know how to collect performance data on an ongoing basis. SQL Server 2008 and 2012 offer different options for collecting this data, which we discuss in this module. Also important is knowing how to use the data you collect it and analyze it. Therefore we also spend some time looking at some of the secondary tools that can be used to analyze collected data. Topics covered include:

  • Benchmark vs. baseline
  • Data collection methods and tools
    • Performance Monitor and Collector Sets
      • PAL tool (Performance Analysis of Logs)
    • SQL Trace
    • Analyzing Trace data
    • SQLDiag
    • SQLNexus
    • Distributed Replay Utility (DRU)

Module 6: Extended Events

Extended events are a powerful way to look deeply into the internals of SQL Server without compromising performance, but there is a bit of a learning curve to extracting and analyzing the information. This module introduces Extended Events and shows the T-SQL used to control them. The 2012 UI and 2012-specific topics are discussed in a later module. Topics covered include:

  • Profiler vs. Extended Events
  • Extended Events core concepts
  • Event session basics
  • Event execution lifecycle
  • Event targets
  • Extended Events UI
  • Appendix

Module 7: Wait and Latch Statistics

The Waits and Queues performance tuning methodology is one of the cornerstones of investigating performance issues with SQL Server. SQL Server knows what it is waiting for, so ask it and then figure out what else in the system to investigate. This module will cover the methodology, common wait patterns and what they mean, as well as some deeper investigative techniques. Topics covered include:

  • Introduction
  • Thread lifecycle
  • DMVs
  • Common wait types
  • Demos

Module 8: Query Plan Analysis

Once you’ve identified a query or batch that is associated with a performance issue, you’ll want to look at the query execution plan and see if there are ways that you can address the problem (or problems). Topics covered include:

  • Why look at query plans?
  • How to capture  query plans
  • How to analyze query plans
  • Understanding common operators
  • Know which plan patterns to watch for and investigate further

Module 9: Plan Cache and Index Analysis

SQL Server contains a plethora of DMVs for gaining insight into what’s happening (and happened) on the system. In this module we investigate the most useful DMVs and show you their practical application. Topics covered include:

  • Part I: Understanding/analyzing plan cache
  • Part II: What’s in the plan cache?
  • Part III: Understanding/optimizing stored procedures
  • Part IV: A cautionary tale about scalar functions
  • Part V: Index analysis

Module 4: SQLOS Memory Management and Memory Performance Tuning

SQLOS helps SQL Server perform by managing queries, internal jobs, the buffer pool, and many other shared resources. We discuss how SQL Server interacts with Windows and the underlying hardware, and how you may need to tweak it in order to really push the scaling limits. Topics covered include:

  • SQLOS Memory Manager
  • SQLOS memory components
  • Configuration options for SQL Server
  • How to identify memory issues
  • Internal memory pressure
  • External memory pressure
  • Virtual address space issues
  • Resource semaphores
  • DBCC commands

Module 11: Deadlock Analysis

While troubleshooting deadlocking in SQL Server has gotten easier in recent versions, it continues to be a constant source of problems. This module will look at the most common deadlocks and how to troubleshoot them using the various methods available to DBAs. Topics covered include:

  • Review of locking in SQL Server
  • What is a deadlock (reminder)
  • Collecting deadlock graphs
  • Anatomy of a deadlock
  • Reading deadlock graphs
  • Resolving deadlocks

Module 12: Performance Issue Patterns

This module draws together all the methodologies presented so far to debug a variety of performance problems live and interactively with the class.

Module 13: Advanced Extended Events

This module presents the 2012 Extended Events UI and how to use it, plus some very advanced troubleshooting scenarios that can only be performed using Extended Events. Topics covered include:

  • SQL Server 2012 Extended Events UI
  • Extended Events advanced troubleshooting


If you have any questions, please contact us.