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

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

原始产品版本:Windows 10
原始 KB 编号: 926099

重要

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

跟踪设施的类型

  • 事务管理器跟踪

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

  • 通信管理器错误跟踪

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

注意

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

启用事务管理器跟踪

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

  1. 依次选择“ 开始”、“ 所有程序”、“ 附件”和“ 运行”。

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

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

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

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

    • 跟踪输出
      • 跟踪事务
        • 跟踪所有事务
        • 跟踪中止的事务
        • 跟踪 Long-Lived 事务

更改 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。 确保所有感兴趣的进程都可以访问配置的文件夹。 否则,跟踪信息将丢失。 如果未设置此值,则跟踪不会发送到文件。

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

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

  • (REG_DWORD) DebugOutEnabled 值启用或禁用调试器的输出。 如果值为非零,则启用输出。 默认情况下,此 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 客户支持专业人员指示诊断问题需要跟踪信息,否则不要在生产计算机上启用跟踪功能。 跟踪可能会影响计算机性能。 首先,必须找到问题,并且必须解决它。 然后,立即禁用跟踪功能。

群集配置

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