Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A ghost cleanup egy háttérfolyamat, amely fizikailag eltávolítja a DML-utasítások által törlésre megjelölt sorokat. Az alábbi cikk áttekintést nyújt erről a folyamatról.
Szellemsorok
Az index levélszintű lapjairól törölt sorok fizikailag nem törlődnek a lapról. Ehelyett a sor a jövőbeni eltávolításra van megjelölve, vagy átmenetileg inaktívvá téve. Ez azt jelenti, hogy a sor az oldalon marad, de a sorfejléc egy kicsit módosul, hogy jelezze, hogy a sor szellem. Ez a törlési művelet során a teljesítmény optimalizálására szolgál. A szellemek szükségesek a sorszintű zároláshoz és a pillanatkép-elkülönítési tranzakciókhoz, ahol az adatbázismotornak a régebbi sorverziókat kell fenntartania.
Ghost cleanup feladat
A törlésre megjelölt vagy jelölés alatt álló sorokat az úgynevezett háttérbeli szellemtörlési folyamat törli, amikor már nincs rájuk szükség. A ghost cleanup rendszeres időközönként fut, és ellenőrzi, hogy vannak-e szellemes sorokat tartalmazó lapok. Ha talál ilyet, fizikailag eltávolítja ezeket a sorokat. Egyetlen szellemkarbantartó szál van az adatbázismotor-példány összes adatbázisához.
Ha egy sor szellemként van megjelölve, az adatbázis szellemként megjelölt bejegyzésekkel van jelölve. A szellemkarbantartási folyamat csak az ilyen adatbázisokat vizsgálja. A szellemkarbantartási folyamat azt is jelzi, hogy az adatbázis nem rendelkezik szellemes sorokkal az összes szellemes sor eltávolítása után, és kihagyja ezt az adatbázist a következő futtatáskor. A folyamat kihagy egy adatbázist is, ha nem tud közös zárolást szerezni az adatbázison. A következő futtatáskor újrapróbálkozza az adatbázis zárolási beszerzését.
Az alábbi lekérdezés megközelítőleg ennyi rejtett sort eredményez egy adatbázisban.
SELECT SUM(ghost_record_count) AS total_ghost_records,
DB_NAME(database_id) AS database_name
FROM sys.dm_db_index_physical_stats(NULL, NULL, NULL, NULL, 'SAMPLED')
GROUP BY database_id
ORDER BY total_ghost_records DESC;
Szellemkarbantartás letiltása
A sok törlést tartalmazó nagy terhelésű rendszerekben a szellemek törlési folyamata csökkentheti a teljesítményt, ha a pufferkészlet számos gyakran használt lapját lecseréli más, szellemes sorokkal rendelkező oldalakra. Ennek eredményeképpen a gyakran használt lapokat újra kell olvasni a lemezről, ami további lemez I/O-t eredményez, és növeli a lekérdezési késést. Ha ez történik, letilthatja a szellemek törlését a 661-ben használt nyomkövetési jelzővel.
A szellemek megtisztítása nélkül az adatbázis szükségtelenül nagy méretűre nőhet, ami a többlet I/O és a memóriahasználat miatt is csökkentheti a teljesítményt. Mivel a szellemkarbantartási folyamat eltávolítja a szellemként megjelölt sorokat, a folyamat letiltása ezeket a sorokat a lapon hagyja, megakadályozva, hogy az adatbázismotor újrahasználja ezt a helyet. Ez arra kényszeríti az adatbázismotort, hogy ehelyett adatokat adjon hozzá az új lapokhoz, ami blobozott adatbázisfájlokhoz vezethet, és lapfelosztásokat is okozhat. Az oldalfelosztások növelik a lemez I/O-értékét, ami csökkentheti a lekérdezési teljesítményt. Ha a szellemkarbantartás le van tiltva, előfordulhat, hogy az adatbázisnak elfogy a szabad területe.
Figyelmeztetés
A szellemkarbantartási folyamat végleges letiltása nem ajánlott.
Ha el szeretné távolítani a szellemsorokat, amikor a szellemkarbantartás le van tiltva, újraépítheti az indexeket azon táblákban, ahol a sorokat törölték. Az index újraépítése új oldalakat hoz létre a meglévő adatokból, kihagyva a szellemes sorokat a folyamatból.