SlideShare a Scribd company logo
TEN QUERY TUNING 
TECHNIQUES 
Every SQL Programmer Should Know 
Kevin Kline 
Director of Engineering Services at SQL Sentry 
Microsoft MVP since 2003 
Facebook, LinkedIn, Twitter at KEKLINE 
KEKline@sqlsentry.com 
KevinEKline.com, ForITPros.com
FOR FRIENDS OF SQL SENTRY 
• Free Plan Explorer download: 
http://www.sqlsentry.net/plan-explorer/ 
• Free query tuning consultations: 
http://answers.sqlperformance.com. 
• Free new ebook (regularly $10) to attendees. 
Send request to sales@sqlsentry.net. 
• SQL Server educational videos, scripts, and 
slides: http://SQLSentry.TV 
• Tuning blog: http://www.sqlperformance.com/ 
• Monthly eNews tips and tricks: 
http://www.sqlsentry.net/newsletter-archive. 
asp
AGENDA 
• Introductions 
• Test & tuning environment 
• 1. Clearing caches 
• Looking for red flags 
• 2. Reading execution plans 
• Query tuning techniques: 
• 8 more specific examples of widespread approaches that lead to poor 
performance 
• Summary 
3
TEST & TUNING ENVIRONMENT 
• Code to clear the caches*: 
o CHECKPOINT 
o DBCC [FreeProcCache | FreeSystemCache | FlushProcInDB(<dbid>) ] 
o DBCC DropCleanBuffers 
• Code to set measurements: 
o SET STATISTICS [TIME | IO] 
o SET SHOWPLAN [TEXT | XML] or Graphic Execution Plans 
• Code for Dynamic Management Views (DMV) checks. 
o System info – sys.dm_os_performance_counters, sys.dm_os_wait_stats 
o Query info – sys.dm_exec_requests 
o Index info – sys.dm_db_index_usage_stats, sys.dm_io_virtual_file_stats
RED FLAGS IN YOUR SQL CODE 
• Red Flags Query Operators: 
o Lookups, Scans, Spools, Parallelism Operations 
• Other Red Flags: 
o Dissimilar estimated versus actual row counts 
o High physical reads 
o Missing statistics alarms 
o Large sort operations 
o Implicit data type conversions
DEMOS: DEFAULT CURSORS 
• I don’t always use cursors… 
o …but when I do, I avoid the default options 
o Slow and heavy-handed: Global, updateable, dynamic, scrollable 
o I use LOCAL FAST_FORWARD 
o May want to test STATIC vs. DYNAMIC, when tempdb is a 
bottleneck 
• Blog post: http://bit.ly/AB-cursors
DEMOS: WHERE IN VERSUS 
WHERE EXISTS 
• There are lots of ways to find data existing within 
subsets: 
• IN, EXISTS, JOIN, Apply, subquery 
• Which technique is best? 
• Blog post: http://bit.ly/AB-NOTIN
OPTIMIZING FOR SELECT VERSUS 
DML 
• Big differences between a SELECT and a DML 
statement that effects the same rows. 
• Shouldn’t blindly create every index the Tuning Advisor 
or execution plan tells you to! 
• Blog post - http://bit.ly/AB-BlindIndex
READS & INDEX STRUCTURE 
• 8K pages 
• Leaf pages ARE the data. 
• Non-leaf pages are pointers. 
Leaf Pages 
Root Page 
Level 0 
Intermediate 
Pages 
Level 1 
Level 2
WRITES & INDEX STRUCTURE 
• Each change to the leaf pages requires all index 
structures be updated. 
Leaf Pages 
Root Page 
Level 0 
Intermediate 
Pages 
Level 1 
Level 2 
Page 
Split 
DML 
Actual 
place-ment
DEMOS: UNWANTED RECOMPILES 
Execution 
In Memory? NO Load metadata 
compile 
optimize 
Execute 
YES 
ReComp
CAUSES OF RECOMPILE 
• Expected: Because we request it: 
• CREATE PROC … WITH RECOMPILE or EXEC myproc … WITH 
RECOMPILE 
• SP_RECOMPILE foo 
• Expected: Plan was aged out of memory 
• Unexpected: Interleaved DDL and DML 
• Unexpected: Big changes since last execution: 
• Schema changes to objects in underlying code 
• New/updated index statistics 
• Sp_configure
INTERLEAVED DDL AND DML 
• CREATE PROC testddldml AS … ; 
• CREATE TABLE #testdml; -- (DDL) 
• <some T-SQL code here> 
• INSERT INTO #testdml; -- (DML + RECOMPILE) 
• <some T-SQL code here> 
• ALTER TABLE #testdml; -- (DDL) 
• <some T-SQL code here> 
• INSERT INTO #testdml; -- (DML + RECOMPILE) 
• <some T-SQL code here> 
• DROP TABLE #testdml; -- (DDL) 
• <some T-SQL code here>
DEMOS: THE "KITCHEN SINK" 
PROCEDURE 
• Usually see it as a one-query-for-all-queries procedure, 
or even one-proc-for-for-all-transactions procedure: 
o Where name starts with S, or placed an order this year, or lives in Texas 
o Insert AND Update AND Delete AND Select 
• Conflicting optional parameters make optimization 
impossible 
o OPTION (RECOMPILE) 
o Dynamic SQL + Optimize for ad hoc workloads 
o Specialized procedures 
• Better approach? 
o Specialize and optimize each piece of code to do ONE THING really effectively
DEMOS: SP_EXECUTESQL VS. 
EXEC(…) 
• I don’t always use dynamic SQL… 
o …but when I do, I always use sp_executesql 
o Less fuss with concatenation and implicit/explicit conversions 
o Better protection against SQL injection (but not for all things) 
o At worst case, behavior is the same 
• Can promote better plan re-use 
• Encourages strongly typed parameters instead of 
building up a massive string
IMPLICIT CONVERSIONS 
• SQL Server has to do a lot of extra work / scans when 
conversion operations are assumed by the SQL 
programmer. 
• Happens all the time with data types you’d think wouldn’t 
need it, e.g. between date types and character types. 
• Very useful data type conversion chart at 
http://bit.ly/15bDRRA. 
• Data type precedence call also have an impact: 
http://bit.ly/13Zio1f.
IMPLICIT CONVERSION 
RESOURCES 
• Ian Stirk’s Column Mismatch Utility at 
http://www.sqlservercentral.com/articles/Administration/6 
5138/. 
• Jonathan Kehayias’ plan cache analyzer at 
http://sqlblog.com/blogs/jonathan_kehayias/archive/2010 
/01/08/finding-implicit-column-conversions-in-the-plan-cache. 
aspx. 
• Jonathan Kehayias’ index scan study at 
http://www.sqlperformance.com/2013/04/t-sql-queries/ 
implicit-conversion-costs
DEMOS: COMMA-DELIMITED 
PARAMETERS 
• Example: pass a comma-separated list of OrderIDs 
• String splitting is expensive, even using CLR 
• Table-valued parameters are typically a better approach
DEMOS: TEMPORARY 
STRUCTURES 
• Which are better, temp tables or temp variables? 
Temp Table Temp Variable 
Stored in? Tempdb Tempdb 
Statistics? Yes No (1 row) 
Indexs/Keys? Yes 1 UK / PK only 
Truncate? Yes No 
Recompiles? Yes No 
Parallelism? Yes No 
Metadata 
Overhead? 
Low Lowest 
Lock Overhead? Normal Lowest
CODING STANDARDS AND 
DISSIMILARITY 
• Might sound frivolous, but naming schemes are 
important 
o Convention is not important; but rather being consistent and logical 
• Story: dbo.UpdateCustomer vs. dbo.Customer_Update 
• Always specify schema when creating, altering, 
referencing objects 
o Object resolution works a little bit harder without it 
o More importantly, it can get the wrong answer 
o And will often yield multiple copies of the same plan 
• Do not use the sp_ prefix on stored procedures 
o This has observable overhead, no matter how specific you are
MIMICKING PRODUCTION 
• Your dev machine is usually nothing like production 
o Build representative data when you can 
o Build a stats-only database when you can’t (a.k.a. a database clone) 
• Will allow you to see plan issues, but not speed 
o Make sure settings are the same 
• @@VERSION, edition 
• Max memory if possible, sp_configure options 
• Logins (and permissions), tempdb settings 
• Parameterization settings, recovery model, compression, snapshot isolation 
• Compatibility level (usually not an issue when working with a restore) 
• Run a full business cycle workload after a restore 
o Simulate equivalent hardware: DBCC OPTIMIZER_WHATIF 
o Use Distributed Replay when you can 
• Not perfect, but more realistic than single-threaded trace replay
SUMMARY 
Let’s connect! 
Facebook, LinkedIn, Twitter 
at KEKLINE. 
Email at 
KEKline@sqlsentry.com 
Blogs at 
http://KevinEKline.com 
And 
http://ForITPros.com
WRAP UP 
Engage with us on social media 
o I’m thankful for your word of mouth promotions and 
endorsements! 
Share your tough SQL tuning problems with us: 
http://answers.sqlperformance.com 
Download SQL Sentry Plan Explorer for free: 
http://www.sqlsentry.com/plan-explorer/ 
Check out our other award winning tools: 
http://www.sqlsentry.net/download
NOLOCK 
http://www.flickr.com/photos/relyjus/4289185639/
NOLOCK 
• It is a turbo button …if you’re ok with inaccuracy 
• There are times it is perfectly valid 
o Ballpark row counts 
o Please use session-level setting, not table hint 
• Usually, though, better to use SNAPSHOT or RCSI 
o But test under heavy load

