Dbcc checkdb nagyon nagy adatbázisokhoz, Windows pro pro-hez

A DBCC CHECKDB egy T-SQL parancs, amely ellenőrzi a megadott adatbázisban lévő összes objektum logikai és fizikai integritását. A legtöbb adatbázis-kezelő (DBA) valószínűleg nem igazán gondol a DBCC CHECKDB futtatásának szabályosságára - mindaddig, amíg az adatbázisok nagyon nagyok lesznek.

IT infrastruktúra az Ön vállalkozása számára

A DBCC CHECKDB egy T-SQL parancs, amely ellenőrzi a megadott adatbázisban lévő összes objektum logikai és fizikai integritását. A legtöbb adatbázis-kezelő (DBA) valószínűleg nem igazán gondol a DBCC CHECKDB futtatásának szabályosságára - mindaddig, amíg az adatbázisok nagyon nagyok lesznek. Egy bizonyos pontból, ha az adatbázis mérete jelentősen nő, akkor a DBCC CHECKDB futtatása során különböző problémákkal kell szembenézni. Például a DBCC CHECKDB folyamat befejezéséhez szükséges idő tényleges akadály lehet. Ezenkívül előfordulhat, hogy nincs elég szabad hely a DBCC CHECKDB végrehajtása során készített pillanatfelvételekhez.

Az 1. lista egy szkriptet tartalmaz a napi kiszolgáló karbantartására, amely a ServerDailyMaintenance.txt néven fut. A parancsfájl futtatásakor létrehozza az Adminisztrációs feladat feladatot az SQL Server Agent szolgáltatáshoz. Ez a feladat a rendszergazda számára az egyetlen feladat, amelyet valójában terveznek futtatni, de létrehozza vagy módosítja, és valójában megkezdi az előadóművész feladatának végrehajtását.

Az 1. ábra az Admin Job script parancs fő lépése, amely az msdb.dbo.mnt_DBCC tárolt eljárást futtatja.

Dbcc checkdb nagyon nagy adatbázisokhoz, Windows pro pro-hez

A 2. lista tartalmazza az mnt_DBCC tárolt eljárás leírását. Ez az eljárás azonosítja a rendelkezésre álló adatbázisokat, és folytatja a feladat végrehajtását a végrehajtónak, a Maintenance_DBCC_CHECKDB.

A 2. ábra bemutatja az mnt_DBCC eljárás paramétereit és azok lehetséges értékeit, beleértve az egyes értékek céljáról szóló információkat.

Dbcc checkdb nagyon nagy adatbázisokhoz, Windows pro pro-hez

Dbcc checkdb nagyon nagy adatbázisokhoz, Windows pro pro-hez

A feladat létrejön és elindul a feladatról az adminisztrátorra (Admin Feladat) és a Maintenance_DBCC_CHECKDB néven. A művészi munka minden lépése tartalmazza a hibák ellenőrzésének következő lépését. A 4. ábra egy példakénti kiviteli alakja egy munkát lépésben végrehajtója AdventureWorks alapadatok, amelyek esetében a paraméter értékét @VLDB értéke 1, és a paraméter értékét egyenlő @days 7.

Az Admin / Worker Job koncepció használata azt jelenti, hogy minden munkafolyamat dinamikusan generálódik, éjszakai módosítással. Nem fogod elveszíteni a Worker Job munkaköri előzményeit, mert ez a feladat minden alkalommal frissítésre kerül, de nem törölve és újra létrehozva.

Hogyan működik az @VLDB paraméter?

Ha a paraméter értéke 0, akkor a Worker Job elindít egy egyszerű DBCC CHECKDB folyamatot. Ha a @VLDB egyenlő 1 -nel, a "Magic" fog bekövetkezni. Határozza meg a környezete számára a @days paraméter megfelelő értékét, amely segít kiválasztani és tesztelni.

Ha a paraméter értéke 1 @VLDB tárolt mnt_DBCC végez hívja mnt_DBCC_VLDB eljárás ellenőrzi az összes felhasználói táblák, rendszer táblák, indexelt ábrázolás egy adatbázisban belső táblázatokat, és meghatározza a mérete minden. Ezt követően az összes táblázatot N csoportokra osztjuk, amelyek száma megegyezik a @days paraméterben megadott értékkel. A cél az volt, hogy a táblázatokat a lehető legegyenletesebben csoportokra csoportosítsák, hogy kiegyenlítsék az éjszakai terhelést a szerveren. A táblák minden csoportja megkapja a számát (VLDB_GROUP) a @days paraméter értékétől függően. A csoport számát, amellyel ma kell dolgoznia, a következő képlet határozza meg:

