18
Reading Execution Plans for Performance Tuning Thomas LeBlanc Independent SQL Server/BI Consultant

Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Reading Execution Plans for Performance Tuning

Thomas LeBlanc

Independent SQL Server/BI Consultant

Page 2: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

• About Me… Independent Consultant DW/BI Architect Database Normalization “Nut”

Crazy about Dimensions

Retired Developer TheSmilingDBA – twitter, blog & gmail PASS volunteer - Chair of Excel BI VC

Thomas LeBlanc

Page 3: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

My Assumptions About You • Some development of database applications

• Curious About Performance Tuning

• Sense of Humor

• Want Some Answers To Query Questions

Page 4: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

What Are We Talking About

• Execution Plan Basic Terminology

• History

• Demo, Demo and More Demos…

• Additional Help With Query Plans

Page 5: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Terminology • Query Plan – Used by the Optimizer

– Many useful articles

– Estimated versus Actual

• Scans – Table for Heap

– Clustered Index Scan

– Non-Clustered Scan

• Seek – Good use of index to find data

Page 6: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Terminology - Continued • Loops

– Nested Join • Each row in outer set joins to matches in inner set

• Best with small data sets

– Merge Join • Rows in outer and inner sets are ordered the same

• Rows are merged together like a zipper

– Hash Join • Not necessarily bad, but most expensive

• Join column is hashed and resulting hash and columns are put into hash table to join sets together

Page 7: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Terminology - Continued

• Lookup – After Seek, more data is located

– RID versus Key Lookup • RID – table has no clustered index (Heap)

• Key – table has a clustered index

• Other Operators – Sort from order by clause

– Aggregate from Group By and Sum/Count/Min/Max

– Parallelism from Cost above Threshold

Page 8: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

History • Text

– Enterprise Manager (not Management Studio)

– SET_SHOWPLAN_TEXT ON (demo)

• Graphical – Started in Management Studio (SSMS) 2005

• Missing Index – Included in SSMS in 2008

• Warnings and Memory Grants – 2012

• Operator Cost – 2014

• Let’s look at some demos!!!

Page 9: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Demo

• History

Page 10: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Next Demos

• Table Scan

• Clustered Index Scan

• Non-Clustered Index Scan with Key Lookup

• Covering Index

• Index Seek

Page 11: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Demo

• Scans and Seeks

Page 12: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Next Demos

• Nested Loop – Fastest and most common

• Merge Loop – Merge to sorted record sets

• Hash Loop – Smaller table made into Hash Table

– Larger table (set) looped though searching for Hash value in Hash Table for matches

Page 13: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Demo

• Loops

Page 14: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Next Demos

• Compute Scaler – Concatenates Last and First Names

• Sorts – ORDER BY or DISTINCT or GROUP BY

• Aggregates

• Properties – more information

• Insert and Updates (Deletes)

Page 15: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Demo

• Other Iterators

Page 16: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Parallelism

• Using Multiple Processors

• MAXDOP Configuration – Set to 0 (all) by Default

• Cost Threshold

– Defaults to 5

– Reduce to get more parallelism

Page 17: Reading Execution Plans for Performance Tuning · 2016. 4. 22. · –Estimated versus Actual • Scans –Table for Heap –Clustered Index Scan –Non-Clustered Scan • Seek –Good

Demo

• Parallelism