Natural Born Killers,
performance issues to avoid
Richard Douglas
Natural Born Killer

http://www.flickr.com/photos/merille/4747615138/sizes/z/in/photostream/

2

Natural Born Killers
3

Natural Born Killers
Source: http://cheezburger.com/View/5939764992

4

Natural Born Killers
Adhering to best practices?

http://www.flickr.com/photos/12693492@N04/1338123903/sizes/m/in/photostream/

5

Natural Born Killers
Your host
• Richard Douglas
• Systems Consultant
• SQL Server MCITPro

• Maidenhead SQL User Group Leader
• Blog: http://SQL.RichardDouglas.co.uk
• Twitter: @SQLRich
• Email: Richard.Douglas@Quest.com
Richard_Douglas@Dell.com

6

Natural Born Killers
Agenda
• Statistics
• Table Design
• Scalar UDF’s

• Indices
• Key lookups
• Sargability

• Table variables
• Parameter sniffing

7

Natural Born Killers
Statistics
• SQL uses a cost based optimizer
• Costs influenced by statistics

8

Natural Born Killers
Statistics
• Creating Statistics
– Automatic
– Manual
– CREATE STATISTICS
– sp_CreateStats

• Updating Statistics
Permanent Table

Temporary Table

1st record

1st record

-

6 records

LT 500 recs, 500 changes

LT 500 recs, 500 changes

GT 500 recs, 500 changes
+ 20%

GT 500 recs, 500 changes
+ 20%

• Sp_UpdateStats

• UPDATE STATISTICS
9

Natural Born Killers
Table Design

http://www.flickr.com/photos/aresauburnphotos/2699269321/sizes/o/in/photost
ream/

10

Natural Born Killers
Example of bad design

11

Natural Born Killers
Example of a better design

12

Natural Born Killers
Table Design – Size comparison

13

Natural Born Killers
Good table design benefits
• Minimise the CPU overhead.
• Increase the number of records in the buffer cache.
• Reduce the amount of physical disk IO.

• Reduce the amount of network traffic.
• Reduce the data file size(s).
• Reduce the working size of the Transaction Log.

• Reduce Full/Diff /T-Log backup file size.
Thereby increasing your ability to deliver your RTO.
• Keep transaction time to a minimum.

14

Natural Born Killers
Scalar User Defined Functions
• The Good
– Re-Usable code

• The Bad
– Runs once per record in record set
– They don’t take advantage of parallelism
– They use Nested Loop joins regardless

• The Ugly
– So ugly it’s hidden from the query plan and IO statistics

19

Natural Born Killers
Scalar UDF Solutions and Alternatives
• If you have to use them:
– View the actual IO usage in Profiler

• If you can replace them:
– Look at Table Value Functions
– Look at CLR

20

Natural Born Killers
Indices

21

Natural Born Killers
Indexing strategies
It’s all about DWI knowledge:

D W I
a
t
a

22

Natural Born Killers

o
r
k
l
o
a
d

n
t
e
r
n
a
l
s
Golden Rules for Clustered Indexes
Bad example; Surname, Firstname, Middle Initial
• Static

Impacts nonclustered
indexes

• Progressive

Fragmentation

• Narrow

• Unique
• Fixed width

Space impact

• Not Null

This example will have 13 bytes of overhead alone;
• 4 byte uniquifier
• 2 byte variable offset + 6 bytes for variable length fields
• 1 byte for NULL values and NULL bitmap
23

Natural Born Killers
Golden Rules for NonClustered Indexes
• Have an optimal clustered key
• Not narrow
• Reduce unnecessary overhead
– Fixed Width
– Not null

• Consolidate
• Index foreign keys

24

Natural Born Killers
Key Lookups – The silent killer

25

Natural Born Killers
Sargability
• SARGable – “Search ARGument able”
• T-SQL functions around a predicate can break
SARGability
• Some caveats to remember

26

Natural Born Killers
Table Variables Vs. Temp Tables
Table Variables
• Fast when used with small data sets.
• Have a limited scope

• Use less locking and logging resources than temp
tables
– http://sql.richarddouglas.co.uk/archive/2011/06/rollback-gotchaspart-2-2.html

• Estimated statistics always show 1 record
• Cannot be altered after they are declared
• Mythbuster - MAY be memory only, this isn’t
guaranteed

• Generally faster with smaller data sets
27

Natural Born Killers
Table Variables Vs. Temp Tables
Temp Tables
• Uses statistics
– Stat population will cause recompiles (statement level in 2005 +)
– Can create better plans

• Wider scope
• Can be rolled back
• Can be altered after creation
• Generally faster with larger data sets

28

Natural Born Killers
Parameter Sniffing
• What is it?
– It’s all a matter of statistics

• How do I know when it will affect me?
– Monitor the IO and CPU
– This means baselining your environment

• What are my options?
– Rewrite dynamic queries
– Query Hints:
– WITH RECOMPILE
– OPTIMIZE FOR

– Plan Guides

29

Natural Born Killers
Demos

30

Natural Born Killers
Summary
• Statistics
• Table Design
• Scalar UDF’s
• Indices
• Key lookups
• Sargability
• Table variables
• Parameter sniffing

31

