Sunday 8 January 2012

Plan Cache and Parameter sniffing in SQL Server 2008

I have recently encountered   performance problem with one of my production servers due to parameter sniffing in SQL Server 2008. It actually took us quite a bit time to find out the problem and I thought it would be really useful to share it. So what is parameter sniffing?

“Parameter sniffing is the process whereby SQL Server creates an optimal plan for a stored procedure by using the calling parameters that are passed the first time a stored procedure is executed”.  In Other words the plan is never regenerated / optimized after the first execution which forces the optimizer to use the same plan irrespective of the parameters.
 Though there are many ways to identify the parameter sniffing the simplest behavior is there is a considerable difference in the query execution times when executed using SQL Query Analyzer and actual stored procedure call from the application.

I have given some of the commonly used solutions to solve the “Parameter sniffing”
Trace Flag

The simplest of all the solutions is to switch of the Parameter Sniffing using the trace flag 4136. The DBCC syntax is given below

DBCC TRACEON (4136)
Local Variable Substitution

We can force the SQL optimizer to temporarily suspend the Parameter Sniffing by using local variables substitution for the parameters and use only the local variables in the query as shown below

CREATE PROCEDURE pGetPatientName
(
      @P_PatientID VARCHAR(50),
      @P_Name VARCHAR(50)
)
AS
BEGIN

DECLARE @V_PatientID VARCHAR(50)
DECLARE @V_Name VARCHAR(50)

SET @V_Name = @P_Name
SET @V_PatientID = @P_PatientID

SELECT
ForeName,
SurName
FROM
Patient
WHERE PatientID = @V_PatientID
AND ForeName LIKE @V_Name+'%'

END

Recompile & Query Hints
You can also make the optimizer to force for the plan compilation using the options such as
      1.       Execute the query “With Recompile” option
2.       Alter the Procedure / Drop & Re Create Indexes
3.       Specifying Query Hints

12 comments:

  1. I could not refrain from commenting. Exceptionally well written!
    My web site: http://www.daily-wet-tshirt.com/erika-kurisu-horny-asian-babe-gets-a-rear-fucking/

    ReplyDelete
  2. Hello, I do think your site could be having browser compatibility issues.
    Whenever I take a look at your blog in Safari, it looks fine but when opening in Internet Explorer, it's got some overlapping issues. I just wanted to provide you with a quick heads up! Besides that, excellent blog!
    My homepage ... www.teenpornpost.com

    ReplyDelete
  3. Wonderful, what a blog it is! This weblog provides valuable data
    to us, keep it up.
    Also visit my web-site ; naked girls

    ReplyDelete
  4. It is not my first time to pay a visit this website,
    i am browsing this web site dailly and obtain good data from here all the time.
    Here is my homepage :: naked girls

    ReplyDelete
  5. What's up to every one, the contents existing at this web site are in fact amazing for people experience, well, keep up the good work fellows.
    Review my website ; Free Teen Porn

    ReplyDelete
  6. Very good post. I am dealing with some of these issues as
    well..
    Review my webpage ... Videos

    ReplyDelete
  7. Hey! Do you use Twitter? I'd like to follow you if that would be okay. I'm definitely enjoying your blog and look forward to
    new updates.
    My website ... porn

    ReplyDelete
  8. That is a very good tip especially to those fresh to the
    blogosphere. Simple but very precise info… Thanks for sharing this one.
    A must read article!
    My webpage - Orlando contractors

    ReplyDelete