|  | Posted by cbrichards via SQLMonster.com on 09/15/06 00:05 
I have a stored procedure that will execute with less than 1,000 reads onetime (with a specified set of parameters), then with a different set of
 parameters the procedure executes with close to 500,000 reads (according to
 Profiler).
 
 In comparing the execution plans, they are the same, except for the actual
 and estimated number of rows. When the proc runs with parameters that produce
 reads that are less than 1,000 the actual and estimated number of rows equal
 1. When the proc runs with parameters that produce reads are near 500,000 the
 actual rows are approximately 85,000 and the estimated rows equal 1.
 
 Then I run:
 DBCC DROPCLEANBUFFERS
 DBCC FREEPROCCACHE
 
 If I then reverse the order of execution by executing the procedure that
 initially executes with close to 500,000 reads first, the reads drop to less
 than 2,000. The execution plan shows the acutual number of rows equal to 1,
 and the estimated rows equal to 2.27. Then when I run the procedure that
 initially executed with less than 1,000 reads, it continues to run at less
 than 1,000 reads, and the actual number of rows is equal to 1 and the
 estimated rows equal to 2.27. When run in this order, there is consistency in
 the actual and estimated number of rows and the reads for both executions
 with differing parameters are within reason.
 
 Do I need to run DBCC DROPCLEANBUFFERS and DBCC FREEPROCCACHE on production
 and then ensure that the procedure that ran close to 500,000 reads is run
 first to ensure the proper plan, as well as using a KEEP PLAN option? Or,
 what other options might you recommend?
 
 I am running SQL 2000 SP4.
 
 --
 Message posted via SQLMonster.com
 http://www.sqlmonster.com/Uwe/Forums.aspx/sql-server-general/200609/1
  Navigation: [Reply to this message] |