2010-12-16 8 views
8

Czy istnieje sposób na wypisanie zablokowanych tabel i zabicie transakcji, jeśli chcemy, aby zostały natychmiast odblokowane.Jak znaleźć nazwy tabel, które są zablokowane (specyficzne dla każdej transakcji)?

Czy jest jeszcze jakaś inna terminologia, którą powinniśmy przestrzegać w związku z powyższą operacją, której szukam.

Każda pomoc lub wskazówki zostaną docenione.

+1

Naprawdę nie ma potrzeby, aby traktować temat jako pierwszą linię pytania - wszyscy to czytamy. Ponadto nie potrzebujesz czapek, tylko utrudnia czytanie. – Robert

Odpowiedz

13

ten pokazuje wszystkich baz danych z wyłącznym zamki przetrzymywany (które mogą obejmować przejściowe, które odbyło się w tym czasie uruchamiany jest), z użyciem sys.dm_tran_locks DMV:

select d.*, l.* from sys.dm_tran_locks l 
join sys.databases d on l.resource_database_id = d.database_id 
where l.request_mode = 'X' 

(X = wyłączne, S = współdzielonych, IS = Intent Shared) Zobacz Lock Modes.

Ale prawdopodobnie najlepszym sposobem jest włączyć śladowe Flagi 1204 i 1222:

flagę śledzenia 1204 i flagę śledzenia 1222 przypadku wystąpienia zakleszczenia, flagi śledzenia 1204 i flagi śledzenia 1222 informacje powrót że jest przechwycone w dzienniku błędów programu SQL Server 2005. Flaga śledzenia 1204 zgłasza informacje o zakleszczeniu sformatowane przez każdy węzeł zaangażowany w zakleszczenie. Flaga śledzenia 1222 formatów zakleszczenie informacje, najpierw według procesów i następnie według zasobów. Możliwe jest włączenie obu flag śledzenia w celu uzyskania dwóch reprezentacji tego samego zakleszczenia zdarzeń.

Ref Detecting and Ending Deadlocks

również prowadzony sp_who2 i wyglądają na wpisy w (blokowane przez kolumnę BlkBy); wykonaj te czynności, aż dojdziesz do początku łańcucha impasu. To jest identyfikator procesu (lub PID) odpowiedzialny.

Aby dostać co SQL jest uruchomiony za pomocą specyficznego procesu można uruchomić:

dbcc inputbuffer (@pid) 

i używać PID zabić proces (z rozwagą i na własne ryzyko):

kill @pid 

sprawdź Who is Active? v10.00: DMV Monitoring Made Easy

przeczytać również Blocking is not Deadlocking (rozróżnić dwa scenariusze)

+0

Co dokładnie oznacza kolumna BlkBy Implies to coś związanego z transakcją, z powodu której tabela została zablokowana. I jak zabić proces za pomocą PID. Jestem w stanie podać nazwę kolumny SPID, gdy wykonuję "sp_who2" –

+0

Jakie są wartości sys.dm_tran_locks.request_mode dla S, IS i X jak w powyższym kwerendzie. czy możesz to opisać? –

+0

@K Maheshwar Rao: czy to jest pomocne, jeśli chodzi o jakąś upiększoną miłość? –