által: Brady Upton | Frissítve: 2016-06-22 | Hozzászólások (5) | kapcsolódó: több > töredezettség és Index karbantartás
probléma
mindannyian hallottunk az adatbázis/index töredezettségéről (és ha még nem, folytasd az olvasást), de mi ez? Ez probléma? Honnan tudom, hogy benne van-e az adatbázisomban?Hogyan tudom megjavítani? Ezek a kérdések önmagukban is tipp lehetnek, de megpróbálok ötletet adni mindegyikről ebben a tippben.
megoldás
anélkül, hogy sok részletbe kerülne, az SQL Server 8KB-os oldalakon tárolja az adatokat. Amikor adatokat helyezünk be egy táblázatba, az SQL Server egy oldalt rendel el az adatok tárolásáhoznélkül a beillesztett adatok több mint 8KB-ot tesznek ki, amelyben több oldalra terjednének ki.Minden oldal egy táblához van rendelve. Ha 10 táblát hozunk létre, akkor 10 különböző oldalunk lesz.
amikor adatokat helyez be egy táblázatba, az adatok először a tranzakciós naplófájlba kerülnek. Aztransaction log fájl egy szekvenciális rekord, ami azt jelenti, hogy a rekordok beillesztésekor, frissítésekor és törlésekor a napló rögzíti ezeket a tranzakciókat az elejétől a végéig. Az adatfájl viszont nem szekvenciális. A naplófájl átöblíti az adatokat az adatfájlba, amely minden helyet létrehoz.
most, hogy van egy ötletünk az adatok tárolásáról, mi köze van ennekfragmentáció?
kétféle fragmentáció létezik: belső fragmentáció és külső fragmentáció.
az SQL Server belső töredezettsége
az SQL Server belső töredezettségét a túl sok szabad területtel rendelkező oldalak okozzák.Tegyük fel, hogy a nap elején van egy asztalunk 40 oldallal, amelyek 100% – ban tele vannak, de a nap végére van egy asztalunk 50 oldallal, amelyek csak80% – ban tele vannak a különböző törlés és beszúrás állítások miatt a nap folyamán.Ez problémát okoz, mert most, amikor el kell olvasnunk ebből a táblázatból, toscan 50 oldalunk van 40 helyett, ami a teljesítmény csökkenését eredményezheti.Nézzünk egy gyors és piszkos példát.
tegyük fel, hogy a következő táblázat tartalmazza az elsődleges kulcsot és a nem fürtözött indexet a FirstNameand LastName-en:
a töredezettség elemzésének módjairól később ebben a tippben fogok beszélni, de egyelőre jobb egérgombbal kattinthatunk az Indexre, kattinthatunk a tulajdonságok és a töredezettség elemre a töredezettségés az oldal teljessége megtekintéséhez. Ez egy teljesen új index, tehát 0% – os töredezettség.
szúrjunk BE 1000 Sort ebbe a táblázatba:
INSERT INTO Person VALUES('Brady', 'Upton', '123 Main Street', 'TN', 55555)GO 1000
most ellenőrizzük újra az indexünket:
láthatjuk, hogy az indexünk 75% – kal töredezett, és a teljes oldalak átlagos százaléka (az oldalak teljessége) 80% – ra nő. Ez a táblázat még mindig olyan kicsi, hogy a 75% – os töredezettség valószínűleg nem okoz teljesítményproblémákat, de a táblázat méretének növekedésével és az oldalszám növekedésével a teljesítmény romlik. Azt is látni thescreenshot felett, hogy ez a táblázat ment 0 oldalak 4.
SQL Server külső töredezettség
a külső töredezettséget a nem megfelelő oldalak okozzák. Tegyük fel, hogy a nap elején van egy tökéletesen rendezett asztalunk. A nap folyamán több száz frissítési nyilatkozatot adunk ki, amelyek esetleg üres helyet hagynak az egyik oldalon, és megpróbálják beilleszteni a helyet más oldalakba. Ez azt jelenti, hogy a tárhelyünknek körbe kell ugrania, hogy megszerezze a szükséges adatokat, ahelyett, hogy egy irányba olvasna.
az SQL Server töredezettségének elemzése
tehát a töredezettség probléma? Azt hiszem, az. Ha a teljes adatbázist tárolhatja a memóriában, vagy ha az adatbázisa csak olvasható, akkor nem aggódnék, de a legtöbbünknek nincs ilyen luxusa.Több ezer szerveren dolgoztam, és a fragmentációs szintek elemzése az egyik első dolog, amit megvizsgálok. Valójában, csak a töredezettség rögzítésével, 200% – os javulást láttam a lekérdezés teljesítményében.
a fragmentációs szintek elemzéséről szólva kíváncsi lehet, hogyan tehetjük ezt meg. Nos, van néhány módszer …
DBCC SHOWCONTIG-ez a funkció régi, és az SQL Server jövőbeli verzióiban eltávolításra kerül, de ha még mindig az SQL Server 2000-et használja, ez segít. Ahelyett, hogy írnék róla, ide mutatok, vagy megnézheted Chad Boyd rejtjelét. Mindkettő jó erőforrás.
sys.dm_db_index_physical_stats – az SQL Server 2005-ben bevezetett dinamikus menedzsment nézet (DMV) a megadott táblázat vagy nézet adatainak és indexeinek méretét és töredezettségét adja vissza.
SELECT OBJECT_NAME(ips.OBJECT_ID) ,i.NAME ,ips.index_id ,index_type_desc ,avg_fragmentation_in_percent ,avg_page_space_used_in_percent ,page_countFROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'SAMPLED') ipsINNER JOIN sys.indexes i ON (ips.object_id = i.object_id) AND (ips.index_id = i.index_id)ORDER BY avg_fragmentation_in_percent DESC
valószínűleg ez a legelterjedtebb módszer a fragmentáció elemzésére. A fenti képernyőképen láthatja, hogy van egy ix_rpcust_1 nevű indexem a theRPCust táblán, amely 98,83% – ban töredezett. További információkat láthat erről a DMV-ről Arshad Ali-tól.
harmadik féltől származó szoftver – harmadik féltől származó szoftver segít azonosítani fragmentationto nem kell. Greg Robidoux jó tippet kínál az Idera SQL Defrag Managerhere-hez.
az SQL Server töredezettségének rögzítése
most, hogy megtaláltuk a töredezettséget az adatbázisban, hogyan javítsuk meg? Tetszikaz indexek elemzése többféle módon lehetséges.
SQL Server Maintenance plans-a Maintenance plans az Sqlserverrel együtt kerül szállításra,és néhány feladathoz jó. Az Index karbantartása véleményem szerint nem az egyikőket. Hozzáadhat egy újraépítési indextevékenységet vagy átszervezheti az indextevékenységet a maintenanceplanba, de a probléma az, hogy nem igazán alkalmazhat logikát a tervre. Withoutlogic, a terv újjáépíti/átszervezi minden index. Egyes indexek nemtöredezett, így nem kell újjáépíteni. Egyes indexek lehet minimális fragmentationso lenne rendben egy átszervezés. Ezt nem lehet meghatározni a maintenanceplan-ban. InSQL Server 2016 új lehetőségek vannak a töredezettség kezelésére.
Custom Script-Az egyéni szkriptek valószínűleg az út, mert tealkalmazhat logikát az index töredezettségének ellenőrzésére, majd eldöntheti, hogy kihagyja-e az indexet, átszervezi-e vagy újjáépíti-e. Felhasználom Eola Hallengren írásaités pontosan azt teszik, amire szükségem van. MSSQLTips.a com is rendelkezik ezekkel a forrásokkal -az SQL Server töredezettsége és az Index karbantartási tippjei.
harmadik féltől származó szoftver-harmadik féltől származó szoftver segít töredezettségmentesíteni az indexeketígy nem kell.
következő lépések
- ez a tipp ötletet ad az indexfragmentációban részt vevő néhány összetevőről. MSSQLTips.com átfogóbb tippeket kínál, amelyek az általam említett témákra összpontosítanakitt.
- győződjön meg róla, hogy nézd meg outChad Boyd SQL Server töredezettség bemutató, amely nagyszerű insightinto számos téma tekintetében töredezettség
Utolsó frissítés: 2016-06-22
About the author
View all my tips
- More SQL Server DBA Tips…