Antag att du har en tabell med bla en kolumn som är av variabel längd…
När man utvecklar ett databassystem är det inte helt ovanligt att man utvecklar på en miljö som är “klenare” än den kommande produktionsmiljön. Därför vill man säkertställa och kontrollera vad som händer med exekveringsplanerna om t.ex. antalet CPU’er förändras. Redan med SQL Server 2008 och senare versioner är detta möjligt genom det odokumenterade kommandot DBCC OPTIMIZER_WHATIF som gör det enkelt att kontrollera detta.
För att kontrollera nuvarande inställningar och vad som går att välja gäller:
DBCC TRACEON(3604, -1) WITH NO_INFOMSGS DBCC OPTIMIZER_WHATIF(0) WITH NO_INFOMSGS;
Om vi testar till att börja med 1 CPU.
DBCC OPTIMIZER_WHATIF(CPUs, 1); DBCC OPTIMIZER_WHATIF(0) WITH NO_INFOMSGS;
SELECT [SalesPersonID] , [CustomerID] , [ProductID] , SUM([Quantity]) AS Sum_Quantity FROM [SalesDB].[dbo].[Sales] GROUP BY [SalesPersonID] , [CustomerID] , [ProductID] OPTION ( RECOMPILE );
Om vi däremot ändrar värdet till 2 CPU’er.
DBCC OPTIMIZER_WHATIF(CPUs, 2);
Med 16 CPU’er blir det ändå bättre resultat.
Sammanfattningsvis så har vi sett att det spelar roll hur miljön ser ut, t.ex. antalet CPU’er och med DBCC OPTIMIZER_WHATIF har man ett alternativ till att testa detta med enkla medel.