在 Windows 10 计算机上为 MS DTC 启用诊断跟踪

本文讨论如何在 Windows 10 计算机上为Microsoft分布式事务处理协调器(MS DTC)启用诊断跟踪。

原始产品版本: Windows 10
原始 KB 数: 926099

重要

本文包含有关如何修改注册表的信息。 修改注册表之前,一定要先对其进行备份。 并且一定要知道在发生问题时如何还原注册表。 有关如何备份、还原和修改注册表的详细信息,请参阅 高级用户的 Windows 注册表信息。

跟踪设施的类型

  • 事务管理器跟踪

    事务管理器 (TM) 跟踪跟踪事务状态更改。 它由 MS DTC 事务管理器生成。 输出采用二进制格式,并且必须设置输出的格式。 事务管理器是 MS DTC 服务的一部分。

  • 通信管理器错误跟踪

    通信管理器(CM)错误跟踪跟踪加载 Msdtcprx.dll 文件的任何进程,并使用 MS DTC 的远程过程调用 (RPC) 接口与其他 MS DTC 相关的进程进行通信。 输出采用文本格式。 0x8004d00a错误是通信管理器错误跟踪可能很有用的典型错误。

注意

事务管理器跟踪和通信管理器错误跟踪是独立的进程。 可以独立启用事务管理器跟踪和通信管理器错误跟踪。 或者,可以独立禁用它们。

启用事务管理器跟踪

可以使用组件服务Microsoft管理控制台(MMC)管理单元启用事务管理器跟踪。 为此,请按照下列步骤进行操作:

  1. 依次选择“开始”、“所有程序”、“附件”,然后选择“运行”

  2. 键入 comexp.msc,然后选择“ 确定”。

  3. 展开组件服务,展开计算机,展开“我的计算机”,展开“分布式事务管理器”,右键单击“本地 DTC”,然后选择“属性”。

  4. 选择“跟踪”选项卡。

  5. 在“跟踪”选项卡上,可以修改以下 TM 跟踪选项:

    • 跟踪输出
      • 跟踪事务
        • 跟踪所有事务
        • 跟踪中止的事务
        • 跟踪长生存期事务

更改 TM 跟踪配置时,MS DTC 服务会检测更改。 但是,无需回收进程。 例如,更改跟踪的事务或跟踪文件的位置时,MS DTC 服务会检测注册表中的更改。 无需重启 MS DTC 服务。

Windows 中的新 MS DTC 跟踪系统

在 Windows 中,MS DTC 具有新的和广泛的跟踪系统。 新系统具有以下设计目标:

  • 仅需要一行代码才能添加格式化跟踪。
  • 跟踪可由生产计算机上没有网络的用户读取。
  • 输出选项很灵活。
  • 跟踪速度很快。
  • 无需重新启动计算机来更改选项。

此外,在 Windows 10 和 Windows Server Technical Preview 中,跟踪日志文件名称包括调用跟踪日志的进程的名称。 这由输出注册表项控制。

配置跟踪

警告

如果使用注册表编辑器或使用其他方法错误地修改了注册表,则可能会发生严重问题。 这些问题可能需要重新安装操作系统才能解决。 Microsoft 不能保证可解决这些问题。 修改注册表的风险由您自行承担。

跟踪配置位于本地节点上,位于 MS DTC 注册表项下命名 Tracing 的注册表项中。 Tracing注册表项包括连接管理器跟踪。 以前,你使用了 TraceCMErr 注册表项来配置连接管理器跟踪。 Tracing注册表项包含以下两个子项:

  • Sources:此子键配置跟踪类型。
  • Output:此子键配置跟踪输出的发送位置。

注意

确保进程可以访问 Tracing 注册表项。 默认情况下,Windows 配置不会创建此密钥,也不会授予对此密钥的权限。 可以使用注册表编辑器配置跟踪功能。

若要创建跟踪功能注册表项,请执行以下步骤:

  1. 选择“启动>所有程序>附件>运行”,键入 regedit,然后选择“确定”。

  2. 找到并选择以下子键之一:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing\Sources
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing\Output
  3. “编辑”菜单上,选择“新建,然后选择条目的数据类型。 例如,选择 DWORD (32 位) 值

  4. 键入所需源的名称,然后按 Enter。 有关源名称的详细信息,请参阅“配置源”部分中的表。

  5. 右键单击新注册表项,选择“修改,在“值”数据框中键入所需的值,然后选择“确定”。

  6. 在“文件”菜单上,选择“退出”

配置源

Sources注册表项包含下表中列出的一组 DWORD 注册表值。

名称 描述
TRACE_MISC 不能归入其他类别的跟踪
TRACE_CM 连接管理器中的跟踪
TRACE_TRACE 跟踪基础结构本身
TRACE_SVC 跟踪服务和 .exe 文件启动
TRACE_GATEWAY 网关源
TRACE_UI 跟踪用户界面
TRACE_CONTACT 跟踪联系人池和联系人
TRACE_UTIL 跟踪从多个位置调用的实用工具例程
TRACE_CLUSTER 跟踪群集特定的(实用工具)代码
TRACE_RESOURCE 跟踪群集资源特定的代码
TRACE_TIP 事务 Internet 协议 (TIP) 跟踪源
TRACE_XA XA 事务管理器 (XATM) 跟踪源
TRACE_LOG 日志跟踪
TRACE_MTXOCI MTS/OCI 层 (Mtxoci.dll) 跟踪源
TRACE_ETWTRACE Windows 事件跟踪 (ETW) 跟踪源
TRACE_PROXY MSDTC 代理 DLL 中生成的跟踪
TRACE_KTMRM 跟踪与内核事务管理器的集成
TRACE_VSSBACKUP 跟踪与 Microsoft Visual SourceSafe 备份和还原机制的集成
TRACE_PERFMON 支持性能计数器的跟踪

