Session suspendue avec TM REQUEST et plan handle 0x0000

12

Nous avons un événement périodique où de nombreuses connexions sont suspendues à TM REQUEST (from sys.dm_os_waiting_tasks) et ne progressent pas. KILLsur les affectés session_idne fait rien

Le serveur exécute la mise en miroir de bases de données (2008R2). La suspension et la reprise de la mise en miroir corrigent le problème lorsqu'il se produit.

Les sessions bloquées dans cet état sont irrécupérables. La charge sur le miroir est habituelle, pas éclatante. Une fois qu'un nombre élevé de connexions est bloqué dans cet état, le système se bloque et le miroir cesse de se répliquer (toutes les requêtes sont bloquées).

Quelqu'un a déjà vu cela avant et sait ce qui en est la cause? Il n'y a rien dans les journaux d'erreurs.

Thomas Kejser
la source
Dans quel mode la mise en miroir est-elle configurée? Quels sont les types d'attente lorsque ce problème se produit? Est-il possible que SQL Server soit configuré dans fiber mode?
Kin Shah
La mise en miroir est en mode Sync. Pas de fibres. Aucune autre attente
Thomas Kejser
Quel était le resource_descriptiondécor?
Thomas Stringer
J'ai remarqué cela il n'y a pas trop longtemps (nous exécutons async, mais nous le changeons pour synchroniser lorsque nous faisons un basculement, ou un patch, etc.). Le SPID reste-t-il une fois les bases de données entièrement synchronisées?
Subhash Pant
Le SPID disparaît après la pause. Mais ils ne peuvent être tués tant que le problème persiste
Thomas Kejser

Réponses:

9

TM signifie Transaction Manager. La commande actuelle étant définie sur TM Request signifie que le thread est en train de traiter une demande DTC (Distributed Transaction Coordinator), soit pour s'inscrire dans une transaction DTC, soit pour en faire défaut, soit pour la valider, etc. Les transactions distribuées ne sont pas prises en charge pour la mise en miroir de bases de données car elles ne peuvent pas garantir l'intégrité des transactions. Supprimez vos transactions DTC et cela devrait disparaître.

stacylaray
la source
Crédit S. Ashwin, collègue, Microsoft SQL Support
stacylaray
Comment puis-je diagnostiquer d'où cela vient? Les journaux MSDTC sur le serveur sont vides
Thomas Kejser
Le DTC pourrait-il intervenir si j'ai une transaction entre bases de données sur la même instance?
Thomas Kejser
@ThomasKejser - est allumé sp_configure 'Ad Hoc Distributed Queries'? - Peut-être qu'un système émet des transactions entre bases de données en utilisant OPENQUERYdes relevés ad hoc ou quelque chose?
Max Vernon
1
Les transactions entre bases de données utilisent le même code fondamental que les transactions DTC. La principale différence est le manque de responsable de la coordination du DTC. Au lieu de cela, SQL Server choisit le DBID le plus bas de la transaction comme coordinateur de transaction.
stacylaray
0

Service Broker utilise le gestionnaire de transactions SQL Servers au lieu du coordinateur de transactions distribuées Microsoft (MS DTC). La transaction ne se fait pas entre les instances mais au sein d'une instance. Utilisez-vous Service Broker?

stacylaray
la source