More Related Content

What's hot (20)

PPTX
Microsoft SQL Server internals & architecture
Kevin Kline
 
PPT
Database performance tuning and query optimization
Dhani Ahmad
 
PPTX
Oracle sql high performance tuning
Guy Harrison
 
PPSX
Oracle Performance Tools of the Trade
Carlos Sierra
 
PPT
Sql server basics
Dilfaroz Khan
 
PPTX
Oracle database performance tuning
Yogiji Creations
 
PPTX
Sql server basics
VishalJharwade
 
PDF
Efficient Data Storage for Analytics with Parquet 2.0 - Hadoop Summit 2014
Julien Le Dem
 
PPT
Sql Server Performance Tuning
Bala Subra
 
PDF
Best Practices for Becoming an Exceptional Postgres DBA
EDB
 
PDF
Oracle Performance Tuning Fundamentals
Enkitec
 
PPT
Sql server performance tuning
ngupt28
 
PPTX
Hit Refresh with Oracle GoldenGate Microservices
Bobby Curtis
 
PDF
Understanding and controlling transaction logs
Red Gate Software
 
PPTX
오라클 DB 아키텍처와 튜닝
철민 권
 
PPTX
Centralized Logging System Using ELK Stack
Rohit Sharma
 
PPT
Ms sql server architecture
Ajeet Singh
 
