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ń.