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

PPTX
Relational databases vs Non-relational databases
PDF
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
PDF
Performance tuning in sql server
PDF
SQL Server Tuning to Improve Database Performance
PPTX
Database Administration
PDF
Columnstore indexes in sql server 2014
PPSX
Database Performance Tuning Introduction
PPT
Sql Server Performance Tuning
Relational databases vs Non-relational databases
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
Performance tuning in sql server
SQL Server Tuning to Improve Database Performance
Database Administration
Columnstore indexes in sql server 2014
Database Performance Tuning Introduction
Sql Server Performance Tuning

What's hot (20)

PDF
Welcome To The 2016 Query Store!
PPTX
Data Warehousing (Need,Application,Architecture,Benefits), Data Mart, Schema,...
PPTX
Sizing MongoDB Clusters
PPTX
Query Optimization in SQL Server
PPTX
Moving from SQL Server to MongoDB
ODP
Dimensional Modelling
PDF
MySQL Optimizer Cost Model
PDF
Oracle Performance Tuning Fundamentals
PPT
Database performance tuning and query optimization
PPTX
Etl process in data warehouse
PDF
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
PPTX
Cassandra & puppet, scaling data at $15 per month
PPT
Introduction to cassandra
PDF
Re-imagine Data Monitoring with whylogs and Spark
PDF
Getting Started with Databricks SQL Analytics
PPTX
Building a Big Data Pipeline
PDF
Introduction To Sas
PPT
Performance Tuning And Optimization Microsoft SQL Database
PPTX
Victoria Tableau User Group - Getting started with Tableau
PPTX
Oracle basic queries
Welcome To The 2016 Query Store!
Data Warehousing (Need,Application,Architecture,Benefits), Data Mart, Schema,...
Sizing MongoDB Clusters
Query Optimization in SQL Server
Moving from SQL Server to MongoDB
Dimensional Modelling
MySQL Optimizer Cost Model
Oracle Performance Tuning Fundamentals
Database performance tuning and query optimization
Etl process in data warehouse
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
Cassandra & puppet, scaling data at $15 per month
Introduction to cassandra
Re-imagine Data Monitoring with whylogs and Spark
Getting Started with Databricks SQL Analytics
Building a Big Data Pipeline
Introduction To Sas
Performance Tuning And Optimization Microsoft SQL Database
Victoria Tableau User Group - Getting started with Tableau
Oracle basic queries
Ad

Viewers also liked (20)

PPTX
Top 10 DBA Mistakes on Microsoft SQL Server
PPTX
Microsoft SQL Server internals & architecture
PDF
SQL Server Query Tuning Tips - Get it Right the First Time
PPTX
End-to-end Troubleshooting Checklist for Microsoft SQL Server
PPT
Sql server performance tuning
PDF
SQL Server Performance Tuning Baseline
PDF
Why & how to optimize sql server for performance from design to query
PDF
Performance tuning and optimization (ppt)
PDF
Peter Allor - The New Era of Cognitive Security
PPTX
Reduce latency and boost sql server io performance
PPTX
Ultimate Free SQL Server Toolkit
PPTX
SQL Server Query Optimization, Execution and Debugging Query Performance
PPTX
The use of blogs in teaching and learning literature in FL
PPTX
Mediación escolar e implantación de un plan de mediación en un centro educativo
PDF
Lluvias en el norte 24.03.17
PDF
Gender gap in public speaking
PDF
kintone Café Akita Vol.1 対面開発
PDF
パケットが教えてくれた ルートサーバが 13個の理由
PPTX
Emergencias oncológicas (Diplomado UniRemington) Parte 4/6
PPT
Quimioterapia paliativa (Diplomado UniRemington) Parte 5c/6
Top 10 DBA Mistakes on Microsoft SQL Server
Microsoft SQL Server internals & architecture
SQL Server Query Tuning Tips - Get it Right the First Time
End-to-end Troubleshooting Checklist for Microsoft SQL Server
Sql server performance tuning
SQL Server Performance Tuning Baseline
Why & how to optimize sql server for performance from design to query
Performance tuning and optimization (ppt)
Peter Allor - The New Era of Cognitive Security
Reduce latency and boost sql server io performance
Ultimate Free SQL Server Toolkit
SQL Server Query Optimization, Execution and Debugging Query Performance
The use of blogs in teaching and learning literature in FL
Mediación escolar e implantación de un plan de mediación en un centro educativo
Lluvias en el norte 24.03.17
Gender gap in public speaking
kintone Café Akita Vol.1 対面開発
パケットが教えてくれた ルートサーバが 13個の理由
Emergencias oncológicas (Diplomado UniRemington) Parte 4/6
Quimioterapia paliativa (Diplomado UniRemington) Parte 5c/6
Ad

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