PPTX
Understanding SQL Trace, TKPROF and Execution Plan for beginners
Carlos Sierra
 
PDF
Oracle Database Performance Tuning Advanced Features and Best Practices for DBAs
Zohar Elkayam
 
PDF
Performance Stability, Tips and Tricks and Underscores
Jitendra Singh
 
Microsoft SQL Server internals & architecture
Kevin Kline
 
Database performance tuning and query optimization
Dhani Ahmad
 
Oracle sql high performance tuning
Guy Harrison
 
Oracle Performance Tools of the Trade
Carlos Sierra
 
Sql server basics
Dilfaroz Khan
 
Oracle database performance tuning
Yogiji Creations
 
Sql server basics
VishalJharwade
 
Efficient Data Storage for Analytics with Parquet 2.0 - Hadoop Summit 2014
Julien Le Dem
 
Sql Server Performance Tuning
Bala Subra
 
Best Practices for Becoming an Exceptional Postgres DBA
EDB
 
Oracle Performance Tuning Fundamentals
Enkitec
 
Sql server performance tuning
ngupt28
 
Hit Refresh with Oracle GoldenGate Microservices
Bobby Curtis
 
Understanding and controlling transaction logs
Red Gate Software
 
오라클 DB 아키텍처와 튜닝
철민 권
 
