3. CPU
What can lead to high CPU usage?
• excessive compilation / recompilation
sys.dm_exec_query_optimizer_info
– statistics changes
– unparametrized queries
alter database {} set parameterization forced
Oracle equivalent: cursor_sharing=force
• hash / sort operators
sys.dm_db_task_space_usage
Oracle equivalent: v$sort_usage
• queries that consume cpu time
sys.dm_exec_query_stats
Oracle equivalent: v$sqlstats
• 3rd party applications / services on db server
4. CPU Tip
• How to compute the CPU % per request?
sys.dm_os_threads
5. Memory
What can lead to high memory usage or memory pressure?
• Large table / index scans
• Large sorts
• Cached plans for unparametrized queries
• High value for OS available memory
• Memory leaks
• 3rd party applications / services on db server
8. I/O
What can lead to I/O bottlenecks?
• Missing indexes
• Full Table Scan / Clustered Index Scan
• Memory pressure
• Large sort operations placed on tempdb
• Poor storage infrastructure / IO subsystem
• high values for read/write latency
• Partitions not being aligned
• 3rd party applications / services on db server
9. I/O Tip
• How to find the HoBT on which sessions are waiting?
sys.dm_os_waiting_tasks
• Identify on what is page on what the transaction is currently waiting
• get page details
• query for object name
10. Network
What can lead to network bottlenecks?
• Mirroring (High Safety Mode)
• Network card / driver
– Check ProcessorInterruptsSec counter
• Network infrastructure
– switches, routers, firewalls
– Bandwidth
• DoS
11. tempdb
What can lead to tempdb bottlenecks?
sys.dm_db_file_space_usage
• Memory pressure
• temporary user tables
• Large sorts runs / work files for hash join
• Version store size
• Improper number of files
– not 1 file / cpu core, sometime it is too much (16 cores -> 16 files?!)
– SGAM, GAM, PFS contention
– Round robin allocation mechanism
12. Parallelism
Up to what level parallelism is good?
• DOP gives the number of threads per parallel operator
– 0 (default) means CPU count
– I’ve seen queries running with 81, 73, 58 threads on an 8 CPUs machine
• Too many threads
– Low CPU usage
– High values of CXPACKET
– High values of Context Switches
– Spinlocks
13. Slow running queries
Knowing about resources, what make a query slow?
• Improper statistics, leading to improper execution plan
Nested loops vs. hash join
• Improper join/filter conditions, leading to huge /very low cardinality
estimations
Histograms in SQL Server 2000/2005/2008 are only built for a single column—the first column in the set of key columns of
the statistics object.
• Missing indexes
sys.dm_db_missing_index_groups mig / sys.dm_db_missing_index_group_stats / sys.dm_db_missing_index_details
• Too many threads open
• Waits (I/O, memory, CPU, locks)
sys.dm_os_waiting_tasks
• and many, many others
14. SQL Profiler - demo
• Hopefully, it will work
Remember Windows 95 presentation?