SQLIntersection – Statement Execution and Optimizing Stored Procedures

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

Dag två i ett kyligare Vegas fortsatte för mig med sessionen “Understanding Statement Execution and Optimizing Stored Procedures”. Också den hållen av Kimberly Tripp. Dock var inte Paul Randal med och stöttade idag eftersom han bara sa tre ord igår :-). Idag har vi gått genom  procedurcachen eller plan cache’n som man numera kallar den och hur man bäst utnyttjar detta utrymme, som för t.ex. SQL Server 2008+ och SQL Server 2005 SP2 med 16 GB tilldelat till SQL Server hela 4,2 GB går åt till plan cache’n. Då går det inte att fylla den med planer  som bara används enstaka gånger. Mer om detta och hur man hittar dessa kan man läsa här.

Förstås pratade vi mycket om Ad hoc frågor kontra lagrade procedurer och när man skall använda dem och vilka fördelar/nackdelar det ger, t.ex. problemen som man kan få med “parameter sniffing och vilka alternativ man har att för att lösa nackdelarna.

Att kombinera OR och AND i sina SQL satser har säkert de flesta märkt är ingen lyckad kombination när det gäller prestanda för SQL Server. Exemplet nedan är säkert inte alltför ovanligt för många av oss och detta resulterar ofta i dåliga planer. En lösningen  som i alla fall kan hjälpa en del är “Option Recompile” men ännu bättre är kombinera detta med dynamisk SQL.

(
 @Lastname varchar(30) = NULL,
 @Firstname varchar(30) = NULL,
 @member_no int = NULL
)

SELECT m.* 
FROM dbo.member AS m
WHERE (m.lastname LIKE @lastname OR @lastname IS NULL)
 AND (m.member_no = @member_no OR @member_no IS NULL)
 AND (m.firstname LIKE @firstname OR @firstname IS NULL)

Också dag två mycket bra och nu är också antalet deltagare betydligt flera.