Zawieszanie sesji z TM REQUEST i uchwytem planu 0x0000


12

Mamy cykliczne wydarzenie, w którym wiele połączeń zawiesza się na TM REQUEST (od sys.dm_os_waiting_tasks) i nie robi postępów. KILLna chorego session_idnic nie robi

Serwer uruchamia dublowanie bazy danych (2008R2). Wstrzymywanie i wznawianie kopii lustrzanej rozwiązuje problem, gdy się zdarza.

Sesja utknięta w tym stanie jest niemożliwa do zabicia. Obciążenie lustra jest zwykłe, a nie pękające. Po zatrzymaniu dużej liczby połączeń w tym stanie system zawiesza się, a kopia lustrzana przestaje się replikować (wszystkie zapytania są blokowane).

Czy ktoś już to widział i wiedział, co go powoduje? W dziennikach błędów nie ma nic.


W jakim trybie skonfigurowano dublowanie? Jakie są typy oczekiwania, gdy wystąpi ten problem? Czy jest jakaś szansa, że ​​SQL Server jest skonfigurowany fiber mode?
— Kin Shah

Kopia lustrzana jest w trybie synchronizacji. Bez włókien. Żadnych innych czeka
— Thomas Kejser

Do czego był resource_descriptionustawiony?
— Thomas Stringer

Zauważyłem to też nie tak dawno temu (uruchamiamy asynchronię, ale zmieniamy ją na synchronizację podczas przełączania awaryjnego lub łatania itp.). Czy pająk pozostaje po pełnej synchronizacji baz danych?
— Subhash Pant

Identyfikator SPID zniknie po pauzie. Ale nie da się ich zabić, gdy problem się utrzymuje
— Thomas Kejser

Odpowiedzi:


9

TM oznacza Transaction Manager. Bieżące polecenie ustawione na Żądanie TM oznacza, że ​​wątek aktualnie obsługuje żądanie DTC (Distributed Transaction Coordinator) w celu zarejestrowania się w transakcji DTC, defektu z niej, lub zatwierdzenia, itd. Transakcje rozproszone nie są obsługiwane dla Dublowania bazy danych, ponieważ nie może zagwarantować integralności transakcji. Pomiń transakcje DTC, a to powinno zniknąć.


Credit S. Ashwin, kolega, Microsoft SQL Support
— stacylaray

Jak zdiagnozować, skąd to pochodzi? Dzienniki MSDTC na serwerze są puste
— Thomas Kejser

Czy kod DTC może zostać zaangażowany, jeśli mam transakcję obejmującą wiele baz danych w tej samej instancji?
— Thomas Kejser

@ThomasKejser - jest sp_configure 'Ad Hoc Distributed Queries'włączony? - Być może jakiś system wydaje transakcje między bazami danych przy użyciu OPENQUERYinstrukcji ad-hoc lub czegoś takiego?
— Max Vernon

1
Transakcje między bazami danych używają tego samego podstawowego kodu, co transakcje DTC. Główną różnicą jest brak koordynatora DTC. Zamiast tego SQL Server wybiera najniższy identyfikator DBID w transakcji jako koordynatora transakcji.
— stacylaray

0

Service Broker używa menedżera transakcji SQL Server zamiast Microsoft Distributed Transaction Coordinator (MS DTC). Transakcja nie odbywa się między instancjami, ale w ramach instancji. Czy używasz Service Brokera?

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.