SQL Performance troubleshooting guide: A walk through
Hi all,
,
This article gives a high level view of isolating SQL Performance issues and logical approach to troubleshoot them.
SQL Server performance issues can be broadly categorized as:
- Overall Server slowness
- Specific query slowness
If SQL Server overall performance is slow, then we can categorize the issues as below: If SQL Server overall performance is slow, then we can categorize the issues as below:
- CPU/High Memory bottleneck
- IO Bottleneck
- Blocking
- Network bottleneck
- Latch Waits
- SQL Configuration issues
- Capacity limitation
- SQL/Windows known issues
If a specific query is slow, then then the threads executing the query is either in one of the following states:
- Executing/Running
- Waiting
If the query is in executing state and the query execution is slow, the issues can be because of:
- Stale statistics
- High Index/Heap fragmentation
- Bad SQL Execution Plan
- Optimizer timeout
- Long compilations
If the query is in waiting state and the query execution is slow, the issues can be because of:
- IO Bottleneck (PAGE IO Latch/Writelog)
- Blocking
- Network IO/Client Fetch
- Latch Waits
- Resource Semaphore waits
The above walk through is at very high level and refer it as a guide map while troubleshooting performance issues. Based on the bottleneck observed, issue can be drilled further by using dmv's or other troubleshooting tools.
Please share your feedback, questions and/or suggestions.
Thanks,
Don Castelino | Premier Field Engineer | Microsoft
Disclaimer: All posts are provided AS IS with no warranties and confer no rights. Additionally, views expressed here are my own and not those of my employer, Microsoft.
Comments
- Anonymous
August 04, 2018
Very informative, thanks for sharing! - Anonymous
August 05, 2018
Hi,Thanks for share the details.I want to know to how to trouble shoot the network bottleneck issue .Please share with example. It would be very helpful for me.- Anonymous
August 07, 2018
Hi Suresh,To check for network bottleneck issues, you can try the following:1. Collect perfmon and review the network related counters to check if there are any packets getting discarded or not. 2. Check in SQL Server if you are seeing ASYNC_NETWORK_IO waits predominantly. 3. Check the network bandwidth and check the current utilization of the bandwidth to check if network is chocked or not. Again Perfmon has counters which will give current network utilization. 4. Extensive debugging involves collecting netmon/wireshark and checking delay between the network packets sent/received. You can use time delta column in netmon to check the delta between network packets for a specific conversation and check if you see any delay.
- Anonymous