DBCC (Database console commands) – Velký přehled

DBCC je zkratka pro database console commands, kdy jsou příkazy prováděné nad určitou databází. Sada DBCC příkazů umožňuje vykonávat určité administrační operace nebo dotazy nad databázemi formou skriptování místo používání grafického rozhraní management studia. Pro exekuci těchto příkazů musíte mít většinou velmi silnou roli (sysadmin, serveradmin, db_owner, atp).

Příkazy se dělí do několika skupin:

  • Údržba (maintenance) – skupina příkazů vykonávajících operace provádějící údržbu nad tabulkami, indexy nebo soubory
  • Informační – po spuštění těchto příkazů se zobrazí nějaká informace o dané databázi
  • Validační – příkazy, které ověřují konzistenci objektů
  • Ostatní – zapínání a vypínání nějaké funkcionality

Obecně se nedoporučuje většinu příkazů vůbec pouštět pokud nemáte velmi silné znalosti administrace SQL Server. Níže uvedu příklady zajímavých příkazů. Červeně jsou označeny příkazy, které mohou mít dočasně dramatický dopad na výkon.

Maintenance DBCC

DBCC DBREINDEX – provede REBUILD indexu pro danou tabulku

DBCC DROPCLEANBUFFERS – pokud je nějaký dotaz pouštěn opakovaně, tak SQL Server ukládá výsledek do buffer poolu aby dokázal výsledek rychleji načíst. Tento příkaz se používá pokud chceme třeba testovat dotazy s čistým buffer poolem

(!) DBCC FREEPROCACHE – nebezpečný příkaz. Provede vyčištění cache a exekučních plánů. Může vést ke značnému zpomalení pravidelně opakujících se dotazů – než se znovu vytvoří plány tak to nějakou dobu trvá. Někdy se tento DBCC command používá pokud chceme záměrně plány vyčistit např. proto, že jsou nad databázi provedeny takové změny, pro které jsou staré exekuční plány neefektivní a chceme je načíst znovu.

(!) DBCC SHRINKDATABASE – provede shrink datových (.mdf, .ndf) a logovacích (.ldf) souborů. Používá se pokud máme u databáze mnoho nealokovaného prostoru (např. db 100 GB a unallocated space 50GB. Po provedení shrinku se velikost datového souborů změnší na 50GB. Pozor shrink trvá velmi dlouho. Tento příkaz nemaže data z databáze. To znamená, že kapacitu uvolňuje pouze z nevyužitého prostoru na databázovém souboru. Po provedení shrinku se dramaticky zvýší fragmentace indexů a je tedy potřeba provést jejich údržbu (REBUILD nebo REORGANIZE). Během shrinku dojde k exkluzivnímu locku nad objekty a k snížení použitelnosti DB. Je proto vhodné shrink používat co možná nejméně a mimo business hours.

(!) DBCC SHRINKFILE – funguje podobně jako shrinkdatabase s tím rozdílem, že SHRINKFILE provádí shrink pouze nad 1 souborem kdežto SHRINKDATABASE nad všemi soubory, které jsou přiřazeny k dané databázi.

Příklad na SHRINKDATABASE: Mějme volně dostupnou sample databázi Microsoftu AdventureworksDW2016CTP3, která má 2 soubory:

  • primární AdventureworksDW2016CTP3_Data.mdf (5334 MB)
  • logovací AdventureworksDW2016CTP3_Log.ldf (147 MB)

dbcc shrinkdatabase

(1) Pomocí skriptu na zjištění velikostí objěktů v databázi (viz. článek SQL Počet řádků a velikost tabulek v databázi + skript) si nechám zobrazit seznam objektů a jejich velikostí a jeden z nich vymažu. Rozhodl jsem se vymazat objekt FactResellerSalesXL_PageCompressed a tím uvolnit 2508 MB.

shrinkdatabase priklad

(2) Přes vlastnosti databáze nebo systémovou proceduru sp_spaceused zjistím aktuální velikost databáze a vidím že velikost datového souboru se nezměnila, ale zvýšil se nevyužitý prostor přesně o kapacitu vymazaného objektu z předchozího kroku.

sp_spaceused

(3) Pokud chci takto nevyužitý prostor fyzicky uvolnit, musím provést SHRINKDATABASE. Musím počítat s tím, že příkaz pojede delší dobu. Doba trvání nad 5GB databází byla 13 minut

SHRINKDATABASE - stav poté

Informační DBCC

Informační příkazy nejsou nebezpečné, nic nedělají a pouze zobrazují informace:

DBCC INPUTBUFFER – užitečný příkaz, zobrazí text posledního spuštěného SQL příkazu v rámci nějaké session. (Syntaxe je DBCC INPUTBUFFER (cislo session))

DBCC OPENTRAN – zobrazí informace o naposledy otevřených transakcích

DBCC SHOW_STATISTICS – zobrazí seznam statistik nad určitou tabulkou

DBCC SHOWCONTIG – zobrazí informace o fragmentaci určitého objektu

DBCC SHOWCONTIG

Validation DBCC

V této skupině příkazů najdeme ty, které vykonávají nějaké kontrolní operace (mají prefix CHECK). Uvedu pouze 1 nejduležitější příkaz.

DBCC CHECKDB – jednou za čas by měl pravidelně pouštět každý db admin. Provede kontrolu konzistence databáze (fyzické i logické konzistence). Provádí kontrolu všech objektů v dané databázi. Kategorie validation obsahuji i jiné (CHECKALLOC, CHECKCATALOG, CHECKCONSTRAINTS, atp), ale příkaz CHECKDB pokryje všechny z nich, proto je tu neuvádím.

DBCC-CHECKDB

Více informací o DBCC příkazech najdete na webu Microsoft, v kategorii About DBCC a dalších podstránek dokumentace

_______________________________________________________________________________________________
Intelligent technologies - podniková řešení a školení
DBCC (Database console commands) – Velký přehled
Hodnocení

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

This site uses Akismet to reduce spam. Learn how your comment data is processed.