it-swarm.dev

Co to jest blokowanie i jak to się dzieje?

Próbowałem znaleźć informacje na temat blokowania w SQL Server, ale nie mogłem znaleźć zwięzłego wyjaśnienia, co to jest i jak to się dzieje. Czy mógłbyś mnie oświecić?

20
jrara

Analogie

Czasami pomaga używać analogii z dala od komputerów.

Powiedzmy, że masz piłkę i dwoje dzieci. Tylko jedno dziecko może mieć piłkę jednocześnie. Jeśli jednak jedno z dzieci dostanie piłkę i nie puści jej, ponieważ jest rozproszone (na przykład ogląda telewizję), wówczas drugie dziecko nie będzie mogło bawić się piłką.

Drugie dziecko jest zablokowane z tego zasobu.

Jeśli porównamy to z telewizją, na przykład kilka dzieci może oglądać telewizję w dowolnym momencie.

Zamki

Jeśli przejdziemy do świata baz danych, zauważymy, że istnieją różne sposoby korzystania z zasobów (podobnie jak nasze dwa powyższe przykłady). Możemy wykonywać „odczyty” lub „zapisywać”.

Kiedy chcemy odczytać dane, nie ma powodu, dla którego inni też nie mogą odczytać danych - tak jak dwie osoby oglądające telewizję. Jeśli jednak chcemy zapisać dane, musimy upewnić się, że nikt inny na nie nie patrzy. Jeśli czytają to, gdy my piszemy, otrzymają „brudne” odczyty. (Oznacza to, że zobaczą częściowo zapisane dane, które będą nieprawidłowe).

Aby mieć pewność, że te nieczytelne odczyty nigdy się nie zdarzają, mamy dwa podstawowe typy zamków, Blokady odczytu i Blokady wyłączne.

Blokada odczytu

W danym momencie możesz mieć kilka różnych połączeń odczytujących z tego samego źródła danych. Aby jednak upewnić się, że nikt nie zmienia tych danych podczas ich odczytu, wyjmuje blokadę odczytu.

Gdy połączenie ma blokadę odczytu na danych, wszystkie inne połączenia muszą poczekać, aż blokada odczytu zostanie zwolniona, zanim będą mogli zapisywać dane. Inni mogą jednak usunąć własne blokady odczytu na tym samym fragmencie danych.

Blokada wyłączna

Jeśli połączenie chce zaktualizować/wstawić/usunąć kawałek danych, musi wyjąć wyłączną blokadę. Zapobiega to również wyjmowaniu blokady danych przez inne połączenie (czyniąc blokadę wyłączną dla tego połączenia).

Gdy połączenie ma wyłączną blokadę danych, żadne inne połączenia nie mogą odczytać z danych. Pomaga to zapobiec nieczytelnym odczytom, zapewniając, że nikt nie może odczytać danych podczas ich zapisywania.

Blokowanie

„Blokowanie” to po prostu termin, który oznacza, że ​​jedno połączenie blokuje zasób, gdy inne połączenie chce go odczytać lub zapisać. Nie musi to oznaczać, że połączenie właściciela go nie zwolni, tylko że obecnie je utrzymuje.

Porównaj to z walizką z dzieckiem trzymającym piłkę. Dziecko trzymające piłkę blokuje wszystkie inne dzieci przed trzymaniem piłki.

Zakleszczenie

Wiem, że o to nie pytałeś, ale to tylko jeden krok, aby dostać się do impasu (i ma to bardzo bezpośredni związek z blokowaniem).

Zakleszczenia mogą się zdarzyć, gdy masz dwa połączenia, z których każde ma blokadę, ale nawzajem chcą zasobów. W tym scenariuszu jest jak dwoje dzieci, które mają piłkę, ale chcą piłki drugiej.

Podobnie jak dzieci, te połączenia w ogóle nie chcą się dzielić. Każde połączenie wymaga dostępu do obu zasobów, aby móc kontynuować. Są jednak w stanie stałego blokowania. W tym stanie rodzic (DBMS) musi wejść i wybrać przegranego, aby jedno z dzieci (połączeń) mogło uzyskać dostęp do obu zasobów.

Po nawiązaniu „zwycięskiego” połączenia uwalnia zasoby, a następnie inne („tracące”) połączenie może spróbować ponownie uzyskać dostęp do obu zasobów.

Tak więc koncepcja impasu polega na tym, że masz dwa zasoby, które się wzajemnie blokują.


tutaj , możesz przeczytać więcej o wszystkich różnych typach zamków, które SQL Server ma do zaoferowania oraz o różnych zasobach, które mogą powodować blokowanie/zakleszczenia. Artykuł jest stary, ale nadal dotyczy SQL Server 2000 do 2008 R2. (Istnieje kilka innych rodzajów blokad dodanych do późniejszych wersji SQL Server, ale da to punkt wyjścia.)

23
Richard

Świetne wyjaśnienie Richarda, ale chciałem tylko dodać linki do oficjalnej dokumentacji. Te tematy zostały napisane dla programu SQL Server 2000, ale wiele z tych koncepcji pozostaje dziś takich samych:

Zrozumienie i unikanie blokowania

Zrozumienie blokowania w SQL Server

Edytuj - niektóre dodatki:

Wszystkie 3 są bardzo dobrze znanymi autorami SQL Server i/lub MVP.

5
Aaron Bertrand