590 likes | 846 Views
SQL Server Stored Procedures Architecture & Performance. Victor Isakov MCT, CTT, MSCE, MCDBA sql@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
E N D
SQL Server Stored ProceduresArchitecture & Performance Victor Isakov MCT, CTT, MSCE, MCDBA sql@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
Agenda • Stored Procedure Architecture • Stored Procedure Optimization • Managing Query Plan Performance • Undocumented Microsoft Stored Procedures
Agenda • Stored Procedure Architecture • Stored Procedure Optimization • Managing the Query Plan for Performance. • Undocumented Microsoft Stored Procedures
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
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
SQL Server Stored Procedure Architecture Stored Procedure Query SELECT logic Changes Security Business Rules Unauthorized Constraints Compiled Execution Plan
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
Agenda • Stored Procedure Architecture • Stored Procedure Optimization • Managing the Query Plan for Performance. • Undocumented Microsoft Stored Procedures
Cache (RAM) Stored Procedure Optimization CREATE PROCEDURE… Parse TSQL Syntax Resolve References Save in Database EXEC @RC=MyProc… Resolve references Optimize Compile Execute
Stored Procedure Optimization SQL Server RAM Cache EXEC @RC=MyProc… P P 1st instance compiled and QP loaded 2nd instance shares loaded QP (new EC) 1st instance finishes 3rd instance shares first QP (& 1st EC) Data Pages
Cache (RAM) 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 Data Pages
Cache (RAM) Stored Procedure Optimization • SPs compiled on first use • Query plan cached in RAM • Subsequent calls generally use cached plan • Recompiled if…. Data Pages
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
Recompilation • Running sp_recompile on table • SET Options • May affect query result • ANSI_DEFAULTS • ANSI_NULLS • ANSI_PADDING • ANSI_WARNINGS • CONCAT_NULL_YIELDS_NULL • Certain operations on temporary tables
Recompilation • Interleaving DDL and DML in procedure • Server activity ages plan out of cache
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
Agenda • Stored Procedure Architecture • Stored Procedures Optimization • Managing Query Plan Performance • Undocumented Microsoft Stored Procedures
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 IF
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 Managing Query Plan Performance
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
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
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
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
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”
Managing Query Plan Performance Strategy • Flush cache DBCC FREEPROCCACHE • Force recompile WITH RECOMPILE • Avoid “all-purpose” stored procedures • SET Options
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!
Performance • Don’t sweat the small stuff… Construct Command object Client-side preparation Execute query Parse, resolve, build QP Server-side execution Execute query Return resultsets Client-side processing Client-side consumption
Agenda • Stored Procedure Architecture. • Stored Procedures Optimization • Managing Query Plan Performance • Undocumented Microsoft Stored Procedures
Undocumented Microsoft Stored Procedures • Stored Procedure Architecture. • Stored Procedures Optimization • Managing Query Plan Performance • Undocumented Microsoft Stored Procedures
Undocumented Microsoft Stored Procedures • Seven for the DBA • sp_EnumErrorLogs • sp_ReadErrorLog • sp_TempDbSpace • sp_EnumOleDbDatasources • sp_MSForEachDb • sp_MSLoginMappings • sp_MSTableSpace
Undocumented Microsoft Stored Procedures • Seven for the Developer • sp_GetTypeString • sp_MSCheck_UId_Owns_Anything • sp_MSGet_Qualified_Name • sp_MSForEachTable • sp_MSIs_PK_Col • sp_MSTable_Has_Unique_Index • sp_MSTableRefs