DBCC OPTIMIZER_WHATIF

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

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; 

 

WhatIf_2

 

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.