SP_RECOMPILE

Oopps! Upgrade your browser pretty please. Oopps! Upgrade your browser pretty please.

Alla har vi nog varit med om att vi helt plötsligt får mycket sämre prestanda på en specifik fråga. Detta kan bero på många saker men inte alltför sällan kan det bero på att SQL Server har valt en inte helt optimal exekveringsplan.

Hur får man då SQL Server att välja en bättre exekveringsplan? Ett sätt kan vara att man “tvingar” SQL Server att omkompilera planen nästa gång den körs och det kan man göra genom att köra sp_recompile.

SP_RECOMPILE tar en parameter. Antingen namnet på en stored procedure, trigger, funktion, tabell eller vy. Om parametern är en Stored Procedure, Trigger eller Funktion kommer planen för objektet att tas bort från cachen och kompileras om nästa gång den körs. Om parametern istället är en tabell eller vy kommer alla objekt som refererar till tabellen eller vyn att omkompileras nästa gång de körs.

Detta kan vara väldigt smidigt eftersom om man tex misstänker att man har problem med frågor som går mot en viss tabell räcker det med att köra sp_recompile N’tabellnamn’ för att försäkra sig om att alla objekt som refererar till tabellen omkompileras nästa gång de körs, du behöver alltså inte leta rätt på alla tänkbara stored procedures, triggers och så vidare som kan tänkas referera till tabellen.

Sen är det ju inte säkert att det hjälper att kompilera om exekveringsplanerna, men det är en helt annan historia.

Lycka till och se till att ni alltid har statistiken uppdaterad!