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

Blokowanie, blokowanie, blokowanie w DBA Drzwi z blokowaniem SQL Server

Chociaż wszyscy wiemy, że blokowanie jest niezbędne dla integralności danych, nie zmienia to faktu, że może to być poważnym cierniem w twoim boku!

Kiedy widzimy blokowanie w naszej bazie danych, często zakładamy, że coś jest nie tak – nie zawsze tak jest. Z mojego doświadczenia wynika, że ​​większość blokowania SQL Server jest uzasadniona, ale należy to zbadać i zrozumieć. Z drugiej strony zakleszczenia rzadko są uzasadnione! Zakleszczenia są uważane za krytyczne w świecie SQL Server, ponieważ procesy są zabijane automatycznie, ponieważ SQL Server rozwiązuje zakleszczenia bez konieczności interwencji ręcznej. Ponownie, nawet jeśli są „rozwiązane”, zdecydowanie należy je zbadać i zrozumieć.

Istnieje kilka strategii projektowania, które mogą pomóc w ograniczeniu występowania blokad i zakleszczeń SQL Server w Twojej bazie danych:

  • Użyj indeksów klastrowych w tabelach o dużym natężeniu
  • Unikaj instrukcji SQL o dużej liczbie wierszy
  • Rozdziel długie transakcje na wiele krótszych transakcji
  • Upewnij się, że instrukcje UPDATE i DELETE używają indeksów
  • Nie planuj nakładania się zadań aktualizacji zbiorczej
  • Aktualizuj swoje statystyki

I jestem pewien, że jest ich o wiele więcej, ale w rzeczywistości możesz postępować zgodnie ze wszystkimi najlepszymi praktykami, jakie możesz wymyślić, i nadal mieć blokady i impasy. Dzieje się tak, ponieważ w większości przypadków zakleszczenia są powodowane przez źle zaprojektowany kod aplikacji. (Królicza dziura w projektowaniu aplikacji:kodowanie, izolacja transakcji i wzorce dostępu. Ale na razie skupmy się na badaniu i zrozumieniu blokowania i zakleszczeń).

Blokowanie i zakleszczenia serwera SQL

Pierwszym wyzwaniem związanym z blokowaniem i zakleszczeniem jest określenie, kiedy i gdzie mają one miejsce, ponieważ zwykle nie są one zgłaszane, zgłaszane po fakcie lub rozwiązywane automatycznie. Aby naprawdę zrozumieć, co dzieje się w Twojej bazie danych w zakresie blokowania i zakleszczeń, musisz zobaczyć ich występowanie w czasie. Ponadto, aby naprawić problem i powstrzymać przyszłe zdarzenia, musisz dotrzeć do pierwotnej przyczyny blokowania - uzbroić się w informacje, które musisz przekazać twórcom aplikacji, a tym samym zakończyć grę w obwinianie między programistami i DBA.

Dlatego bardzo lubię Analizator obciążenia w chmurze Spotlight. Mogę wybrać zakres czasu – godzinę, dzień lub zakres niestandardowy – i wyświetlić Blokada działalność związaną z tym zakresem. Od razu lepiej rozumiem, co się dzieje! Widzę wzorce blokowania, porównuję tempo blokowania w czasie z poprzednim przedziałem czasowym, widzę tempo blokowania w określonym przedziale czasowym i przeglądam kluczowe wskaźniki blokowania, takie jak blokowanie wykluczające, udostępniane i aktualizowane.

Więc teraz chcę dotrzeć do głównej przyczyny – właśnie tam drzewo wymiarów wejdzie. Mogę drążyć i filtrować informacje dla określonych ram czasowych, co pozwala mi zobaczyć te same informacje w głębszych wymiarach, takich jak Bazy danych , Użytkownicy , Programy i Oświadczenia SQL , jednocześnie odfiltrowując „biały szum” – wyraźnie identyfikując źródła mojego problemu.

Tutaj patrzę, które bazy danych doświadczają największego blokowania w zakresie czasu:

Teraz omówię Użytkownicy w wybranej bazie danych:

Następnie wybiorę, aby zobaczyć listę Oświadczeń SQL powodując blokowanie, które zostało wykonane przez wybranego użytkownika w wybranej bazie danych dla określonego zakresu czasu .

Teraz widzę wszystkie Blokowanie informacje pokrewne dla wybranej instrukcji SQL .

Więc jeśli chcesz dotrzeć do sedna swoich problemów z blokowaniem, blokowaniem i zakleszczeniem, polecam sprawdzić Spotlight Cloud. Spotlight Cloud sprawia, że ​​badanie i zrozumienie problemów z blokowaniem w bazie danych jest łatwiejsze niż kiedykolwiek, a ostatecznie zapewnia, że ​​kod aplikacji jest wolny od zakleszczeń.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 sygnatury czasowe wstawiania i aktualizowania wierszy

  2. Koniec wsparcia dla SQL Server 2008 i 2008 R2

  3. Czy mogę ustawić domyślny schemat dla procedury składowanej?

  4. Znaleźć prawdziwą nazwę kolumny aliasu używanego w widoku?

  5. Jak znaleźć nazwę ograniczenia w SQL Server