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...