Ez a képlet azt jelenti, hogy minden további csoport feldolgozásra kerül, függetlenül attól, hogy mikor kezdődött a munka. A feladat mindig "tudja", hogy mely csoportszámok már elteltek, és melyik lesz a következő üzemben, ezért nincs szükség adatainak mentésére a táblázatban.

Az @VLDB paraméter működésének megértéséhez vegye figyelembe a példát.

Tegyük fel, hogy 10 táblázata van, és a @days értéke 2 értékre van állítva. A tárolt eljárás megkeresi a táblázatokat, és meghatározza azok méretét; akkor a legnagyobb táblát a csoportba helyezi (VLDB_Group = 0); a következő legnagyobb az 1. csoport (VLDB_Group = 1), majd visszatérünk a csoporthoz, és így ciklikusan, amíg az összes táblázatot csoportosítjuk. Amikor futtatja a lekérdezést

ennek eredményeképpen 0 vagy 1. Ha ma 0, akkor holnap lesz 1, holnapután - 0, és így tovább. A táblák minden csoportját feldolgozni fogják, anélkül, hogy információt tárolnának arról, hogy mely csoportok mely táblákhoz tartoznak. És mi történik, ha a második legnagyobb asztal ma nő, és holnap lesz a legnagyobb asztal? Ez a táblázat ki lesz hagyva, így holnap fog mozogni a csoporthoz 0. Mi van, ha a 1. és 2. táblázatok egyidejűleg növekszik vagy csökken, de úgy, hogy relatív mérete változatlan marad? Ebben az esetben mindkét táblát időben feldolgozzák. Leggyakrabban a legnagyobb tábla mindig a legnagyobb; a második legnagyobb lesz a második és így tovább; így egyetlen táblázat sem kerül kihagyásra, mert a táblák relatív méretei nem változnak. Ha azt szeretné, hogy a táblázatok egyike sem maradjon le a feldolgozási ciklusban, akkor még módosítania kell a kódot a speciális táblázatban tárolt nevekkel. Mentse például a ciklus első napján a csoportokat, és a teljes időszakra hivatkozzon erre a táblázatra. Ezenkívül ellenőrizni kell, hogy az első napi kiválasztás óta nincsenek táblázatok törölve vagy hozzáadva. Most a táblák méretének megváltoztatása nem jelent gondot (például ha a legnagyobb asztal ma a második legnagyobb holnap).

Amikor a paraméter @VLDB, székhelye: 1, létrehoz egy feladatot előadóművész, hogy minden indításnál is végez DBCC CHECKALLOC, és DBCC CHECKCATALOG (amint a 4. ábrán látható).

Dbcc checkdb nagyon nagy adatbázisokhoz, Windows pro pro-hez

Használati utasítások

Beállítása DBCC CHECKDB, leírt módszerrel Admin / Worker Job, teljesen ésszerű, rugalmas, és nem igényel további támogatás: futtathatja az adatok alapján bármilyen méretben. A feladat automatikusan végrehajtódik az összes hozzáadott adatbázisban, kivéve a korábban törölteket. Ezenkívül a munkakód azonosítja az adatbázisokat - a tükrözött tükröket és azokat, amelyek valamilyen más okból offline állapotban vannak. Meghatározhatja, hogy a feladatot csak rendszer vagy csak fizikai adatbázisok esetén végezzék el. És ami a legfontosabb, telepítheti a DBCC CHECKDB terhelést bármilyen beállítandó napra.

1. lista ServerDailyMaintenance.txt

1. lista ServerDailyMaintenance.txt (vég)

Lista 2 mnt_DBCC.txt

Lista 2 mnt_DBCC.txt (folytatás)

Listázás 2 mnt_DBCC.txt (end)

Lista 3 mnt_DBCC_VLDB.txt

Lista 3 mnt_DBCC_VLDB.txt (vég)