Download presentation
Presentation is loading. Please wait.
Published byLindsey Jordan Modified over 9 years ago
1
SQL Server Stored Procedures Architecture & Performance Victor Isakov MCT, CTT, MSCE, MCDBA sql@informare.com.au
2
© Victor Isakovsql@informare.com.au Victor Isakov (sql@informare.com.au) Victor Isakov has been involved with SQL Server since Version 4.21a, enjoying a reputation as one of the best "SQL Gurus" in the country He has taught the Administration, Development, Data Warehousing and Performance Tuning courses since 1995 in the Australasia-Pacific region and provided consultancy services to companies like the University of NSW, Department of Education and Training, Westpac and the United Nations He specialises as a consultant in Optimising, Troubleshooting and Architecting Database Solutions based on Microsoft technology
3
© Victor Isakovsql@informare.com.au Agenda Stored Procedure Architecture Stored Procedure Optimization Managing Query Plan Performance Undocumented Microsoft Stored Procedures
4
© Victor Isakovsql@informare.com.au Agenda Stored Procedure Architecture Stored Procedure Optimization Managing the Query Plan for Performance. Undocumented Microsoft Stored Procedures
5
© Victor Isakovsql@informare.com.au Stored Procedure Architecture SPs are SQL Server programs Traditionally written in Transact-SQL In Yukon will include VB.NET, C# Provide Query Management Data Modifications Data / Referential Integrity Maintenance Tasks Protect Data Provide Gateway to Database Objects
6
© Victor Isakovsql@informare.com.au Stored Procedure Architecture Stored in Database Protected like other DB objects Logic moved to server Increased Developer Productivity Reusable Code More structured 3-Tier solutions Eliminate needless query plan construction Cached query plans can improve performance
7
© Victor Isakovsql@informare.com.au Compiled Execution Plan Query Changes Stored Procedure Architecture SQL Server Security Unauthorized Stored Procedure SELECT logic Business Rules Constraints
8
© Victor Isakovsql@informare.com.au Execution Plan in Detail Query Plan Re-Entrant, Read-Only Structure Shared Separate Parallel / Serial Plans Execution Context User Context Parameter Values, etc Not Shared Can be Re-Used
9
© Victor Isakovsql@informare.com.au Agenda Stored Procedure Architecture Stored Procedure Optimization Managing the Query Plan for Performance. Undocumented Microsoft Stored Procedures
10
© Victor Isakovsql@informare.com.au CREATE PROCEDURE… Stored Procedure Optimization Parse TSQL Syntax Resolve References Save in Database EXEC @RC=MyProc… Resolve references Optimize Compile Cache (RAM) Execute
11
© Victor Isakovsql@informare.com.au Compilation in Detail
12
© Victor Isakovsql@informare.com.au RAM Cache Stored Procedure Optimization SQL Server 1st instance compiled and QP loaded 2nd instance shares loaded QP (new EC) 3rd instance shares first QP (& 1st EC) 1st instance finishes Data Pages EXEC @RC=MyProc…
13
© Victor Isakovsql@informare.com.au Compilation / Execution in Detail
14
© Victor Isakovsql@informare.com.au Stored Procedures Optimization Ad-hoc Queries Compiled when first used EP potentially cached Subsequent references Query Optimizer compares query with Query-Templates Conservative Use cached plan if it’s recognized Auto-Parameterization Cache (RAM) Data Pages
15
© Victor Isakovsql@informare.com.au Processing T-SQL in Detail
16
© Victor Isakovsql@informare.com.au Stored Procedure Optimization SPs compiled on first use Query plan cached in RAM Subsequent calls generally use cached plan Recompiled if…. Cache (RAM) Data Pages
17
© Victor Isakovsql@informare.com.au Recompilation WITH RECOMPILE in CREATE PROCEDURE or EXECUTE statement Schema changes to referenced objects Table referenced by stored procedure Adding / dropping constraints, defaults, or rules sysobjects.schema_ver Restoring the database or any objects procedure references
18
© Victor Isakovsql@informare.com.au Recompilation Running sp_recompile on table SET Options May affect query result ANSI_DEFAULTSANSI_NULLSANSI_PADDINGANSI_WARNINGSCONCAT_NULL_YIELDS_NULL Certain operations on temporary tables
19
© Victor Isakovsql@informare.com.au Recompilation Interleaving DDL and DML in procedure Server activity ages plan out of cache Table Type Empty Condition Threshold When Empty Threshold When Not Empty Permanent < 500 rows Changes >= 500 Changes >= 500 + (20% of Cardinality) Temporary < 6 rows Changes >= 6 Changes >= 500 Variable Change in Cardinality does not affect Automatic Recompilation
20
© Victor Isakovsql@informare.com.au Profiler Trap SP:Recompile CodeReason 1 Schema, bindings, or permissions changed between compile or execute 2 Statistics changed 3 Object not found at compile time, deferred check to run time 4 Set option changed in batch 5 Temp table schema, binding, or permission changed 6 Remote rowset schema, binding, or permission changed
21
© Victor Isakovsql@informare.com.au Avoiding Recompilation Use sp_executesql Preferred Method Calling Stored Procedure unaffected Use Sub-Procedures Only smaller sub-procedure recompiled Use KEEP PLAN Option SET Options
22
© Victor Isakovsql@informare.com.au Agenda Stored Procedure Architecture Stored Procedures Optimization Managing Query Plan Performance Undocumented Microsoft Stored Procedures
23
© Victor Isakovsql@informare.com.au Query Optimization All input parameters Whether used or not Suitable indexes Data statistics All logic in the procedure Whether or not the code is executed Query Complexity IF
24
© Victor Isakovsql@informare.com.au Query Optimization in Detail
25
© Victor Isakovsql@informare.com.au Managing Query Plan Performance Generated query plan based on parameters Provided by first query (arbitrary) Cached and reused for all subsequent use Regardless of suitability Some queries run normally, others do not
26
© Victor Isakovsql@informare.com.au Managing the Cache Flushing the Cache DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS Tip: Should CHECKPOINT first to ensure all data is flushed, otherwise “dirty” data pages will remain in the cache. Restart SQL Server Power-cycle system
27
© Victor Isakovsql@informare.com.au SQL Server Cache Least-Frequently-Used strategy Least used objects flushed when cache fills Unified cache stores data and procedure pages Lazywriter does know the difference Monitor cache with Perfmon
28
© Victor Isakovsql@informare.com.au Inserting QP into Cache
29
© Victor Isakovsql@informare.com.au Retrieving QP From Cache
30
© Victor Isakovsql@informare.com.au Lazywriter Cache Processing Flow
31
© Victor Isakovsql@informare.com.au Managing Query Plan Performance Recompilation might help performance When “optimized” query is not optimal Cost of recompile insignificant compared to poorly running query Test all parameter combinations Check for consistent plans, performance If query plan varies based on parameters Recompile for each execution? Best to redesign procedure
32
© Victor Isakovsql@informare.com.au Managing Query Plan Performance Recompiling on Demand CREATE PROCEDURE … WITH RECOMPILE Compiles QP each time stored procedure is executed EXECUTE … WITH RECOMPILE When parameters are not “typical” sp_recompile Forces all plans to be recompiled (very cheap) Point to stored procedure, table… Statement-based recompile Dynamic string execution (dangerous, but powerful) Smaller, more-focused procedures
33
© Victor Isakovsql@informare.com.au Managing Query Plan Performance Use Query Analyzer to view Query Plan Execute query with a range of input parameters Clear procedure and data cache View IO Statistics Enable “Show Execution Plan”
34
© Victor Isakovsql@informare.com.au Managing Query Plan Performance
35
© Victor Isakovsql@informare.com.au Managing Query Plan Performance
36
© Victor Isakovsql@informare.com.au Managing Query Plan Performance Strategy Flush cache DBCC FREEPROCCACHE Force recompile WITH RECOMPILE Avoid “all-purpose” stored procedures SET Options
37
© Victor Isakovsql@informare.com.au Managing Query Plan Performance Strategy Re-engineer stored procedures Break up larger, more complex procedures Each sub-procedure gets its own query plan Design procedures to work with “typical” parms Build special case procedures Use templates!
38
© Victor Isakovsql@informare.com.au Performance Construct Command object Execute query Parse, resolve, build QP Execute query Return resultsets Client-side processing Don’t sweat the small stuff… Client-side preparation Client-side consumption Server-side execution
39
© Victor Isakovsql@informare.com.au Agenda Stored Procedure Architecture. Stored Procedures Optimization Managing Query Plan Performance Undocumented Microsoft Stored Procedures
40
© Victor Isakovsql@informare.com.au Undocumented Microsoft Stored Procedures Stored Procedure Architecture. Stored Procedures Optimization Managing Query Plan Performance Undocumented Microsoft Stored Procedures
41
© Victor Isakovsql@informare.com.au Undocumented Microsoft Stored Procedures Seven for the DBA sp_EnumErrorLogssp_ReadErrorLogsp_TempDbSpacesp_EnumOleDbDatasourcessp_MSForEachDbsp_MSLoginMappingssp_MSTableSpace
42
© Victor Isakovsql@informare.com.au sp_EnumErrorLogs
43
© Victor Isakovsql@informare.com.au sp_ReadErrorLog
44
© Victor Isakovsql@informare.com.au sp_TempDbSpace
45
© Victor Isakovsql@informare.com.au sp_EnumOleDbDataSources
46
© Victor Isakovsql@informare.com.au sp_MSForEachDB
47
© Victor Isakovsql@informare.com.au sp_MSLoginMappings
48
© Victor Isakovsql@informare.com.au sp_MSTableSpace
49
© Victor Isakovsql@informare.com.au Undocumented Microsoft Stored Procedures Seven for the Developer sp_GetTypeStringsp_MSCheck_UId_Owns_Anythingsp_MSGet_Qualified_Namesp_MSForEachTablesp_MSIs_PK_Colsp_MSTable_Has_Unique_Indexsp_MSTableRefs
50
© Victor Isakovsql@informare.com.au sp_GetTypeString
51
© Victor Isakovsql@informare.com.au sp_MSCheck_UId_Owns_Anything
52
© Victor Isakovsql@informare.com.au sp_MSGet_Qualified_Name
53
© Victor Isakovsql@informare.com.au sp_MSForEachTable
54
© Victor Isakovsql@informare.com.au sp_MSIs_PK_Col
55
© Victor Isakovsql@informare.com.au sp_MSTable_Has_Unique_Index
56
© Victor Isakovsql@informare.com.au sp_MSTableRefs
57
© Victor Isakovsql@informare.com.au Summary Audience: “Who cares, let us go home! Please!” Victor: “But I need to put up something…” Understand how SQL Server works Helps you help SQL Server to execute “optimal” plans “KISS” Principle Slides are up on www.sqlserver.org.au
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.