Often as a DBA you encounter performance issues on SQL due to frequent recompilation of the SQL Statement or a Store procedure, We can detect frequent SQL Recompilation by,
1. SQL Profiler SP:Recompile and SQL:StmtRecomple Event classes
2. Perfmon SQL Counter SQL:Statistics(Re- Compilations/sec)
3. DMV sys.dm_exec_query_stats; plan_generation_num Column.
As the scope of our article is not detecting SQL Recompilation but find the reason for recompilation I am not going to detail on the above more.
The reason for recompile can be detected using SQL Server Profiler in EventSubClass Column corresponding to SP:Recompile and SQL:StmtRecomple Event classes. Before We go into an example
I am listing Type of event subclass. Indicates the reason for recompilation.
1 = Schema Changed
2 = Statistics Changed
3 = Recompile DNR
4 = Set Option Changed
5 = Temp Table Changed
6 = Remote Rowset Changed
7 = For Browse Perms Changed
8 = Query Notification Environment Changed
9 = MPI View Changed
10 = Cursor Options Changed
11 = With Recompile Option
Let’s see an Example, I am using tempdb and a #table for this example, I have Started SQL Server profiler and have added Event Class, TextData, SPID and Event Sub Class as my columns and have added
SP:Recompile, RPC:Completed,SQL: StmtRecompile and SQL:BatchCompled eventsto the trace.
DROP TABLE #Temptbl
Create Table #Temptbl (col1 int)
INSERT INTO #Temptbl Values(1)
select * from #Temptbl
select * from #Temptbl
Note:- The event subclass shows Deferred compile because the object #Temptbl is not available during compilation.
ALTER TABLE #Temptbl
ADD Rnum int IDENTITY (1,1)
select * from #Temptbl
declare @i int;
set @i = 0;
while (@i < 1000)
begin
insert into #Temptbl values(@i);
set @i = @i + 1;
end
select * from #Temptbl
CREATE CLUSTERED INDEX idx1 ON #Temptbl(Rnum)
ALTER INDEX idx1 ON #Temptbl REBUILD
select * from #Temptbl
DELETE FROM #Temptbl where Rnum > 100
select * from #Temptbl where Rnum > 25300 and Rnum < 35300 OPTION(RECOMPILE)
But the most common way an SP gets recompiles is for EventSubClass:Statistics Change which I have not dealt in the above example. I will be writing a separate article on Temporary table and permanent table Cardinality and Recompilation where I will explain in detail. This article is intended to show how to find why SP or SQL batch are recompiled.






814D21CB
ReplyDeleteAvanos
Akseki
Beyoğlu
Ürgüp
Akyaka
Beypazarı
Turgutreis
İnegöl
Kaynarca
52313334
ReplyDeleteMilas
Antakya
Talas
Atakum
Kalkan
Balgat
Dikili
Sur
Kumluca