Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Čištění duchů je proces na pozadí, který fyzicky odebere řádky označené k odstranění databázovými příkazy DML. Následující článek obsahuje přehled tohoto procesu.
Řádky duchů
Řádky odstraněné ze stránek na úrovni listu indexu nejsou fyzicky odstraněny ze stránky. Místo toho je řádek označený pro budoucí odebrání nebo stínování. To znamená, že řádek zůstane na stránce, ale v hlavičce řádku se drobně změní bit, který označuje, že je řádek považován za ducha. Toto slouží k optimalizaci výkonu během operace odstranění. Ghosts jsou nezbytné pro uzamykání na úrovni řádků a pro transakce izolace snímků, kde databázový stroj musí udržovat starší verze řádků.
Ghost cleanup – úloha
Řádky, které jsou označené k odstranění nebo označené jako ghosted, se vyčistí procesem čištění na pozadí, když už nejsou potřeba. Čištění duchů se pravidelně spouští a kontroluje, jestli některé stránky obsahují stínové řádky. Pokud nějaký najde, fyzicky odebere tyto řádky. V instanci databázového stroje existuje jedno vlákno čištění duchů pro všechny databáze.
Když je řádek stínový, databáze se označí jako položky, které mají stínové položky. Proces čištění duchů prohledává pouze takové databáze. Proces čištění duchů také označí databázi jako bez stínových řádků, jakmile se odeberou všechny řádky s stíny, a při příštím spuštění tuto databázi přeskočí. Proces také přeskočí jakoukoli databázi, pokud nemůže získat sdílený zámek v databázi. Při příštím spuštění databáze opakuje pokusy o získání zámku.
Následující dotaz vrátí přibližný počet neviditelných řádků v databázi.
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;
Zakázání čištění duchů
V systémech s vysokou zátěží a mnoha odstraněními může proces čištění přízraků snížit výkon, pokud nahradí mnoho často přístupných stránek ve fondu vyrovnávací paměti jinými stránkami, které mají přízračné řádky. V důsledku toho se často přístupné stránky musí znovu číst z disku, generovat další vstupně-výstupní operace disku a zvýšit latenci dotazů. Pokud k tomu dojde, můžete zakázat čištění duchů pomocí příznaku trasování 661.
Bez čištění duchů může databáze zbytečně zvětšovat, což může také snížit výkon kvůli dodatečné spotřebě vstupně-výstupních operací a paměti. Protože proces úklidu duchů odstraní řádky, které jsou označené jako duchové, zakázání procesu ponechá tyto řádky na stránce, což brání databázovému systému v opakovaném použití tohoto prostoru. To vynutí, aby databázový stroj místo toho přidal data na nové stránky, což vede k blouděných databázových souborů a může také způsobit rozdělení stránek. Rozdělení stránek zvyšuje vstupně-výstupní operace disku, což může snížit výkon dotazů. Pokud je čištění duchů zakázané, databáze může dojít místo.
Výstraha
Trvalé zakázání procesu čištění duchů se nedoporučuje.
Pokud chcete odebrat přízračné řádky, když je čištění přízraků zakázané, znovu sestavte indexy u tabulek, ze kterých byly řádky odstraněny. Opětovné sestavení indexu vytvoří nové stránky z existujících dat a vynechá v procesu stínové řádky.