DWORD 值应是介于 0 到 255 的数字。 DWORD 值指示发生的跟踪级别。 下表列出了可能的 DWORD 值。

说明
0 const BYTE TRACE_OFF
1 const BYTE TRACE_ERROR
2 const BYTE TRACE_WARNING
3 const BYTE TRACE_INFO
4 const BYTE TRACE_VERBOSE
5 const BYTE TRACE_VERY_VERBOSE
6 const BYTE TRACE_INOUT
0xF0 const BYTE TRACE_OBSCURE
0xFF const BYTE TRACE_EVERYTHING

注意

较高的值自动包括较低的值。 因此,启用 TRACE_INFO 级别时, TRACE_ERROR 也会启用该级别。 很少有源使用高于 TRACE_VERBOSE 级别的任何跟踪。

配置跟踪输出

警告

如果使用注册表编辑器或使用其他方法错误地修改了注册表,则可能会发生严重问题。 这些问题可能需要重新安装操作系统才能解决。 Microsoft 不能保证可解决这些问题。 修改注册表的风险由您自行承担。

Output注册表项包含一组值,用于控制发送跟踪输出的位置。 其值如下所示:

  • TraceFilePath (REG_SZ) 值是存储跟踪文件的根文件夹。 跟踪将写入名为 msdtc-X.log的文件夹中的文件。 在此文件夹名称中, X 表示创建文件的进程的小数 PID。 确保所有感兴趣的进程都可以访问配置的文件夹。 否则,跟踪信息将丢失。 如果未设置此值,则不会将跟踪发送到文件。

  • ImageNameInTraceFileNameEnabled 值确定生成的跟踪日志文件的名称是否包括调用跟踪日志的进程的图像文件名。 如果此值设置为非零值,则进程的图像文件名将包含在生成的跟踪日志文件中。 如果此值设置为零,则生成的跟踪日志文件中将不会包含进程的映像文件名。 默认情况下,该值设置为零(0)。 下面是一个跟踪文件名示例,其中生成的日志文件包含该过程:
    MSDTC-msdtc.exe-3552.log或MSDTC-svchost.exe - 3556.log

  • MemoryBufferSize (REG_DWORD) 值是存储跟踪消息的循环缓冲区的大小。 如果此值设置为 0,则禁用内存跟踪。 默认情况下,此值为 10 MB。 如果启用详细跟踪,可能需要增加此值。

  • DebugOutEnabled (REG_DWORD) 值启用或禁用调试器的输出。 如果值为非零,则启用输出。 默认情况下,此 Output 注册表项处于禁用状态。 更改连接管理器错误跟踪配置时,当加载 Msdtcprx.dll 文件的进程被回收时,更改将生效。 例如,在回收 MS DTC 服务进程时,对连接管理器错误跟踪配置的更改将生效。

或者,可以创建.reg文件,然后使用注册表编辑器导入该文件。 为此,请按照下列步骤进行操作:

  1. 创建包含以下代码示例的新.reg文件:

    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing]
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing\Output]
    "DebugOutEnabled"=dword:00000000
    "TraceFilePath"=""
    "MemoryBufferSize"=dword:0000000a
    "ImageNameInTraceFileNameEnabled"=dword:00000001
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Tracing\Sources]
    "TRACE_MISC"=dword:00000000
    "TRACE_CM"=dword:00000000
    "TRACE_TRACE"=dword:00000000
    "TRACE_SVC"=dword:00000000
    "TRACE_GATEWAY"=dword:00000000
    "TRACE_UI"=dword:00000000
    "TRACE_CONTACT"=dword:00000000
    "TRACE_UTIL"=dword:00000000
    "TRACE_CLUSTER"=dword:00000000
    "TRACE_RESOURCE"=dword:00000000
    "TRACE_TIP"=dword:00000000
    "TRACE_XA"=dword:00000000
    "TRACE_LOG"=dword:00000000
    "TRACE_MTXOCI"=dword:00000000
    "TRACE_ETWTRACE"=dword:00000000
    "TRACE_PROXY"=dword:00000000
    "TRACE_KTMRM"=dword:00000000
    "TRACE_VSSBACKUP"=dword:00000000
    
  2. 选择“启动>所有程序>附件>运行”,键入 regedit,然后单击“确定”。

  3. “文件 ”菜单上,选择“ 导入”。

  4. 找到在步骤 1 中创建的文件,然后选择“ 打开”。 此时会显示“注册表编辑器”对话框。

  5. 选择“确定”

  6. 在“文件”菜单上,选择“退出”

性能效果

默认情况下,在 Windows 中禁用跟踪功能。 因此,常规安装没有任何性能影响。

除非Microsoft客户支持专业人员指示需要跟踪信息来诊断问题,否则不要在生产计算机上启用跟踪功能。 跟踪可能会影响计算机性能。 首先,必须找到问题,并且必须解决此问题。 然后,立即禁用跟踪功能。

群集配置

对于群集安装,请确保所有节点上的所有注册表项都包含这些注册表项。 对于没有这些注册表项的任何节点,群集代码会忽略共享注册表中的注册表项,因为本地计算机注册表中不存在注册表项。