PPTX
02 database oprimization - improving sql performance - ent-db
PDF
SQL Server Performance Tuning | Query Tuning training | SQLSchool Training In...
PDF
Practical SQL query monitoring and optimization
PDF
SQL Database Performance Tuning for Developers
PDF
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdf
PPTX
SQL Server 2012 Best Practices
PDF
Query Tuning for Database Pros & Developers
PDF
Advanced tips for making Oracle databases faster
PPT
Myth busters - performance tuning 101 2007
PPTX
Sql good practices
PDF
3 query tuning techniques every sql server programmer should know
PDF
Microsoft SQL Server Query Tuning
PDF
31063115_1679409488310Developer_Tuning_Tips_-_UTOUG_Mar_2023.pdf
PPT
PPTX
Database Performance Tuning
PPT
Top 10 Oracle SQL tuning tips
PPTX
Stop the Chaos! Get Real Oracle Performance by Query Tuning Part 2
PPTX
Oracle performance tuning_sfsf
TXT
Oracle sql tuning
PPTX
T sql performance guidelines for better db stress powers
02 database oprimization - improving sql performance - ent-db
SQL Server Performance Tuning | Query Tuning training | SQLSchool Training In...
Practical SQL query monitoring and optimization
SQL Database Performance Tuning for Developers
NOCOUG_201311_Fine_Tuning_Execution_Plans.pdf
SQL Server 2012 Best Practices
Query Tuning for Database Pros & Developers
Advanced tips for making Oracle databases faster
Myth busters - performance tuning 101 2007
Sql good practices
3 query tuning techniques every sql server programmer should know
Microsoft SQL Server Query Tuning
31063115_1679409488310Developer_Tuning_Tips_-_UTOUG_Mar_2023.pdf
Database Performance Tuning
Top 10 Oracle SQL tuning tips
Stop the Chaos! Get Real Oracle Performance by Query Tuning Part 2
Oracle performance tuning_sfsf
Oracle sql tuning
T sql performance guidelines for better db stress powers

Recently uploaded (20)

PPTX
machinelearningoverview-250809184828-927201d2.pptx
PPTX
Hushh.ai: Your Personal Data, Your Business
PPTX
SET 1 Compulsory MNH machine learning intro
PDF
Systems Analysis and Design, 12th Edition by Scott Tilley Test Bank.pdf
PDF
©️ 02_SKU Automatic SW Robotics for Microsoft PC.pdf
PPTX
Business_Capability_Map_Collection__pptx
PPTX
Tapan_20220802057_Researchinternship_final_stage.pptx
PDF
Navigating the Thai Supplements Landscape.pdf
PPTX
Fundementals of R Programming_Class_2.pptx
PDF
A biomechanical Functional analysis of the masitary muscles in man
PPTX
DATA MODELING, data model concepts, types of data concepts
PPTX
chrmotography.pptx food anaylysis techni
PDF
Session 11 - Data Visualization Storytelling (2).pdf
PPT
DU, AIS, Big Data and Data Analytics.ppt
PPTX
Lesson-01intheselfoflifeofthekennyrogersoftheunderstandoftheunderstanded
PPT
expt-design-lecture-12 hghhgfggjhjd (1).ppt
PPTX
Hushh Hackathon for IIT Bombay: Create your very own Agents
PPTX
PPT for Diseases.pptx, there are 3 types of diseases
PPTX
865628565-Pertemuan-2-chapter-03-NUMERICAL-MEASURES.pptx
PPTX
cp-and-safeguarding-training-2018-2019-mmfv2-230818062456-767bc1a7.pptx
machinelearningoverview-250809184828-927201d2.pptx
Hushh.ai: Your Personal Data, Your Business
SET 1 Compulsory MNH machine learning intro
Systems Analysis and Design, 12th Edition by Scott Tilley Test Bank.pdf
©️ 02_SKU Automatic SW Robotics for Microsoft PC.pdf
Business_Capability_Map_Collection__pptx
Tapan_20220802057_Researchinternship_final_stage.pptx
Navigating the Thai Supplements Landscape.pdf
Fundementals of R Programming_Class_2.pptx
A biomechanical Functional analysis of the masitary muscles in man
DATA MODELING, data model concepts, types of data concepts
chrmotography.pptx food anaylysis techni
Session 11 - Data Visualization Storytelling (2).pdf
DU, AIS, Big Data and Data Analytics.ppt
Lesson-01intheselfoflifeofthekennyrogersoftheunderstandoftheunderstanded
expt-design-lecture-12 hghhgfggjhjd (1).ppt
Hushh Hackathon for IIT Bombay: Create your very own Agents
PPT for Diseases.pptx, there are 3 types of diseases
865628565-Pertemuan-2-chapter-03-NUMERICAL-MEASURES.pptx
cp-and-safeguarding-training-2018-2019-mmfv2-230818062456-767bc1a7.pptx

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