Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 2617|Odpowiedź: 2

[Napiwki] SQL Server wykorzystuje rozszerzone zdarzenia do śledzenia problemów z martwym punkcją

[Skopiuj link]
Opublikowano 02.03.2024 19:13:04 | | | |
Wymagania: Istnieje wiele powodów, dla których baza danych SQL Server powoduje martwe zablokowania; w produkcji każdy może napotkać problemy z martwymi blokadami, a konkretna przyczyna może nie być zidentyfikowana wyłącznie na podstawie nieprawidłowych informacji o zablokowaniu aplikacji, dlatego konieczne jest wykorzystanie zdarzeń rozszerzenia w SQL Server do śledzenia problemów z blokadami i zapisywania szczegółów, kiedy się one pojawiają.

Rozszerzony przegląd wydarzenia

Extended Events to lekka funkcja monitorowania wydajności, która pozwala użytkownikom zbierać dane potrzebne do monitorowania i rozwiązywania problemów. Ta funkcja pozwala na przeglądanie szczegółów dotyczących wewnętrznych operacji silnika danych w celu monitorowania wydajności i rozwiązywania problemów.

Dzięki architekturze Extended Events (XEvents) użytkownicy mogą korzystać z tyle lub tak mało, ile potrzebują danych, aby monitorować, identyfikować lub rozwiązywać problemy z wydajnością SQL Server, Azure SQL Database oraz Azure SQL Managed Instance. Rozszerzone wydarzenia są bardzo konfigurowalne, lekkie i dobrze skalowalne.

Odniesienie:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.


Przyczyny impasów

Impas powstaje przez konkurencyjne blokady współbieżności w bazie danych, zazwyczaj w transakcjach wieloetapowych. Każda sesja użytkownika może mieć jedno lub więcej zadań działających w jej imieniu, gdzie każde zadanie może pobierać lub czekać na pobranie różnych zasobów. Następujące typy zasobów mogą powodować blokowanie, a ostatecznie prowadzić do impasu.

  • Blokady: Blokady czekające na pobranie zasobów takich jak obiekty, strony, wiersze, metadane i aplikacje mogą powodować martwe blokady. Na przykład transakcja T1 ma wspólny zamek (S lock) w wierszu r1 i czeka na wyłączny zamek (X lock) dla wiersza r2. Transakcja T2 ma wspólny zamek (S lock) w wierszu r2 i czeka na wyłączny zamek (X lock) dla wiersza r1. Skutkuje to pętlą blokady, w której zarówno T1, jak i T2 czekają na uwolnienie zablokowanego zasobu.
  • Wątki robocze: Kolejka zadań dla dostępnych wątków roboczych może powodować martwe zakleszczenia. Jeśli zadanie w kolejce ma zasób blokujący wszystkie wątki robocze, spowoduje to martwy punkt. Na przykład, po rozpoczęciu transakcji przez sesję S1 i uzyskaniu współdostępnej blokady (S-lock) dla linii r1, przechodzi ona w tryb uśpienia. Aktywna sesja działająca na wszystkich dostępnych wątkach roboczych próbuje uzyskać wyłączną blokadę (X-lock) dla linii r1. Ponieważ sesja S1 nie może uzyskać wątku roboczego, nie może zatwierdzać transakcji ani zwolnić blokady na linii r1. To doprowadzi do impasu.
  • Pamięć: Impas może wystąpić, gdy żądanie równoczesne czeka na odzyskanie pamięci, a dostępna obecnie pamięć nie wystarcza do jego potrzeb. Na przykład dwa współbieżne zapytania (Q1 i Q2) są wykonywane jako funkcje zdefiniowane przez użytkownika, zdobywając odpowiednio 10 MB i 20 MB pamięci. Jeśli każde zapytanie wymaga 30 MB, a łączna dostępna pamięć wynosi 20 MB, Q1 i Q2 muszą czekać, aż nawzajem zwolnią pamięć, co spowoduje impas.
  • Zapytania równoległe i zasoby związane z realizacją: Koordynatory przetwarzania, generatory lub wątki konsumenckie, zwykle powiązane z przełączanymi portami, mogą się wzajemnie blokować, gdy zawierają co najmniej jeden proces, który nie jest częścią zapytania równoległego, co prowadzi do martwych punktów. Dodatkowo, gdy zapytanie równoległe rozpoczyna wykonywanie, SQL Server określa stopień równoległości lub liczbę wątków roboczych na podstawie aktualnego obciążenia. Impas może wystąpić, jeśli nastąpi nieoczekiwana zmiana w obciążeniu systemowym, na przykład gdy na serwerze zaczyna się uruchamiać nowe zapytanie lub gdy system wyczerpie wątki robocze.
  • Zasoby Multiple Activity Outcome Set (MARS): Te zasoby służą do kontroli krzyżowego wykonywania wielu żądań aktywności w ramach MARS.


Odniesienie:
Logowanie do linku jest widoczne.

Rozległe logowanie zdarzeń w martwym punkcie

Stwórz zdarzenie rozszerzenia, aby zapisać informacje o martwym punkcie za pomocą następującego polecenia:


Rozpocznij sesję zdarzenia martwego

Zatrzymaj sesję wydarzenia

Usuń sesję zdarzenia

Zapytaj dane sesji zdarzeń


Impas testowy

Stwórz nową tabelę Tab1 do testowania, utworz dwa nowe okna wykonania i wykonaj następujące polecenia odpowiednio:

Impas następuje następująco:

Transakcja (ID procesu 68) z innym procesem jest zablokowana na zablokowanym zasobu i została wybrana jako ofiara zablokowania. Proszę ponownie uruchomić transakcję.
Transakcja (ID procesu 68) była zablokowana na zasobach blokady z innym procesem i została wybrana jako ofiara blokady. Ponownie przeprowadź transakcję.


Zobacz dane sesji wydarzenia, jak pokazano na poniższym rysunku:



Szczegółowe dane XML przedstawiają się następująco:


(Koniec)





Poprzedni:Optymalizacja wydajności .NET/C# z użyciem zapytania równoległego PLINQ
Następny:Wykonywanie kodu w Visual Studio z wykorzystaniem okna interaktywnego C#
 Ziemianin| Opublikowano 02.03.2024 19:14:35 |
Rozszerzyć domyślną ścieżkę pliku zdarzenia:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\deadlock_monitor_0_133538477770860000.xel
 Ziemianin| Opublikowano 02.03.2024 19:16:54 |
Stwórz nową tabelę tab1, aby przetestować skrypt SQL

Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com