sql >> Databáze >  >> RDS >> Sqlserver

Diagnostika zablokování v SQL Server 2005

Podle MSDN:

http://msdn.microsoft.com/en-us/library/ms191242.aspx

Když jsou volby databáze READ COMMITTED SNAPSHOT nebo ALLOW SNAPSHOT ISOLATION ZAPNUTY, jsou uchovávány logické kopie (verze) pro všechny úpravy dat provedené v databázi. Pokaždé, když je řádek upraven konkrétní transakcí, ukládá instance databázového stroje verzi dříve potvrzeného obrázku řádku v databázi tempdb. Každá verze je označena pořadovým číslem transakce transakce, která provedla změnu. Verze upravených řádků jsou zřetězeny pomocí seznamu odkazů. Nejnovější hodnota řádku je vždy uložena v aktuální databázi a je zřetězena k verzovaným řádkům uloženým v databázi tempdb.

U krátkodobých transakcí se může averze upraveného řádku uložit do mezipaměti ve fondu vyrovnávacích pamětí, aniž by došlo k zápisu do diskových souborů databáze tempdb. Pokud je potřeba verzovaného řádku krátkodobá, bude jednoduše vyřazen z fondu vyrovnávacích pamětí a nemusí nutně představovat režii I/O.

Zdá se, že za dodatečnou režii existuje mírná výkonnostní penalizace, ale může být zanedbatelná. Měli bychom otestovat, abychom se ujistili.

Zkuste nastavit tuto možnost a ODSTRANIT všechny NOLOCKy z dotazů na kód, pokud to není opravdu nutné. NOLOCKs nebo použití globálních metod v popisovači kontextu databáze pro boj s úrovní izolace databázových transakcí jsou náplasti na problém. NOLOCKS zakryje základní problémy s naší datovou vrstvou a možná povede k výběru nespolehlivých dat, kde se automatický výběr/aktualizace verzí řádků zdá být řešením.

ALTER Database [StackOverflow.Beta] SET READ_COMMITTED_SNAPSHOT ON


  1. Načte záznamy, které jsou nenulové za desetinnou čárkou v PostgreSQL

  2. Cizí klíč MySQL InnoDB mezi různými databázemi

  3. Jak rozdělím oddělený řetězec na serveru SQL bez vytvoření funkce?

  4. Odstraňování problémů s docházejícími pracovními vlákny