Diagnosing Performance with Wait Statistics Robert L Davis Principal Database
Robert L Davis Principal Database Architect at DB Best Technologies Greater Seattle Area | Information Technology and Services Past: Blog: Twitter: LinkedIN: Principal DBA at Outerwall, Inc. P.M. SQL Server Master Certification Program at Microsoft Sr. Database Administrator at Microsoft
Diagnosing Performance with Wait Statistics “Find the problem, FIX IT. Identify another problem, FIX IT. Repeat as necessary.” ~ Keenan Thompson (Saturday Night Live)
Diagnosing Performance with Wait Statistics Medical approach to troubleshooting
Diagnosing Performance with Wait Statistics Medical approach to troubleshooting Baseline vital statistics Performance counters DMV stats
Diagnosing Performance with Wait Statistics Medical approach to troubleshooting Baseline vital statistics Performance counters DMV stats Recheck vital statistics and compare
Diagnosing Performance with Wait Statistics Medical approach to troubleshooting Baseline vital statistics Performance counters DMV stats Recheck vital statistics and compare Find deviations from the norm
Diagnosing Performance with Wait Statistics Medical approach to troubleshooting Baseline vital statistics Performance counters DMV stats Recheck vital statistics and compare Find deviations from the norm Read more:
Diagnosing Performance with Wait Statistics Baseline for Performance
Diagnosing Performance with Wait Statistics Baseline for Performance Processor(*)\% Processor Time PhysicalDisk\Avg. Disk sec/Read PhysicalDisk\Avg. Disk sec/Write Memory\Pages/sec Memory\Available Bytes SQLServer:Buffer Manager\Page life expectancy SQLServer:GeneralStatistics\Processes Blocked SQLServer:Access Methods\Full Scans/sec SQLServer:SQL Statistics\Batch requests/sec SQLServer:Buffer Manager\Lazy writes/sec SQLServer:Buffer Manager\Buffer Cache Hit Ratio SQLServer:Databases (*)\Transactions/sec
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries Wait statistics
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries Wait statistics sys.dm_os_wait_stats sys.dm_os_waiting_tasks sys.dm_exec_requests sys.dm_exec_sessions sys.dm_exec_query_plan() sys.dm_exec_sql_text()
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_wait_stats
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_wait_stats Cumulative since last restart or reset
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_wait_stats Cumulative since last restart or reset DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR);
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_wait_stats Cumulative since last restart or reset DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR); Total waits on server
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_wait_stats Cumulative since last restart or reset DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR); Total waits on server Take a delta to see how they are changing
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_wait_stats Cumulative since last restart or reset DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR); Total waits on server Take a delta to see how they are changing signal_wait_time_ms Time from when the waiting task has its resource until it starts running Waiting on CPU thread
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_waiting_tasks
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_waiting_tasks Tasks currently waiting on a resource
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_waiting_tasks Tasks currently waiting on a resource wait_duration_ms
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_waiting_tasks Tasks currently waiting on a resource wait_duration_ms wait_type
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_waiting_tasks Tasks currently waiting on a resource wait_duration_ms wait_type blocking_session_id
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_os_waiting_tasks Tasks currently waiting on a resource wait_duration_ms wait_type blocking_session_id resource_description
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_exec_requests
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_exec_requests Currently active requests Shows wait stats too! session_id request_id – for parallel tasks start_time status – suspended = waiting command database_id blocking_session_id wait_type wait_time last_wait_type – if not currently waiting wait_resource
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_exec_sessions
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_exec_sessions Currently active sessions Shows client connection info Not all sessions have a request Has some performance stats cumulative over all requests for the entire session program_name is_user_process
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_exec_query_plan() Query plan from cache Requires plan_handle
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries sys.dm_exec_query_plan() Query plan from cache Requires plan_handle sys.dm_exec_sql_text() SQL text from cache Requires sql_handle or plan_handle Provides offset values to identify the currently executing statement in a batch
Diagnosing Performance with Wait Statistics SOS_SCHEDULER_YIELD
Diagnosing Performance with Wait Statistics SOS_SCHEDULER_YIELD SOS: SQLOS
Diagnosing Performance with Wait Statistics SOS_SCHEDULER_YIELD SOS: SQLOS SCHEDULER: manages worker threads onto CPU threads
Diagnosing Performance with Wait Statistics SOS_SCHEDULER_YIELD SOS: SQLOS SCHEDULER: manages worker threads onto CPU threads YIELD: Giving way to another
Diagnosing Performance with Wait Statistics SOS_SCHEDULER_YIELD SOS: SQLOS SCHEDULER: manages worker threads onto CPU threads YIELD: Giving way to another Waiting for another worker thread to yield the CPU thread
Diagnosing Performance with Wait Statistics PAGE_LATCH / PAGE_IO_LATCH
Diagnosing Performance with Wait Statistics PAGE_LATCH / PAGE_IO_LATCH PAGE: unit of data storage in SQL Server
Diagnosing Performance with Wait Statistics PAGE_LATCH / PAGE_IO_LATCH PAGE: unit of data storage in SQL Server IO: reading (I) and writing (O), in this case disk IO
Diagnosing Performance with Wait Statistics PAGE_LATCH / PAGE_IO_LATCH PAGE: unit of data storage in SQL Server IO: reading (I) and writing (O), in this case disk IO LATCH: Lightweight locking mechanism
Diagnosing Performance with Wait Statistics PAGE_LATCH / PAGE_IO_LATCH PAGE: unit of data storage in SQL Server IO: reading (I) and writing (O), in this case disk IO LATCH: Lightweight locking mechanism Waiting for a latch on a page in memory or a page on disk
Diagnosing Performance with Wait Statistics CXPACKET
Diagnosing Performance with Wait Statistics CXPACKET CX: Communication eXchange
Diagnosing Performance with Wait Statistics CXPACKET CX: Communication eXchange PACKET: unit of communication
Diagnosing Performance with Wait Statistics CXPACKET CX: Communication eXchange PACKET: unit of communication Parallelism is occurring
Diagnosing Performance with Wait Statistics NETWORK_IO
Diagnosing Performance with Wait Statistics NETWORK_IO NETWORK: External communication
Diagnosing Performance with Wait Statistics NETWORK_IO NETWORK: External communication IO: Reading (I) and writing (O)
Diagnosing Performance with Wait Statistics NETWORK_IO NETWORK: External communication IO: Reading (I) and writing (O) SQL is writing faster than the client is reading
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_xxxxx
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_xxxxx PREEMPTIVE: Non-yielding
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_xxxxx PREEMPTIVE: Non-yielding OS: Operating System
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_xxxxx PREEMPTIVE: Non-yielding OS: Operating System xxxxx: The OS operation or API being called Non-yielding shell out to the Operating System
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_AUTHENTICATIONOPS
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_AUTHENTICATIONOPS PREEMPTIVE: Non-yielding OS: Operating System
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_AUTHENTICATIONOPS PREEMPTIVE: Non-yielding OS: Operating System AUTHENTICATIONOPS: The OS operation or API being called
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_AUTHENTICATIONOPS PREEMPTIVE: Non-yielding OS: Operating System AUTHENTICATIONOPS: The OS operation or API being called, a group of API calls related to authentication
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_AUTHENTICATIONOPS PREEMPTIVE: Non-yielding OS: Operating System AUTHENTICATIONOPS: The OS operation or API being called, a group of API calls related to authentication Non-yielding shell out to the OS to perform authentication operations
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_VERIFYSIGNATURE
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_VERIFYSIGNATURE PREEMPTIVE: Non-yielding OS: Operating System VERIFYSIGNATURE: The OS operation or API being called
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_VERIFYSIGNATURE PREEMPTIVE: Non-yielding OS: Operating System VERIFYSIGNATURE: The OS operation or API being called Let’s Look it Up
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_VERIFYSIGNATURE PREEMPTIVE: Non-yielding OS: Operating System VERIFYSIGNATURE: The OS operation or API being called Verifies if a digital signature matches the signature used to encrypt data
Diagnosing Performance with Wait Statistics PREEMPTIVE_OS_VERIFYSIGNATURE PREEMPTIVE: Non-yielding OS: Operating System VERIFYSIGNATURE: The OS operation or API being called Let’s Look it Up
Diagnosing Performance with Wait Statistics Troubleshooting Slow Queries
Diagnosing Performance with Wait Statistics Resources optimization optimization
Diagnosing Performance with Wait Statistics
Thanks! Thank you for coming! My blog: Twitter: twitter.com/SQLSoldiertwitter.com/SQLSoldier Engage me on your project: