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

Složený příkaz t-SQL způsobuje uváznutí, máte ponětí proč?

Buď musíte držet více zámků, nebo méně.

Nejjednodušší odpovědí je zvolit buď NOLOCK (nejlepší výkon) nebo TABLOCKX (důslednost bez nutnosti přemýšlet).

Pokud nemůžete použít with (nolock) kvůli požadavkům na konzistenci můžete přidat with (tablockx) .To bude v podstatě znamenat, že pouze jedno vlákno může provádět podobné příkazy najednou - nedojde k žádné souběžnosti.

Alternativou je mnohem podrobnější analýza vašich požadavků, což nelze provést bez pochopení, proč tabulku aktualizujete, k čemu jsou data atd.

Musí například toto prohlášení skutečně být součástí transakce? Voní to jako úklid:

  DELETE FROM [dbo].[t_Log_2] 
  WHERE [idtm]<'2011-03-12 08:41:57';

Pokud to z transakce vyjmete a vložíte do samostatné dávky, může se stát, že problémy zmizí.




  1. Optimalizace jednoduchého výběru mysql na velké tabulce (75 milionů+ řádků)

  2. Vnořený příkaz Vložit do a vybrat

  3. Jak najdu krabici správné velikosti pro každý produkt?

  4. Testování funkce Oracle to_date