![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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/2.jpg)
• 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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022071113/5feabc588dc45b33ca1ff375/html5/thumbnails/17.jpg)
Demo
• Parallelism