MSDTC 4441

Hello,
We have recently worked together with a customer on an unexpected shutdown problem of the "Distributed Transaction Coordinator" service.
To be honest the probability of the problem to occur is low. This makes the problem very difficult to troubleshoot.
However, this time we were lucky and were able to capture the necessary data to understand the reason of the problem and fix it.
The problem happens when you are on Windows 2008 R2 and use Distributed Transactions managed via MSDTC.

 

SYMPTOM

Once the problem happens you might see one of the following error events logged into the Application Log :

Log Name: Application
Source: Microsoft-Windows-MSDTC
Event ID: 4441
Task Category: SVC
Level: Error
Keywords: Classic
User: N/A
Description:
A MS DTC component has encountered an internal error. The process is being terminated. Error Specifics: CImpITransactionTrackerFactory::Create (d:\w7rtm\com\complus\dtc\dtc\dtcuis\src\uisimp.cpp@693): CImpITransactionTrackerFactory::Create, pLink is expected to be non NULL here

Log Name: Application
Source: Microsoft-Windows-MSDTC
Event ID: 4441
Task Category: SVC
Level: Error
Keywords: Classic
User: N/A
Description:
A MS DTC component has encountered an internal error. The process is being terminated. Error Specifics: Expecting pLink->m_fQueued to be FALSE

 

WORKAROUND

There is one that you can apply if you are not able to install the hotfix.
1. Open the registry editor and locate the HKLM\Software\Microsoft\MSDTC registry key.
2. Create a new DWORD value named "NoTracking" in that registry key.
3. Set the value of the new registry value to 1.
4. Restart the "Distributed Transaction Coordinator" service for the setting to take effect.

Unfortunately, you loose some functionality if you chose to apply this workaround. That registry key is actually stopping MSDTC.exe from keeping track of the transaction information to be displayed in the User Interface of the Component Services Explorer application. Therefore, the "Transaction List" and "Transaction Statistics" will not be populated. Hence, the user interface remains empty although transactions are processed.

What is down side of this workaround ?
Normally, every transaction should be completed with either a "commit" or an "abort" status. However, in reality there is the possibility of a transaction not to end this way and not end at all. One common case is the transactions with the "indoubt" state. Database jobs enlisted in a transaction that ends up in the "InDoubt" state might keep the database objects locked. This can cause a blocking chain in the database servers. To break this chain an administrator should resolve the InDoubt transaction. This can be done via the "Transaction List" view in the Component Services Explorer. However, since the registry key has stopped msdtc to populate this view that indoubt transaction will not be accessable. Even worse the administrator will not be aware of an indoubt transaction.

Therefore, one might not be comfortable to implement this workaround. However, there is a solution even for this. You can stop the "Distributed Transaction Coordinator" service. Set the "NoTracking" registry value to 0 (default) and restart SQL Server. This way the UI will start showing the transactions again. Hence, the "InDoubt" transactions can be identified and resolved. And, afterwards the registry value can be set back to 1 and MSDTC be restarted. Ofcourse, this means a downtime.

The reason why I'm explaining this workaround is to provide an alternative for the administrators who might encounter MSDTC outages with the same symptoms described above and are not allowed to install the hotfix. Sometimes, companies anounce freeze periods for their systems. During such periods nothing is allowed to be installed onto the production systems. Typically, the christmas time. The workaround might be useful at those times.

 

SOLUTION

We have published a hotfix which resolves the unexpected termination of MSDTC. The hotfix is when the "Distributed Transaction Coordinator" service stops with the symptoms described at the beginning. Please browse the following article and download the hotfix if your system is affected by this problem.

MSDTC service stops unexpectedly in Windows Server 2008 R2 SP1
https://support.microsoft.com/kb/2865346/en-us

 

Wish you 24x7 up systems.

-faik