Centralized Logging System Using ELK Stack
Rohit Sharma
 
Ms sql server architecture
Ajeet Singh
 
Understanding SQL Trace, TKPROF and Execution Plan for beginners
Carlos Sierra
 
Oracle Database Performance Tuning Advanced Features and Best Practices for DBAs
Zohar Elkayam
 
Performance Stability, Tips and Tricks and Underscores
Jitendra Singh
 

Viewers also liked (19)

PPTX
Top 10 DBA Mistakes on Microsoft SQL Server
Kevin Kline
 
PDF
SQL Server Query Tuning Tips - Get it Right the First Time
Dean Richards
 
PPTX
End-to-end Troubleshooting Checklist for Microsoft SQL Server
Kevin Kline
 
PDF
Why & how to optimize sql server for performance from design to query
Antonios Chatzipavlis
 
PDF
SQL Server Tuning to Improve Database Performance
Mark Ginnebaugh
 
PDF
Performance tuning and optimization (ppt)
Harish Chand
 
PDF
Peter Allor - The New Era of Cognitive Security
scoopnewsgroup
 
PPTX
Reduce latency and boost sql server io performance
Kevin Kline
 
PPTX
Ultimate Free SQL Server Toolkit
Kevin Kline
 
PPTX
SQL Server Query Optimization, Execution and Debugging Query Performance
Vinod Kumar
 
PPTX
The use of blogs in teaching and learning literature in FL
University of Limerick
 
PPTX
Mediación escolar e implantación de un plan de mediación en un centro educativo
apegon1
 
PDF
Lluvias en el norte 24.03.17
Manuel Placido
 
PDF
Gender gap in public speaking
Shiftbalance
 
PDF
kintone Café Akita Vol.1 対面開発
kintone papers
 
PDF
パケットが教えてくれた ルートサーバが 13個の理由
@ otsuka752
 
PPTX
Emergencias oncológicas (Diplomado UniRemington) Parte 4/6
Mauricio Lema
 
PPT
Quimioterapia paliativa (Diplomado UniRemington) Parte 5c/6
Mauricio Lema
 
PDF
RUNNING Smalltalk - 実践Smalltalk
Sho Yoshida
 
Top 10 DBA Mistakes on Microsoft SQL Server
Kevin Kline
 
SQL Server Query Tuning Tips - Get it Right the First Time
Dean Richards
 
End-to-end Troubleshooting Checklist for Microsoft SQL Server
Kevin Kline
 
Why & how to optimize sql server for performance from design to query
Antonios Chatzipavlis
 
SQL Server Tuning to Improve Database Performance
Mark Ginnebaugh
 
Performance tuning and optimization (ppt)
Harish Chand
 
Peter Allor - The New Era of Cognitive Security
scoopnewsgroup
 
Reduce latency and boost sql server io performance
Kevin Kline
 
Ultimate Free SQL Server Toolkit
Kevin Kline
 
SQL Server Query Optimization, Execution and Debugging Query Performance
Vinod Kumar
 
The use of blogs in teaching and learning literature in FL
University of Limerick
 
Mediación escolar e implantación de un plan de mediación en un centro educativo
apegon1
 
Lluvias en el norte 24.03.17
Manuel Placido
 
Gender gap in public speaking
Shiftbalance
 
kintone Café Akita Vol.1 対面開発
kintone papers
 
パケットが教えてくれた ルートサーバが 13個の理由
@ otsuka752
 
Emergencias oncológicas (Diplomado UniRemington) Parte 4/6
Mauricio Lema
 
Quimioterapia paliativa (Diplomado UniRemington) Parte 5c/6
Mauricio Lema
 
RUNNING Smalltalk - 実践Smalltalk
Sho Yoshida
 
Ad

