2013. szeptember 18., szerda

Rebuild vs Reorganize index

Üdv!


Kaptam pár kérést mostanában, hogy szükség lenne egy átlátható összegzésre az adatbázis indexeiről, és azok fragmentálásáról de a lehető legegyszerűbb scripttel...

Előre bocsátom, hogy most nem megyek bele a Rebuild kontra Reorganize témába mélyen, most csak a tűzoltó jellegű munkához szorosan kapcsolódó script és a rebulid/reorg használata kerül szóba. A többi majd legközelebb.


Nos a rossz hírem az, hogy DMV-ket és a rendszertáblákat össze kell kötni ahhoz, hogy ezt a célt elérjük, de azért próbálok egy lényegre törőt összerakni.

SELECT object_name(IPS.object_id) AS [Táblanév], 
   SI.name AS [Indexnév], 
   IPS.Index_type_desc, 
   IPS.avg_fragmentation_in_percent as [Százalékban kifejezett menny.], 
   IPS.avg_fragment_size_in_pages
FROM sys.dm_db_index_physical_stats(db_id(N'IDE_JÖN_AZ_ADATB_NEVE'), NULL, 
NULL,NULL , 'DETAILED') IPS
   JOIN sys.tables ST WITH (nolock) ON IPS.object_id = ST.object_id
   JOIN sys.indexes SI WITH (nolock) ON IPS.object_id = SI.object_id AND 
   IPS.index_id = SI.index_id
WHERE ST.is_ms_shipped = 0
ORDER BY SI.name
  
Ha az indexek 30% felett vannak töredezve, akkor érdemes a REBUILD -el újraépíteni az 
indexfát.Ha alatta van, akkor pedig jöhet a REORGANIZE.

Használatuk elég egyszerű, annyit kell mindössze tenni, hogy :

ALTER INDEX index_nevem ON sémanév.táblanév REBUILD

vagy

ALTER INDEX index_nevem ON sémanév.táblanév REORGANIZE
   

Érdemes a Rebuildnél egyből megadni a Fillfactor értékét, hogy a Pagek kihasználtsága egyből be is legyen állítva. (Mert az alap beállítás nem szerencsés, de erről majd máskor)

A Fillfactor beállítása pedig így nézne ki: REBUILD WITH (FILLFACTOR = 85)

Ekkor 85% -os kihasználtságot "engedélyezünk" a Pageken, ami azért lehet célszerű, mert így marad egy kevés hely egy-egy pici Updatenek is :)

De ez már más téma...