Wykonanie zapytania „” nie powiodło się z następującym błędem: „Nie można zreorganizować indeksu” (partycja 1) w tabeli „”, ponieważ blokowanie na poziomie strony jest wyłączone. ”
W planie konserwacji musi być podjęta próba ZMIANA REORGANIZACJI INDEKSU, która jest operacją online. Aby usunąć fragmentację (strony nie w kolejności), strony muszą zostać zablokowane i przeniesione, co nie jest możliwe, jeśli blokady stron zostały wyłączone. Jedynym sposobem na defragmentację bez blokad strony jest zablokowanie całej partycji, co nie jest możliwe dla REORGANIZE jako tylko online.
Jaka jest różnica między tymi dwoma schematami blokowania i jakie są ich konsekwencje w świecie rzeczywistym (w produkcji)?
Musisz zrozumieć, jaki jest rekord i strona, aby ocenić wpływ niedozwolenia na określony typ blokady. Jeśli nie znasz wewnętrznych elementów pamięci SQL Server, zacznij od Anatomia rekordu i Anatomia strony . Mówiąc bardzo prosto:
- wiersze = rekordy
- wiersze są przechowywane na stronach o wielkości 8 KB
Jeśli chcesz zmienić dozwolone typy zamków:
- Wyłącz blokady stron = tylko blokady wierszy i tabel
- Wyłącz blokady wierszy = Tylko blokady stron i tabel
- Wyłącz oba = Tylko blokady tabeli
Istnieją dwa scenariusze, w których zdaję sobie sprawę z tego, że może być korzystne wyłączenie typu blokady. Nie oznacza to, że nie ma innych, mam nadzieję, że ktoś inny wkroczy z przykładami.
Często przeglądana tabela odnośników, która rzadko się zmienia - Wyłączając blokady na poziomie strony i wiersza, wszyscy czytelnicy przyjmą blokadę wspólnej tabeli. Jest to szybsze / tańsze niż zwykłe udostępnianie intencyjne w tabeli, następnie zamierzone udostępnianie na stronie i wreszcie wspólna blokada w określonym wierszu lub wierszach.
Zapobieganie konkretnemu scenariuszowi zakleszczenia - w przypadku wystąpienia zakleszczeń spowodowanych jednoczesnymi procesami pozyskiwania blokad, które często znajdują się na tej samej stronie, wyłączenie blokad wierszy powoduje, że zamiast nich zostaną podjęte blokady stron. Tylko jeden proces może uzyskać dostęp do strony jednocześnie, drugi musi czekać.
Pierwszy przykład to mikrooptymalizacja i jest mało prawdopodobne, aby przyniosła wymierne korzyści w typowym systemie. Drugi rozwiąże ten konkretny scenariusz impasu, ale może wprowadzić nieoczekiwane skutki uboczne, np. Zabijanie współbieżności w innej sekcji kodu. Trudno jest w pełni ocenić wpływ, należy zachować ostrożność!
Domyślnie oba są włączone i nie należy tego zmieniać bez ważnej przyczyny.