Around 1980 when relational databases and I were both young,
I was told that the time to parse the SQL statement and create the search plan
took about 50 percent of the time required to execute a SQL query. Most of
this was consumed by CPU time for parsing and plan creation. The other 50
percent was devoted to executing the query. Then as now, execution time was
primarily consumed by I/O for reading the pages required to satisfy the query.
With computer CPUs being about 30,000 times faster today than they were in 1980
you’d think that parsing and plan creation would no longer involve significant
effort. But they do.
That is not to say that the time spent in compilation and
plan creation isn’t worth the effort. It is. SQL Server 2000 uses a far more
sophisticated algorithm for creating plans then databases did in the past. Its
algorithm is cost based instead of schema based. That means it uses knowledge
about the actual values in the columns being searched to pick the plan that
will most likely result in the fewest I/O operations. The fewer the I/O
operations, the faster the query runs. In SQL Server, the knowledge about
columns is stored as column statistics.
When SQL Server executes a stored procedure for the first
time, it creates an execution plan. The plan is a set of instructions on how
to execute the query and the process of creating the plan is referred to as
compilation. Plans are stored in the procedure cache, which is in the dynamic
table master..syscacheobjects. The next time the stored procedure is used, the
plan can be retrieved from cache and it doesn’t have to be re-created. That
is, unless there is a reason that the existing plan was removed from the cache
or that the plan can no longer be used. In these cases, the plan must be
At times SQL Server can spend excessive time in recompiling
stored procedures. Because stored procedures have to be locked during
recompilation, excessive recompilation can slow a system down out of proportion
to the amount of CPU consumed. It has become a problem in many systems.
This article discusses the reasons that SQL Server 2000 decides
to recompile a stored procedure and demonstrates the tools and techniques that
you can use to monitor recompilation. In another article next month, I’ll
discuss what can be done to minimize recompilation. If your system makes
extensive use of stored procedures, minimizing recompilation can give you an
important boost in performance.