it-swarm-eu.dev

SQL Server příkazy k vymazání mezipaměti před spuštěním porovnání výkonu

Při porovnávání doby provádění dvou různých dotazů je důležité vyčistit mezipaměť, aby se zajistilo, že provedení prvního dotazu nezmění výkon druhého.

Ve vyhledávání Google jsem našel tyto příkazy:

DBCC FREESYSTEMCACHE
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE

Ve skutečnosti moje dotazy trvají realističtější čas na dokončení po několika popravách než dříve. Nejsem si však jistý, zda se jedná o doporučenou techniku.

Jaký je nejlepší postup?

49
andrerpena

Osobně, pro společný dotaz záleží na 2. a následných popravách více.

Testujete disk IO nebo výkon dotazu?

Předpokládejme, že váš dotaz běží často a je kritický, pak to chcete měřit za podmínek skutečného života. A nechcete pokaždé vymazat mezipaměti prod server ...

Jestli chceš tak můžeš:

  • DBCC DROPCLEANBUFFERS vymaže čisté (nemodifikované) stránky z fondu vyrovnávacích pamětí
    Předcházejte tomu, že pomocí CHECKPOINT nejprve vyprázdněte všechny špinavé stránky na disk
  • DBCC FLUSHPROCINDB vymaže plány provádění této databáze

Viz také (na DBA.SE)

45
gbn

Pozdní odpověď, ale může být užitečná i pro jiné čtenáře

DBCC DROPCLEANBUFFERS je často používaný příkaz pro testování dotazů a měření rychlosti provádění dotazů. Tento příkaz (při spuštění) zanechává pouze špinavé stránky, což je vlastně malá část dat. Odstraní všechny čisté stránky pro celý server.

Vezměte na vědomí, že tento příkaz by neměl být spouštěn v produkčním prostředí. Spuštění tohoto příkazu povede k většinou prázdné vyrovnávací paměti. Spuštění libovolného dotazu po provedení DBCC DROPCLEANBUFFERS příkaz, použije fyzické čtení k návratu dat do mezipaměti, což je velmi pravděpodobné, že bude mnohem pomalejší než paměť.

Znovu zacházejte s tímto příkazem podobně jako s DBCC FREEPROCCACHE - nemělo by být spuštěno na žádném produkčním serveru, pokud nevíte, co přesně děláte.

Může to být užitečný vývojový nástroj, protože v prostředí testování výkonu můžete znovu a znovu spouštět dotaz bez změny rychlosti/efektivity v důsledku ukládání dat do paměti.

Více se dozvíte na: http://www.sqlshack.com/insight-into-the-sql-server-buffer-cache/

15
Thomas Bovee

Vždy mi bylo řečeno, abych použil:

dbcc dropcleanbuffers;

Od MSDN :

Použijte DBCC DROPCLEANBUFFERS k testování dotazů s mezipamětí studené vyrovnávací paměti bez vypnutí a restartování serveru.

Chcete-li vypustit čisté vyrovnávací paměti z fondu vyrovnávacích pamětí, nejprve pomocí CHECKPOINT vytvořte studenou vyrovnávací paměť vyrovnávací paměti. To přinutí všechny špinavé stránky, aby se aktuální databáze zapisovala na disk, a vyčistí vyrovnávací paměti. Poté, co to provedete, můžete vydat příkaz DBCC DROPCLEANBUFFERS a odebrat všechny vyrovnávací paměti z fondu vyrovnávacích pamětí.

10
DaveShaw

Ostatní odpovědi jsou správné z důvodů, proč ne spustit DBCC FREEPROCCACHE. Existuje však také několik důvodů:

  1. Konzistence

Pokud chcete porovnat dva různé dotazy nebo postupy, které se pokoušejí dělat totéž různými způsoby, pravděpodobně narazí na stejné stránky. Pokud naivně spustíte dotaz č. 1, pak dotaz č. 2, druhý může být mnohem rychlejší jednoduše proto, že tyto stránky byly uloženy do mezipaměti prvním dotazem. Pokud vymažete mezipaměť před každým spuštěním, začnou na sudém základě.

Pokud chcete testovat výkon hot-cache, ujistěte se, že dotazy spouštíte několikrát, střídáte a zahodíte prvních pár běhů. Průměrné výsledky.

  1. Nejhorší výkon

Řekněme, že máte dotaz, který trvá jednu sekundu proti horké mezipaměti, ale jednu minutu proti studené mezipaměti. Optimalizace, díky níž je dotaz v paměti o 20% pomalejší, ale dotaz o 20% rychleji vázaný na IO, by mohla být velkou výhrou: během normálních operací si nikdo za normálních okolností nevšimne dalších 200 ms, ale pokud něco přinutí dotaz spuštění proti disku, uložení 48 sekund místo 60 může ušetřit prodej.

To není o starosti moderních systémů s desítkami gigabajtů paměti a relativně rychlé SAN a SSD úložiště, ale stále na tom záleží. Pokud nějaký analytik spustí rozsáhlý dotaz na skenování tabulky proti vašemu = OLTP databáze, která odstraní polovinu mezipaměti vyrovnávací paměti, dotazy s efektivním úložištěm vás dostanou zpět rychleji dříve).

3