Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Instrukcja złożona t-SQL powoduje impas, jakiś pomysł, dlaczego?

Musisz trzymać więcej lub mniej zamków.

Najłatwiejszą odpowiedzią jest wybranie NOLOCK (najlepsza wydajność) lub TABLOCKX (konsekwencja bez myślenia).

Jeśli nie możesz użyć with (nolock) ze względu na wymagania dotyczące spójności możesz dodać with (tablockx) .To skutecznie oznacza, że ​​tylko jeden wątek może wykonywać podobne instrukcje na raz - nie będzie współbieżności.

Alternatywą jest bardziej szczegółowa analiza wymagań, czego nie można zrobić bez zrozumienia, dlaczego aktualizujesz tabelę, do czego służą dane itp.

Na przykład, czy to oświadczenie naprawdę musi znajdować się w transakcji? Pachnie jak sprzątanie:

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

Jeśli usuniesz to z transakcji i umieścisz w osobnej partii, może się okazać, że problemy znikną.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać indeksu w zapytaniu SQL

  2. Kopia zapasowa SQL Server 2017 -2

  3. Co to jest protokół TDS w wersji 8.0 i dlaczego powinienem go używać?

  4. Jak przekazać parametry z wartościami przechowywanymi w tabeli (parametry podobne do tablicy) do procedury przechowywanej w programie Microsoft SQL Server 2008 R2 przy użyciu JDBC?

  5. Napraw komunikat 512 „Podzapytanie zwróciło więcej niż 1 wartość” w SQL Server