Similar to Ten query tuning techniques every SQL Server programmer should know (20)

PPTX
Always On Availability Group Maintenance Operations
John Martin
 
PPTX
Bringing DevOps to the Database
Michaela Murray
 
PPTX
Database Fundamental Concepts- Series 1 - Performance Analysis
DAGEOP LTD
 
PDF
Breaking data
Terry Bunio
 
PPTX
Common SQL Server Mistakes and How to Avoid Them with Tim Radney
Embarcadero Technologies
 
PPT
Database continuous integration, unit test and functional test
Harry Zheng
 
PDF
Taming the shrew Power BI
Kellyn Pot'Vin-Gorman
 
PPTX
SQL Server Tips & Tricks
Ike Ellis
 
PPTX
Tips & Tricks SQL in the City Seattle 2014
Ike Ellis
 
PPTX
Continuous database deployment
Mike (Michael) Acord
 
PDF
DMann-SQLDeveloper4Reporting
David Mann
 
PDF
Yapc10 Cdt World Domination
cPanel
 
PPTX
Improving The Quality of Existing Software
Steven Smith
 
PDF
[DBA]_HiramFleitas_SQL_PASS_Summit_2017_Summary
Hiram Fleitas León
 
PPTX
Optimizing Access with SQL Server
PRPASS Chapter
 
PPTX
Improving the Quality of Existing Software
Steven Smith
 
PPTX
Performance Benchmarking: Tips, Tricks, and Lessons Learned
Tim Callaghan
 
PDF
KoprowskiT_Session2_SDNEvent_SourceControlForDBA
Tobias Koprowski
 
PPTX
Improving the Quality of Existing Software
Steven Smith
 
PDF
Building better SQL Server Databases
ColdFusionConference
 
Always On Availability Group Maintenance Operations
John Martin
 
Bringing DevOps to the Database
Michaela Murray
 
Database Fundamental Concepts- Series 1 - Performance Analysis
DAGEOP LTD
 
Breaking data
Terry Bunio
 
Common SQL Server Mistakes and How to Avoid Them with Tim Radney
Embarcadero Technologies
 
Database continuous integration, unit test and functional test
Harry Zheng
 
Taming the shrew Power BI
Kellyn Pot'Vin-Gorman
 
SQL Server Tips & Tricks
Ike Ellis
 
Tips & Tricks SQL in the City Seattle 2014
Ike Ellis
 
Continuous database deployment
Mike (Michael) Acord
 
DMann-SQLDeveloper4Reporting
David Mann
 
Yapc10 Cdt World Domination
cPanel
 
Improving The Quality of Existing Software
Steven Smith
 
[DBA]_HiramFleitas_SQL_PASS_Summit_2017_Summary
Hiram Fleitas León
 
Optimizing Access with SQL Server
PRPASS Chapter
 
Improving the Quality of Existing Software
Steven Smith
 
Performance Benchmarking: Tips, Tricks, and Lessons Learned
Tim Callaghan
 
KoprowskiT_Session2_SDNEvent_SourceControlForDBA
Tobias Koprowski
 
Improving the Quality of Existing Software
Steven Smith
 
Building better SQL Server Databases
ColdFusionConference
 
Ad

Recently uploaded (20)

PPTX
01_Nico Vincent_Sailpeak.pptx_AI_Barometer_2025
FinTech Belgium
 
PPTX
SHREYAS25 INTERN-I,II,III PPT (1).pptx pre
swapnilherage
 
PDF
Development and validation of the Japanese version of the Organizational Matt...
Yoga Tokuyoshi
 
PPTX
Aict presentation on dpplppp sjdhfh.pptx
vabaso5932
 
PPTX
How to Add Columns and Rows in an R Data Frame
subhashenia
 
PPTX
apidays Singapore 2025 - Generative AI Landscape Building a Modern Data Strat...
apidays
 
PDF
Unlocking Insights: Introducing i-Metrics Asia-Pacific Corporation and Strate...
Janette Toral
 
PPTX
thid ppt defines the ich guridlens and gives the information about the ICH gu...
shaistabegum14
 
