Odpowiedzi:
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, kilkoro 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.
Czytaj Blokada
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ć na zwolnienie blokady odczytu, zanim będą mogły zapisać dane. Inni mogą jednak usunąć własne blokady odczytu na tym samym fragmencie danych.
Blokada na wyłączność
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.
Bloking
„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.
Impas
Wiem, że o to nie pytałeś, ale to tylko jeden krok, aby dostać się do impasu (i jest to związane bezpośrednio 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 połączenia „zwalniającego” 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.)
Świetne wyjaśnienie Richarda, ale chciałem tylko dodać linki do oficjalnej dokumentacji. Te tematy zostały napisane dla programu SQL Server 2000, ale większość koncepcji pozostała niezmieniona dzisiaj:
Zrozumienie i unikanie blokowania
Zrozumienie blokowania w SQL Server
Edycja - niektóre dodatki:
Pięć sposobów walki z blokowaniem wideo - bardzo świeże wideo Kendry Little (opublikowane dzisiaj)
DBA jako detektyw: rozwiązywanie problemów z blokowaniem i blokowaniem - autor: Rodney Landrum
Jak zidentyfikować problemy z blokowaniem za pomocą SQL Profiler - autor: Brad McGehee
Wszystkie 3 są bardzo dobrze znanymi autorami SQL Server i / lub MVP.