Az adatbázis teljesítményének egyik legkritikusabb változója az SQL index töredezettsége. Blokkolással, holtpontokkal, IO-problémákkal, lemezkiöntési problémákkal szembesülhetünk, ha a fragmentáltsági szintet nem megfelelően kezeljük. Nem megfelelő végrehajtási tervhez is vezethet.
DMV-k
Az SQL Serverben a sys.dm_db_index_physical_stats DMV segítségével információt kaphatunk az index töredezettségi szintről, a lapszámokról és az index típusairól.
SSMS
Használhatjuk az SSMS-ben az SQL Server beépített ‘Index Physical Statistics’ jelentéseit is
Az adatbázis fizikai indexstatisztikáit a következő formátumban kapjuk meg.
Ezt a jelentést csak adatbázis-szinten tudjuk futtatni, és ha több adatbázis van a példányban és sok példányt kell kezelnünk, akkor idő- és erőforrásigényes feladat lesz összegyűjteni a részleteket, elemezni az állapotot a küszöbértékünk alapján, majd dönteni az SQL index újjáépítéséről vagy átszervezéséről.
Egyéni szkriptek
Egyéni szkripteket is használhatunk a töredezettségi problémák észlelésére és kijavítására, de ez is egy bonyolult folyamat a kézzel történő létrehozás és az eredmények elemzése. Lehet, hogy ezeket az információkat egy központosítható helyen szeretnénk összegyűjteni, és ezután dönthetünk az indexkarbantartási politikáról. A töredezettségi szint megszüntetéséhez használhatjuk az Alter Index parancsokat. Kis adatbázisok esetében nem sokat törődünk az oldalszámokkal az index újjáépítése során, azonban nagy adatbázisok esetében ezeket is figyelembe kell vennünk.
3rd party tools
Az ApexSQL Defrag segítségével könnyen nyomon követhetjük, elemezhetjük és eltávolíthatjuk a meglévő SQL index töredezettségét. Több példányt és adatbázist is kezelhetünk egy grafikus eszközben. Az alábbi előnyöket kapjuk ettől az eszköztől.
- Grafikus felhasználói felületet biztosít az index töredezettségének felügyeletéhez és elemzéséhez
- Indexkarbantartást végezhetünk az összes SQL Server példány és adatbázis számára
- Lehetőséget biztosít az egyéni jelentések konfigurálására az igényeink alapján
- Házirendeket konfigurálhatunk az indexkarbantartási feladatok ellenőrzésére és végrehajtására az egyéni mérőszámok szerint
- Elemezhetjük (gyors vagy mély) indextöredezettséget, kitöltési tényezőt, online indexkarbantartást
- Elkészíthetjük a jelentéseket a kívánt formátumban (CSV vagy HTML)
Az ApexSQL Defrag eszköz telepítése és egy példány monitorozására történő konfigurálása után gyorsan megmutatja az SQL index töredezettségi állapotának részleteit.
Kerüljük az SQL index újjáépítési vagy átszervezési műveleteket, ha nem szükséges. Ha nagyon nagy indexeink vannak, akkor az elemzés sok időt és több rendszererőforrást vehet igénybe. Az ApexSQL Defrag lehetőséget ad a töredezettség ellenőrzésére.
- Korlátozottan: Ebben a vizsgálati módban az SQL Server korlátozott információkat gyűjt a töredezettségről. Ez nem okoz teljesítményproblémát a rendszernek. Ez az ApexSQL Defrag alapértelmezett üzemmódja
- Mintavételes: Ebben az üzemmódban az SQL index egy minta részét veszi, és összegyűjti a töredezettségi információkat
- Részletes: Részletes ismereteket kapunk az összes indexoldalról; ez némi túlterhelést okozhat a rendszer erőforrásainak, azonban használhatjuk, ha a fenti keresési módoknál magas töredezettséget észlelünk
Hasonlóképpen beállíthatjuk a töredezettségi szintet a Magas, Közepes és Alacsony kategóriában
Az indexek elemzéséhez beállíthatjuk a nyert töredezettségi küszöbértéket is.
Miután elemeztük az eredményhalmazt, kattintson a jobb gombbal az adott SQL-indexre, és több lehetőség közül választhat.
- Analyze (fast)
- Analyze (Deep)
- Reorganize\Rebuild\Rebuild online
- Set fill factor
- Szüneteltethetjük, leállíthatjuk vagy törölhetjük, ha az adott indexhez bármilyen munka fut. Hasznos, ha teljesítményproblémákat vagy blokkolást látunk egy adott index miatt, magának a munkának a leállítását is megtehetjük
Az ApexSQL Defrag lehetővé teszi a házirendek létrehozását az előre definiált sablonokból vagy az egyéni paraméterek alapján. A sablon a legtöbb SQL index defragmentálási követelményre is alkalmas.
A sablonok használatával eldönthetjük, hogy az összes indexet vagy az indexet küszöbszint alapján defragmentáljuk offline vagy online módban. Például olyan házirendet szeretnék létrehozni, hogy a 30%-nál nagyobb mértékben töredezett indexek felső 50%-át online újraépítsük, vagy újraszervezzük, ha 10%-nál nagyobb mértékben töredezettek.
A CPU, a memóriaterhelés, a tranzakciós naplóhasználat, az aktív tranzakciók tekintetében is beállíthatjuk az erőforrások küszöbértékét. A karbantartási varázsló feladatai vagy az egyéni szkriptek segítségével nem kapunk ilyen szintű ellenőrzést az index karbantartásakor.
Ha az erőforrás foglalt, beállíthatjuk az újbóli próbálkozás időzítését is. Láttam az igényeket egyes felhasználóknál, akik nem akarják a karbantartást a sovány adatbázis-használati időszak végeztével végrehajtani. Ha mi végezzük a karbantartást, akkor manuálisan kell leállítanunk a feladatot, vagy egy másik SQL-ügynöki feladatot kell létrehoznunk az indexkarbantartási feladat adott időpontban történő leállításához.
Az ApexSQL Defrag több feladat konfigurálásához és felügyeletéhez is többletköltséget biztosít. Testre szabhatjuk, hogy az index karbantartási munkát ‘N’ óraszám után leállítsuk.
A fenti képernyőképen látható, hogy tovább testre szabhatjuk az SQL index karbantartási műveletet a töredezettségi szint, az index mérete és az oldalszámok alapján is. A zárolt objektum késleltetését egy adott időpontban határozhatjuk meg. Néha ki akarjuk zárni azt az indexet, ahol az index oldalszáma kisebb vagy nagyobb, mint a megadott számok.
A módosításokat elvégezheti és sablonként konfigurálhatja, hogy újra felhasználhassa. Miután elvégeztük az index karbantartását, a Tevékenységek lapon kiváló áttekintést kapunk az index töredezettségi statisztikáiról a karbantartás előtt és után. Lényeges tudni, hogy a karbantartás után az index töredezettségi szintje kontroll alatt van-e vagy sem. Általában újra fel kell vennünk a fragmentáltsági szintet, de ezzel az információval megspórolható számunkra a többletköltség.
A Jelentések részben megtekinthetjük a jelentéseket kiszolgálói szintről, az átfogó jelentést.
A top 10 fürtözött és nem fürtözött indexekről is szép képet kaphatunk.
Az index karbantartás futása közben a CPU és a memória viselkedése is érdekel minket. Ezt a hasznos információt megkaphatjuk, és szemmel tarthatjuk a rendszer erőforrásait is.
Az összes jelentést exportálhatjuk, és beállíthatjuk az exportálási opciót. Lehet, hogy korlátozott információkat szeretnénk kinyerni a feltárás során. Az ApexSQL Defrag lehetőséget ad arra, hogy kiválasszuk, milyen információkat szeretnénk megjeleníteni, például grafikonokat, statisztikákat, SQL index statisztikai grafikonokat szeretnénk a jelentésbe foglalni.
Következtetés:
Az ApexSQL Defrag eszköz megkönnyíti a DBA-k számára az adminisztrációs feladatot a jobb SQL index felügyelet és karbantartás segítségével. Minden információt kap egy grafikus eszköz egyéni vizuális eszközökkel, irányelvekkel és különböző informatív jelentésekkel együtt.