24
Grant Fritchey | www.ScaryDBA.com www.ScaryDBA.com Top Tips for Better TSQL Stored Procedures Grant Fritchey – Red Gate Software

Top Tips for Better TSQL Stored Procedures

  • Upload
    oakley

  • View
    40

  • Download
    1

Embed Size (px)

DESCRIPTION

Top Tips for Better TSQL Stored Procedures. Grant Fritchey – Red Gate Software. Goal. Learn methods for writing TSQL for readability Understand how to write TSQL for performance. Grant Fritchey. Product Evangelist for Red Gate Software Twitter: @ gfritchey Blog: scarydba.com - PowerPoint PPT Presentation

Citation preview

Page 1: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.comwww.ScaryDBA.com

Top Tips for Better TSQL Stored ProceduresGrant Fritchey – Red Gate Software

Page 2: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 2

Goal Learn methods for writing TSQL for

readability Understand how to write TSQL for

performance

Page 3: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 3

Grant Fritchey Product Evangelist for Red Gate Software Twitter: @gfritchey Blog: scarydba.com Email: [email protected]

Page 4: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 4

Agenda Writing for readability

» Object Names & Format» Comments» Error Handling» Personal Preferences

Writing for performance» Data Types» Functions in Comparisons» Improper Use of Functions» The “Run Faster” Switch» Inappropriate Use of Query Hints» Recompiles» Null Values» Row by Agonizing Row» Nesting Views

Page 5: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 5

Writing for Readability Define a local standard» Object names» Comments» Format» Error handling

Enforce the standard» Document it» Code reviews

Page 6: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 6

Object Names & Format Names should be descriptive» Procedures should be a phrase» Abbreviations should be common (no

Ddltbl) Use aliases» Clear» Common

Be consistent» A foolish consistency is the hobgoblin of

little minds» Keyword in that sentence is “foolish”

Page 7: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 7

Comments Do something Most important is describing the action,

not documentation Use source control for documentation Self-documenting code is a lie

Page 8: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 8

Error Handling TRY/CATCH Deadlocks Establish local best practices

Page 9: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 9

Personal Preferences CamelCase Uppercase for reserve words and key words Line breaks» On SELECT list» Between JOIN criteria» Between WHERE criteria

Use the semicolon Indent » After initial SELECT»With ON clause» After WHERE clause

Page 10: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 10

Writing For Performance Write for your data structures Write for your indexes Write for the query optimizer Avoid common issues:» Data types» Functions in comparisons» Improper use of functions» The “run faster” switch» Inappropriate Query Hints» Recompiles» Null Values» Row By Agonizing Row» Nested Views

Page 11: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 11

Data Types Problem» Implicit or explicit data type conversion

Indications» Scans» Slow performance

Solution» Use appropriate data types

Page 12: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 12

Functions in Comparisons Problem» Function on column in WHERE or JOIN

criteria Indications» Scans» Slow performance

Solution» Don’t run functions on columns» Use sargeable functions

Page 13: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 13

Improper Use of Functions Problem»Multi-statement user defined functions

cause poor performance Indications» Zero cost scan operator in exec plan» Very slow performance

Solution»When working with more than a few

(~50?) rows, don’t use them»When using operations such as JOIN that

require statistics, don’t use them

Page 14: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 14

The “Run Faster” Switch Problem» Use of the NO_LOCK query hint

everywhere, or setting transaction isolation level to READ_UNCOMMITTED

Indications» Extra rows in result set»Missing rows in result set

Solution» Tune the queries» Tune the structures» Use snapshot isolation levels

Page 15: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 15

Query Hints Problem» Query hints in the code such as FAST n,

index hints, JOIN hints Indications» Inconsistent performance behavior» Bad performance» Odd looking execution plans

Solution» Use of query hints should be exceptional» Exceptions are rare, not standard

practice

Page 16: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 16

Recompiles Problem» Excessive blocking and CPU contention

caused by constant or long statement recompiles

Indications» Recompile events in extended events or

trace» Blocking» High CPU usage

Solutions» Avoid interleaving DDL & DML»Where viable, use table variables

Page 17: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 17

NULL Values Problem» Incorrect data returned due to improper

use of NULL Indications»= and <> instead of IS NULL and IS NOT

NULL Solutions» Learn to use NULL properly

Page 18: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 18

Row by Agonizing Row Problem» Cursors instead of set-based operations»WHILE loops instead of set-based

operations»Multiple statements where 1 will do

Indications» Extremely slow performance

Solutions» Eliminate unnecessary row-by-row

processing

Page 19: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 19

Nested Views Problem» Views within views causes optimizer

timeout Indications» Incredibly complex query plans for

simple queries» Very poor performance

Solutions» Don’t nest views»Materialize views

Page 20: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 20

Goal Learn methods for writing TSQL for

readability Understand how to write TSQL for

performance

Page 21: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 21

Writing for Readability Define a local standard» Object names» Comments» Format» Error handling

Enforce the standard» Document it» Code reviews

Page 22: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 22

Writing For Performance Write for your data structures Write for your indexes Write for the query optimizer Avoid common issues:» Data types» Functions in comparisons» Improper use of functions» The “run faster” switch» Inappropriate Query Hints» Recompiles» Null Values» Row By Agonizing Row» Nested Views

Page 23: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 23

Grant Fritchey Product Evangelist for Red Gate Software Twitter: @gfritchey Blog: scarydba.com Email: [email protected]

Page 24: Top Tips for Better TSQL Stored Procedures

Grant Fritchey | www.ScaryDBA.com 24

Questions?

How would you… ?

What happens when… ?

Why does… ?

When do I… ?