PPTX
04_Tamás Marton_Intuitech .pptx_AI_Barometer_2025
FinTech Belgium
 
PDF
apidays Singapore 2025 - From API Intelligence to API Governance by Harsha Ch...
apidays
 
PDF
Driving Employee Engagement in a Hybrid World.pdf
Mia scott
 
PDF
Technical-Report-GPS_GIS_RS-for-MSF-finalv2.pdf
KPycho
 
PDF
OOPs with Java_unit2.pdf. sarthak bookkk
Sarthak964187
 
PDF
Data Science Course Certificate by Sigma Software University
Stepan Kalika
 
PPTX
SlideEgg_501298-Agentic AI.pptx agentic ai
530BYManoj
 
PPTX
在线购买英国本科毕业证苏格兰皇家音乐学院水印成绩单RSAMD学费发票
Taqyea
 
PDF
Group 5_RMB Final Project on circular economy
pgban24anmola
 
PDF
apidays Singapore 2025 - How APIs can make - or break - trust in your AI by S...
apidays
 
PDF
NIS2 Compliance for MSPs: Roadmap, Benefits & Cybersecurity Trends (2025 Guide)
GRC Kompas
 
PPTX
Listify-Intelligent-Voice-to-Catalog-Agent.pptx
nareshkottees
 
01_Nico Vincent_Sailpeak.pptx_AI_Barometer_2025
FinTech Belgium
 
SHREYAS25 INTERN-I,II,III PPT (1).pptx pre
swapnilherage
 
Development and validation of the Japanese version of the Organizational Matt...
Yoga Tokuyoshi
 
Aict presentation on dpplppp sjdhfh.pptx
vabaso5932
 
How to Add Columns and Rows in an R Data Frame
subhashenia
 
apidays Singapore 2025 - Generative AI Landscape Building a Modern Data Strat...
apidays
 
Unlocking Insights: Introducing i-Metrics Asia-Pacific Corporation and Strate...
Janette Toral
 
thid ppt defines the ich guridlens and gives the information about the ICH gu...
shaistabegum14
 
04_Tamás Marton_Intuitech .pptx_AI_Barometer_2025
FinTech Belgium
 
apidays Singapore 2025 - From API Intelligence to API Governance by Harsha Ch...
apidays
 
Driving Employee Engagement in a Hybrid World.pdf
Mia scott
 
Technical-Report-GPS_GIS_RS-for-MSF-finalv2.pdf
KPycho
 
OOPs with Java_unit2.pdf. sarthak bookkk
Sarthak964187
 
Data Science Course Certificate by Sigma Software University
Stepan Kalika
 
SlideEgg_501298-Agentic AI.pptx agentic ai
530BYManoj
 
在线购买英国本科毕业证苏格兰皇家音乐学院水印成绩单RSAMD学费发票
Taqyea
 
Group 5_RMB Final Project on circular economy
pgban24anmola
 
apidays Singapore 2025 - How APIs can make - or break - trust in your AI by S...
apidays
 
NIS2 Compliance for MSPs: Roadmap, Benefits & Cybersecurity Trends (2025 Guide)
GRC Kompas
 
Listify-Intelligent-Voice-to-Catalog-Agent.pptx
nareshkottees
 

