which query - SQL Sentry

Report
SQL SERVER QUERY
TUNING BEST PRACTICES
Aaron Bertrand
SQL Sentry, Senior Consultant
@AaronBertrand
Kevin Kline
SQL Sentry, Dir of Engineering Services
@KEKline
NEW eBOOK
AVAILABLE!
We’re giving away
3 Rookie Experience packages and 3 Ride Along packages
from the Richard Petty Driving Experience at Charlotte Motor
Speedway on October 18, 2013.
AGENDA
•
•
•
•
•
•
Introducing Your Speakers
A Query Tuning Methodology – Kevin
Measuring Query Performance – Kevin
Query Tuning Patterns & Anti-Patterns – Aaron
Follow Up
Prizes!
MEAT-HEAD-OLOGY 
Configure the test environment
• Take initial measurements
Run the test
• Take comparative measurements
Assess the findings
• Know what to look for.
TEST ENVIRONMENT
• Your query test harness should include some stuff.
• Code to clear the caches: *
o DBCC [FreeProcCache | FreeSystemCache |
FlushProcInDB(<dbid>) ]
o DBCC DropCleanBuffers
• Code to set measurements:
o SET STATISTICS TIME
o SET STATISTICS IO
o SET SHOWPLAN [TEXT | XML]
• Code for Dynamic Management Views (DMV) checks.
o
System info – sys.dm_os_performance_counters and
o
Yeah, ok. But which query DMVs?
sys.os_wait_stats
PERIODIC TABLE OF SQL SERVER DYNAMIC MANAGEMENT OBJECTS
DM_OS_WAIT_STATS
• “The Waiting is the Hardest Part”.
• Bottlenecks.
• Caveats for Relying on Wait Stats.
• Querying methodology around “The” Wait Stats
DMV.
DM_EXEC_QUERY_STATS
• Query Performance Information
• System Resource Consumption:
o CPU
o Memory
o IO
DM_DB_INDEX_USAGE_STATS
• Reads by scans, seeks, lookups for both system and user
activity.
• Writes for both system and user activity.
• Returns results for all databases, indexes so refine with
predicates.
DM_IO_VIRTUAL_FILE_STATS
• IO activity breakdown for each SQL data and log file on the
instance.
• Provides file size information too.
• It’s a function (DMF) so you must pass those parameters in!
DM_EXEC_REQUESTS
• Active requests being serviced.
• What users are doing on your instance.
DEMO!
• Usually requires additional info from
dm_exec_sessions and the SQLOS DMOs.
ASSESSING THE FINDINGS
• Red Flags Query Operators:
o
o
o
o
Lookups
Scans
Spools
Parallelism Operations
• Red Flags Elsewhere:
o
o
o
o
o
Dissimilar estimated versus actual row counts
High physical reads
Missing statistics alarms
Large sort operations
Implicit data type conversions
• Using live demo, we’ll show you patterns to use and antipatterns to beware.
PATTERNS AND ANTI-PATTERNS
•
•
•
•
•
•
•
•
•
•
WHERE IN versus WHERE EXISTS
UNION versus UNION ALL
WHERE {NOT IN | EXISTS} versus LEFT JOIN
Tuning for SELECT versus INSERT, UPDATE, and DELETE
Compound index columns
TEASE!
Covering indexes
The Transitive Property
Queries with IN (…) or OR
Queries with LIKE ‘%’
Functions and calculations in WHERE or JOIN
DEMOS: DEFAULT CURSORS
• Cursors are usually unnecessary, but when they are, use the
right options
• The defaults are heavy-handed and guaranteed to be slow
• Blog post: http://bit.ly/AB-cursors
DEMOS: CORRELATED SUBQUERIES
• Coercing SQL Server to evaluate multiple times
• Think about converting these to joins
• Gives the optimizer a fighting chance
DEMOS: NOT IN
• Dangerous if source column is NULLable
• LEFT OUTER JOIN is not always a good alternative
• NOT EXISTS and EXCEPT are better (but can behave
differently)
• Blog post: http://bit.ly/AB-NOTIN
FOLLOW UP
1. Engage with our community: SQL Sentry on
Facebook, SQLSentry.Net, SQLPerformance.com.
2. Share your tough SQL Server problems with us:
http://answers.sqlperformance.net
3. Download SQL Sentry Plan Explorer for free:
http://www.sqlsentry.net/plan-explorer/sql-serverquery-view.asp
4. Check out our other award winning tools:
http://www.sqlsentry.net/download

similar documents