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

Czy zła praktyka to NOLOCK (wskazówka dotycząca serwera SQL)?

Przed pracą nad Stack Overflow byłem przeciwny NOLOCK na zleceniodawcy, który potencjalnie mógłbyś wykonać SELECT z NOLOCK i odzyskaj wyniki z danymi, które mogą być nieaktualne lub niespójne. Czynnikiem do rozważenia jest to, ile rekordów może być wstawionych/zaktualizowanych w tym samym czasie, kiedy inny proces może wybierać dane z tej samej tabeli. Jeśli zdarza się to często, istnieje duże prawdopodobieństwo zakleszczenia, chyba że używasz trybu bazy danych, takiego jak READ COMMITED SNAPSHOT .

Od tego czasu zmieniłem moje spojrzenie na używanie NOLOCK po obejrzeniu, jak może ulepszyć SELECT wydajność, a także wyeliminować zakleszczenia na masowo obciążonym serwerze SQL Server. Czasami możesz nie dbać o to, że Twoje dane nie są dokładnie w 100% zatwierdzone i potrzebujesz szybkich wyników, nawet jeśli mogą być nieaktualne.

Zadaj sobie pytanie, gdy myślisz o użyciu NOLOCK :

Czy moje zapytanie zawiera tabelę z dużą liczbą INSERT? /UPDATE poleceń i czy obchodzi mnie, czy dane zwrócone z zapytania mogą w danym momencie nie zawierać tych zmian?

Jeśli odpowiedź brzmi nie, użyj NOLOCK w celu poprawy wydajności.

Właśnie wykonałem szybkie wyszukiwanie NOLOCK słowa kluczowego w bazie kodu dla Stack Overflow i znaleźliśmy 138 wystąpień, więc używamy go w wielu miejscach.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie DateTime w SqlParameter dla procedury składowanej, błąd formatu

  2. Zwróć informacje o kolumnie dla procedury przechowywanej w programie SQL Server:sp_sproc_columns

  3. Co to jest schemat w programie SQL Server i jak utworzyć/upuścić schemat w bazie danych programu SQL Server — samouczek SQL Server / TSQL, część 27

  4. Zapytanie SQL, aby podzielić dane kolumny na wiersze

  5. Zapytanie o pierwszy wiersz aktualizacji SQL