Ten query tuning techniques every SQL Server programmer should know

  • 1. TEN QUERY TUNING TECHNIQUES Every SQL Programmer Should Know Kevin Kline Director of Engineering Services at SQL Sentry Microsoft MVP since 2003 Facebook, LinkedIn, Twitter at KEKLINE [email protected] KevinEKline.com, ForITPros.com
  • 2. FOR FRIENDS OF SQL SENTRY • Free Plan Explorer download: http://www.sqlsentry.net/plan-explorer/ • Free query tuning consultations: http://answers.sqlperformance.com. • Free new ebook (regularly $10) to attendees. Send request to [email protected]. • SQL Server educational videos, scripts, and slides: http://SQLSentry.TV • Tuning blog: http://www.sqlperformance.com/ • Monthly eNews tips and tricks: http://www.sqlsentry.net/newsletter-archive. asp
  • 3. AGENDA • Introductions • Test & tuning environment • 1. Clearing caches • Looking for red flags • 2. Reading execution plans • Query tuning techniques: • 8 more specific examples of widespread approaches that lead to poor performance • Summary 3
  • 4. TEST & TUNING ENVIRONMENT • Code to clear the caches*: o CHECKPOINT o DBCC [FreeProcCache | FreeSystemCache | FlushProcInDB(<dbid>) ] o DBCC DropCleanBuffers • Code to set measurements: o SET STATISTICS [TIME | IO] o SET SHOWPLAN [TEXT | XML] or Graphic Execution Plans • Code for Dynamic Management Views (DMV) checks. o System info – sys.dm_os_performance_counters, sys.dm_os_wait_stats o Query info – sys.dm_exec_requests o Index info – sys.dm_db_index_usage_stats, sys.dm_io_virtual_file_stats
  • 5. RED FLAGS IN YOUR SQL CODE • Red Flags Query Operators: o Lookups, Scans, Spools, Parallelism Operations • Other Red Flags: o Dissimilar estimated versus actual row counts o High physical reads o Missing statistics alarms o Large sort operations o Implicit data type conversions
  • 6. DEMOS: DEFAULT CURSORS • I don’t always use cursors… o …but when I do, I avoid the default options o Slow and heavy-handed: Global, updateable, dynamic, scrollable o I use LOCAL FAST_FORWARD o May want to test STATIC vs. DYNAMIC, when tempdb is a bottleneck • Blog post: http://bit.ly/AB-cursors
  • 7. DEMOS: WHERE IN VERSUS WHERE EXISTS • There are lots of ways to find data existing within subsets: • IN, EXISTS, JOIN, Apply, subquery • Which technique is best? • Blog post: http://bit.ly/AB-NOTIN
  • 8. OPTIMIZING FOR SELECT VERSUS DML • Big differences between a SELECT and a DML statement that effects the same rows. • Shouldn’t blindly create every index the Tuning Advisor or execution plan tells you to! • Blog post - http://bit.ly/AB-BlindIndex
  • 9. READS & INDEX STRUCTURE • 8K pages • Leaf pages ARE the data. • Non-leaf pages are pointers. Leaf Pages Root Page Level 0 Intermediate Pages Level 1 Level 2
  • 10. WRITES & INDEX STRUCTURE • Each change to the leaf pages requires all index structures be updated. Leaf Pages Root Page Level 0 Intermediate Pages Level 1 Level 2 Page Split DML Actual place-ment
  • 11. DEMOS: UNWANTED RECOMPILES Execution In Memory? NO Load metadata compile optimize Execute YES ReComp
  • 12. CAUSES OF RECOMPILE • Expected: Because we request it: • CREATE PROC … WITH RECOMPILE or EXEC myproc … WITH RECOMPILE • SP_RECOMPILE foo • Expected: Plan was aged out of memory • Unexpected: Interleaved DDL and DML • Unexpected: Big changes since last execution: • Schema changes to objects in underlying code • New/updated index statistics • Sp_configure
  • 13. INTERLEAVED DDL AND DML • CREATE PROC testddldml AS … ; • CREATE TABLE #testdml; -- (DDL) • <some T-SQL code here> • INSERT INTO #testdml; -- (DML + RECOMPILE) • <some T-SQL code here> • ALTER TABLE #testdml; -- (DDL) • <some T-SQL code here> • INSERT INTO #testdml; -- (DML + RECOMPILE) • <some T-SQL code here> • DROP TABLE #testdml; -- (DDL) • <some T-SQL code here>
  • 14. DEMOS: THE "KITCHEN SINK" PROCEDURE • Usually see it as a one-query-for-all-queries procedure, or even one-proc-for-for-all-transactions procedure: o Where name starts with S, or placed an order this year, or lives in Texas o Insert AND Update AND Delete AND Select • Conflicting optional parameters make optimization impossible o OPTION (RECOMPILE) o Dynamic SQL + Optimize for ad hoc workloads o Specialized procedures • Better approach? o Specialize and optimize each piece of code to do ONE THING really effectively
  • 15. DEMOS: SP_EXECUTESQL VS. EXEC(…) • I don’t always use dynamic SQL… o …but when I do, I always use sp_executesql o Less fuss with concatenation and implicit/explicit conversions o Better protection against SQL injection (but not for all things) o At worst case, behavior is the same • Can promote better plan re-use • Encourages strongly typed parameters instead of building up a massive string
  • 16. IMPLICIT CONVERSIONS • SQL Server has to do a lot of extra work / scans when conversion operations are assumed by the SQL programmer. • Happens all the time with data types you’d think wouldn’t need it, e.g. between date types and character types. • Very useful data type conversion chart at http://bit.ly/15bDRRA. • Data type precedence call also have an impact: http://bit.ly/13Zio1f.
  • 17. IMPLICIT CONVERSION RESOURCES • Ian Stirk’s Column Mismatch Utility at http://www.sqlservercentral.com/articles/Administration/6 5138/. • Jonathan Kehayias’ plan cache analyzer at http://sqlblog.com/blogs/jonathan_kehayias/archive/2010 /01/08/finding-implicit-column-conversions-in-the-plan-cache. aspx. • Jonathan Kehayias’ index scan study at http://www.sqlperformance.com/2013/04/t-sql-queries/ implicit-conversion-costs
  • 18. DEMOS: COMMA-DELIMITED PARAMETERS • Example: pass a comma-separated list of OrderIDs • String splitting is expensive, even using CLR • Table-valued parameters are typically a better approach
  • 19. DEMOS: TEMPORARY STRUCTURES • Which are better, temp tables or temp variables? Temp Table Temp Variable Stored in? Tempdb Tempdb Statistics? Yes No (1 row) Indexs/Keys? Yes 1 UK / PK only Truncate? Yes No Recompiles? Yes No Parallelism? Yes No Metadata Overhead? Low Lowest Lock Overhead? Normal Lowest
  • 20. CODING STANDARDS AND DISSIMILARITY • Might sound frivolous, but naming schemes are important o Convention is not important; but rather being consistent and logical • Story: dbo.UpdateCustomer vs. dbo.Customer_Update • Always specify schema when creating, altering, referencing objects o Object resolution works a little bit harder without it o More importantly, it can get the wrong answer o And will often yield multiple copies of the same plan • Do not use the sp_ prefix on stored procedures o This has observable overhead, no matter how specific you are
  • 21. MIMICKING PRODUCTION • Your dev machine is usually nothing like production o Build representative data when you can o Build a stats-only database when you can’t (a.k.a. a database clone) • Will allow you to see plan issues, but not speed o Make sure settings are the same • @@VERSION, edition • Max memory if possible, sp_configure options • Logins (and permissions), tempdb settings • Parameterization settings, recovery model, compression, snapshot isolation • Compatibility level (usually not an issue when working with a restore) • Run a full business cycle workload after a restore o Simulate equivalent hardware: DBCC OPTIMIZER_WHATIF o Use Distributed Replay when you can • Not perfect, but more realistic than single-threaded trace replay
  • 22. SUMMARY Let’s connect! Facebook, LinkedIn, Twitter at KEKLINE. Email at [email protected] Blogs at http://KevinEKline.com And http://ForITPros.com
  • 23. WRAP UP Engage with us on social media o I’m thankful for your word of mouth promotions and endorsements! Share your tough SQL tuning problems with us: http://answers.sqlperformance.com Download SQL Sentry Plan Explorer for free: http://www.sqlsentry.com/plan-explorer/ Check out our other award winning tools: http://www.sqlsentry.net/download
  • 25. NOLOCK • It is a turbo button …if you’re ok with inaccuracy • There are times it is perfectly valid o Ballpark row counts o Please use session-level setting, not table hint • Usually, though, better to use SNAPSHOT or RCSI o But test under heavy load