Presentation is loading. Please wait.

Presentation is loading. Please wait.

Atlanta SQL Server Users Group April 10, 2006 Stored Procedure Best Practices Kevin Kline Director of Technology Quest Software.

Similar presentations


Presentation on theme: "Atlanta SQL Server Users Group April 10, 2006 Stored Procedure Best Practices Kevin Kline Director of Technology Quest Software."— Presentation transcript:

1 Atlanta SQL Server Users Group April 10, 2006 Stored Procedure Best Practices Kevin Kline Director of Technology Quest Software

2 Agenda Overview Polling Question Discuss Best Practices Review Common Problems Cover a few tuning recommendations

3 Started in IT in 1986. BS in MIS in 1989 from University of Alabama. Microsoft SQL Server MVP Author of 5 database books –1 on Oracle, 2 on SQL Server, 2 on SQL. Daily blogger on www.sqlmag.com; ATE on www.searchSQLserver.comwww.sqlmag.com President of PASS (www.sqlpass.org)www.sqlpass.org –Conference is next Nov 13 – 17 in Seattle –Over 130 sessions on SQL Server, BI & Dev Worked for NASA, US Army, and Deloitte before Quest Software. Bio

4 Naming Procs Do NOT use sp_xxx as a naming convention. Causes additional searches and added I/O. –If a user stored procedure has same name as an sp_xxx stored procedure in MASTER, then the user procedure will NEVER be used.

5 Calling Procs Use stored procedure calls rather than embedded SQL EXEC versus SP_EXECUTESQL –same behavior with regard to batches, the scope of names, and database context –EXEC compiles entire SQL at one time –SP_EXECUTE compiles and executes as an execution plan separate from the execution plan of the batch that called sp_executesql itself. –SP_EXECUTESQL executes a Transact-SQL statement or batch that can be reused many times, or that has been built dynamically, using a single execution plan. –Often better than EXEC.

6 Common Problems Un-necessary network communication Execution Plans –Not Enough Sharing –Too Much Sharing –Inadequate plan Recompilation Other Delays

7 Set Nocount On No done_in_proc messages – –Extra network trip Server setting via Trace 3640 –-T3640 –sp_configure ‘user options’, 512

8 Create Stored Procedure Creation Parsing SQL Entries into sysobjects and syscomments tables

9 Exec Stored Procedure Execution Read from syscomments NO In Memory? compile optimize Execute YES

10 SP Plan Sharing Select * From dbo.titles Where type = ? Query Plan Execution Context Cooking Psychology Business Spid 10 Spid 17 Spid 23

11 Not Enough Plan Sharing Set Options Language used Dateformat

12 ONOFFUser Options Set opts Arithabort Concat_null_yields_null Quoted_Identifier** Ansi_nulls** Ansi_Padding Ansi_Warnings Numeric_roundabort Forceplan Ansi_Null_Dflt_On Ansi_Null_Dflt_Off

13 Option Hierarchy Set Statement in code OLEDB/ODBC Connection string ODBC –Control Panel –SQLConfigDatasource OLEDB/ODBC auto set of 7 –DB-Library/Embedded SQL for C-NOT Database Level Settings (alter database) Server Wide Settings (sp_configure)

14 + + SIS

15 Too Much Plan Sharing getord tbl scan exec getord ‘05022%’ exec getord ‘%’ Memory finduserindex sp_1sp_4

16 Monitoring Plan Caching DBCC FreeProcCache DBCC FlushProcInDB( ) DBCC DropCleanBuffers Actual Query Plan SQL Profiler Syscacheobjects

17 Too Many Recompiles Execution Read from syscomments NO In Memory? compile optimize Execute YES ReComp

18 SP Recompiles Because we request it Previous plan aged out of memory Interleaved DDL and DML Schema changes to objects in sp New index statistics Cursor on temp table (SQL 7.0) Sp_configure

19 Requested Recompile Create proc … with recompile as Exec myproc … with recompile sp_recompile titles

20 SP Plan Aging getord Memory finduser sp_1sp_4 16 16 7 2 2 3 3 0 2 7 1 5 6 4 0 1 14 15 13 12

21 Interleaved DDL and DML create proc testDDLDML as create table testdml (DDL) insert into testdml (DML – RECOMPILE) alter table testdml (DDL) insert into testdml (DML – RECOMPILE) drop table testdml

22 Schema Changes to Objects Sysobjects.schema_ver –Column additions, deletions –Data type changes –Constraint additions, deletions –Rule/Default bindings Query plan index dropped

23 New Index Statistics Auto_update statistics Auto_create statistics Update statistics

24 Inner SP Recompiles When it uses the outer SPs temp table –First time (if called multi times)

25 Using Local Variables in Where Clause Optimizer guesses percentage of rows returned Operator% =10 >30 < Between10

26 Best Practices Owner qualify all names (2-part) Standardize user options, language Minimize use of tempdb –Use table variable instead –Always refer to LOCAL temp tables Help the optimizer cache plans Avoid using local vars in where clause Don’t interleave DDL and DML TEST,TEST, TEST

27 Other Delay – Compile Locks KB Q263889 spid blocked waittype waittime lastwaittype waitresource ---- --------- -------- ------- -------------- -------------------------------------- 221 29 0x000e 2141 LCK_M_X TAB: 6:834102 [[COMPILE]] 228 29 0x000e 2235 LCK_M_X TAB: 6:834102 [[COMPILE]] 29 214 0x000e 3937 LCK_M_X TAB: 6:834102 [[COMPILE]] 13 214 0x000e 1094 LCK_M_X TAB: 6:834102 [[COMPILE]] 68 214 0x000e 1968 LCK_M_X TAB: 6:834102 [[COMPILE]] 214 0 0x0000 0 LCK_M_X TAB: 6:834102 [[COMPILE]]

28 dbo stuff dbo.test Kev stuff Kev.test select * from test dbo.sptest (Kev) Exec sptest

29 References SQL Server Books Online –“Execution Plan Caching and Reuse” “Analyzing Optimal Compiled Plan Caching” - Sajal Dam Knowledge Base –Q243588, “INF: Troubleshooting Performance of Ad Hoc Queries” –Q243586, “INF: Troubleshooting Stored Procedure Recompilation” –Q263889, “INF: SQL Blocking Due to [COMPILE] locks” Inside SQL Server 2000 – Kalen Delaney Guru’s Guide to … - Ken Henderson

30 Thank you! Email questions to kevin.kline@quest.com.kevin.kline@quest.com Questions & Answers


Download ppt "Atlanta SQL Server Users Group April 10, 2006 Stored Procedure Best Practices Kevin Kline Director of Technology Quest Software."

Similar presentations


Ads by Google