Natural Born Killers
Any questions?

32

Understanding Indices

Dell Software
Thank you
Richard_Douglas@Dell.com
@SQLRich
http://bit.ly/11jr4fC

Natural Born Killers, Performance issues to avoid

  • 1.
    Natural Born Killers, performanceissues to avoid Richard Douglas
  • 2.
  • 3.
  • 4.
  • 5.
    Adhering to bestpractices? http://www.flickr.com/photos/12693492@N04/1338123903/sizes/m/in/photostream/ 5 Natural Born Killers
  • 6.
    Your host • RichardDouglas • Systems Consultant • SQL Server MCITPro • Maidenhead SQL User Group Leader • Blog: http://SQL.RichardDouglas.co.uk • Twitter: @SQLRich • Email: Richard.Douglas@Quest.com Richard_Douglas@Dell.com 6 Natural Born Killers
  • 7.
    Agenda • Statistics • TableDesign • Scalar UDF’s • Indices • Key lookups • Sargability • Table variables • Parameter sniffing 7 Natural Born Killers
  • 8.
    Statistics • SQL usesa cost based optimizer • Costs influenced by statistics 8 Natural Born Killers
  • 9.
    Statistics • Creating Statistics –Automatic – Manual – CREATE STATISTICS – sp_CreateStats • Updating Statistics Permanent Table Temporary Table 1st record 1st record - 6 records LT 500 recs, 500 changes LT 500 recs, 500 changes GT 500 recs, 500 changes + 20% GT 500 recs, 500 changes + 20% • Sp_UpdateStats • UPDATE STATISTICS 9 Natural Born Killers
  • 10.
  • 11.
    Example of baddesign 11 Natural Born Killers
  • 12.
    Example of abetter design 12 Natural Born Killers
  • 13.
    Table Design –Size comparison 13 Natural Born Killers
  • 14.
    Good table designbenefits • Minimise the CPU overhead. • Increase the number of records in the buffer cache. • Reduce the amount of physical disk IO. • Reduce the amount of network traffic. • Reduce the data file size(s). • Reduce the working size of the Transaction Log. • Reduce Full/Diff /T-Log backup file size. Thereby increasing your ability to deliver your RTO. • Keep transaction time to a minimum. 14 Natural Born Killers
  • 16.
    Scalar User DefinedFunctions • The Good – Re-Usable code • The Bad – Runs once per record in record set – They don’t take advantage of parallelism – They use Nested Loop joins regardless • The Ugly – So ugly it’s hidden from the query plan and IO statistics 19 Natural Born Killers
  • 17.
    Scalar UDF Solutionsand Alternatives • If you have to use them: – View the actual IO usage in Profiler • If you can replace them: – Look at Table Value Functions – Look at CLR 20 Natural Born Killers
  • 18.
  • 19.
    Indexing strategies It’s allabout DWI knowledge: D W I a t a 22 Natural Born Killers o r k l o a d n t e r n a l s
  • 20.
    Golden Rules forClustered Indexes Bad example; Surname, Firstname, Middle Initial • Static Impacts nonclustered indexes • Progressive Fragmentation • Narrow • Unique • Fixed width Space impact • Not Null This example will have 13 bytes of overhead alone; • 4 byte uniquifier • 2 byte variable offset + 6 bytes for variable length fields • 1 byte for NULL values and NULL bitmap 23 Natural Born Killers
  • 21.
    Golden Rules forNonClustered Indexes • Have an optimal clustered key • Not narrow • Reduce unnecessary overhead – Fixed Width – Not null • Consolidate • Index foreign keys 24 Natural Born Killers
  • 22.
    Key Lookups –The silent killer 25 Natural Born Killers
  • 23.
    Sargability • SARGable –“Search ARGument able” • T-SQL functions around a predicate can break SARGability • Some caveats to remember 26 Natural Born Killers
  • 24.
    Table Variables Vs.Temp Tables Table Variables • Fast when used with small data sets. • Have a limited scope • Use less locking and logging resources than temp tables – http://sql.richarddouglas.co.uk/archive/2011/06/rollback-gotchaspart-2-2.html • Estimated statistics always show 1 record • Cannot be altered after they are declared • Mythbuster - MAY be memory only, this isn’t guaranteed • Generally faster with smaller data sets 27 Natural Born Killers
  • 25.
    Table Variables Vs.Temp Tables Temp Tables • Uses statistics – Stat population will cause recompiles (statement level in 2005 +) – Can create better plans • Wider scope • Can be rolled back • Can be altered after creation • Generally faster with larger data sets 28 Natural Born Killers
  • 26.
    Parameter Sniffing • Whatis it? – It’s all a matter of statistics • How do I know when it will affect me? – Monitor the IO and CPU – This means baselining your environment • What are my options? – Rewrite dynamic queries – Query Hints: – WITH RECOMPILE – OPTIMIZE FOR – Plan Guides 29 Natural Born Killers
  • 27.
  • 28.
    Summary • Statistics • TableDesign • Scalar UDF’s • Indices • Key lookups • Sargability • Table variables • Parameter sniffing 31 Natural Born Killers
  • 29.
  • 30.

Editor's Notes

  • #23 You should know data and workloadI can help you learn more about the internals