Blokowanie SQL Server jest normalną cechą systemów baz danych SQL Server. Blokowanie występuje, gdy SQL Server obsługuje żądania od wielu klientów, a różne procesy żądają tych samych zasobów w tym samym czasie. Jeśli zasób jest w użyciu, jest zablokowany i niedostępny dla kolejnych żądań, więc proces jest opóźniany do momentu zwolnienia zasobu i ponownego udostępnienia. Bloki programu SQL Server zwykle rozwiązują się same bez zauważalnego wpływu na wydajność. Jednak czasami bloki powodują obniżenie wydajności, ponieważ proces początkowy blokuje zasób na dłuższy czas przed jego zwolnieniem lub dlatego, że proces początkowy w ogóle nie zwalnia zasobu, co sprawia, że zasoby są niedostępne, dopóki blok nie zostanie rozwiązany ręcznie.
Gdy zestaw zasobów jest zablokowany przez znaczną ilość czasu, jakość wydajności spada do tego stopnia, że użytkownicy systemu zaczynają zauważać problemy. Problemy te obejmują takie rzeczy, jak długi czas wykonywania zapytań lub limit czasu lub użytkownicy nie mogący zapisać zmodyfikowanych ekranów.
Jak naprawić bloki serwera SQL
Krótkoterminowym rozwiązaniem blokowania programu SQL Server jest zidentyfikowanie i ręczne odblokowanie transakcji, gdy zauważysz, że blok lub bloki negatywnie wpływają na wydajność.
Po potwierdzeniu obecności bloku SQL Server sprawdź monitor aktywności SQL Server i zakończ zapytania, które sprawiają najwięcej problemów. Możesz także używać skryptów SQL do ciągłego monitorowania stanu blokowania i blokowania na serwerze SQL Server. Brent Ozar sugeruje dodanie kilku liczników wydajności specyficznych dla blokowania, aby SQL Server powiadomił Cię, gdy przekroczysz wyznaczone progi blokowania.
Jak zapobiegać blokom SQL Server
Administrator bazy danych powinien wiedzieć, jak naprawić blok SQL Server. Ale ze względu na utrzymanie systemu o wysokiej wydajności, jeszcze lepiej jest wiedzieć, jak zapobiegać – lub przynajmniej minimalizować – występowanie blokowania. Oto cztery wskazówki, jak zminimalizować niektóre typowe typy blokowania SQL Server:
1. Użyj indeksów
Korzystanie z indeksów klastrowych w tabelach o dużym natężeniu pomaga zmniejszyć blokowanie, prosząc optymalizator kwerend o uruchomienie wyszukiwania indeksu zamiast skanowania indeksu. Gdy tylko aktualizowany rekord jest zablokowany, kolejne procesy mogą obejść blokadę i zostać zakończone.
Ważne jest również, aby upewnić się, że instrukcje UPDATE i DELETE używają indeksów. Indeksy pomagają UPDATE i DELETE zmniejszyć liczbę blokad modyfikacji, które uzyskują przy użyciu indeksów nieklastrowanych lub wskazówek dotyczących indeksów w celu usunięcia blokad.
2. Wyczyść swoje zapytania
Jedną z najlepszych praktyk unikania bloków SQL Server jest rozbicie długich transakcji na wiele krótszych transakcji. Długotrwałe zapytania blokują blokadę na czas trwania transakcji, przez co zasób jest niedostępny dla innych procesów. Dzielenie długich transakcji na krótkie sprawia, że dane są w ruchu.
Rozważ użycie dostrajania programu SQL Server, aby zapytania były jak najbardziej wydajne. Dobry optymalizator zapytań będzie pisał i przepisywał zapytania, dopóki nie zostaną skonfigurowane w celu zmniejszenia liczby bloków, które mogą spowolnić wydajność.
3. Zidentyfikuj główną przyczynę blokowania SQL Server
Śledzenie metryk wydajności w czasie to świetny sposób na uniknięcie blokowania programu SQL Server. Lokalizując, które sesje są często blokowane i jakie instrukcje są zaangażowane, możesz określić sposób działania w celu usunięcia głównych przyczyn powtarzających się bloków poprzez indeksowanie, optymalizację zapytań lub w inny sposób.
Innym miejscem, w którym można znaleźć główną przyczynę blokowania, jest obciążenie systemu. Uruchom analizę obciążenia, aby określić, czy nastąpił wzrost. Zbyt duże obciążenie spowoduje blokowanie programu SQL Server, ponieważ rośnie liczba zapytań oczekujących na dostęp do zablokowanych zasobów. Może być konieczne dodanie indeksów lub rozłożenie obciążenia na wiele baz danych, aby rozwiązać problemy z wydajnością dużego obciążenia.
4. Aktualizuj swoje statystyki
Nieaktualne statystyki mogą powodować uruchamianie niewydajnych planów zapytań, ponieważ plan nie został zaktualizowany w celu uwzględnienia zmian. SQL Server uruchomi indeksowanie wyszukiwania w celu wyszukania przeniesionych lub brakujących danych, co z kolei spowoduje utworzenie bloków.
Najskuteczniejszym sposobem na aktualizowanie statystyk jest zautomatyzowanie jak największej liczby aktualizacji. Jeśli nie możesz zaplanować automatycznych aktualizacji, pamiętaj o dodaniu ręcznych aktualizacji do listy kontrolnej zaplanowanej konserwacji, aby upewnić się, że aktualizacje są wykonywane regularnie.
Blokowanie SQL Server może być faktem w życiu administratora, ale istnieją sposoby na złagodzenie jego wpływu na wydajność bazy danych SQL Server. Przerwij cykl blokowania i odblokowywania, wdrażając niektóre z omówionych powyżej strategii. Przy odrobinie planowania, optymalizacji i automatyzacji można zmniejszyć występowanie blokowania programu SQL Server — a w niektórych okolicznościach całkowicie je wyeliminować.