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.

Thomas Kejser
źródło
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ąć.

stacylaray
źródło
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?

stacylaray
źródło