清单:维护和排查 BizTalk Server 数据库问题

BizTalk Server 数据库及其运行状况对于成功的 BizTalk Server 数据库消息传送环境非常重要。 本主题列出了在维护或排查 BizTalk Server 数据库问题时必须遵循的步骤。

维护 BizTalk Server 数据库

  • 禁用 自动更新统计信息自动创建统计信息 选项(仅适用于 BizTalk Server MessageBox 数据库)。 默认情况下,这些设置配置为 BizTalk Server 配置的一部分。 不应对这些设置进行更改。

    若要查看这些设置是否已禁用,请在 SQL Server 中执行以下存储过程:

    SELECT DATABASEPROPERTYEX('BizTalkMsgBoxDB', 'IsAutoCreateStatistics') AS IsAutoCreateStatistics
    SELECT DATABASEPROPERTYEX('BizTalkMsgBoxDB', 'IsAutoUpdateStatistics') AS IsAutoUpdateStatistics
    

    返回的值应为 0 ,以指示设置已禁用。 如果未返回 0 ,请在 SQL Server 中执行以下命令来禁用该设置:

    ALTER DATABASE BizTalkMsgBoxDB SET AUTO_CREATE_STATISTICS OFF
    ALTER DATABASE BizTalkMsgBoxDB SET AUTO_UPDATE_STATISTICS OFF
    

    有关这些设置的详细信息,请在 尝试连接到 BizTalk Server 中的 BizTalkMsgBoxDb 数据库时遇到阻止、死锁条件或其他 SQL Server 问题

  • 设置最大并行度(Max Degree of Parallelism)属性。 默认情况下,此设置配置为 BizTalk Server 配置的一部分。 不应对这些设置进行更改。

    将最大并行度 run_valueconfig_value 属性设置为托管 BizTalk Server MessageBox 数据库的 SQL Server 实例上的一个值(1)。 若要检查最大并行度设置,请对 SQL Server 中的 Master 数据库执行以下存储过程:

    exec sp_configure 'max degree of parallelism'
    

    如果未将 run_valueconfig_value 设置为一个值(1),在 SQL Server 中执行以下存储过程:

    exec sp_configure 'max degree of parallelism', '1' reconfigure with override
    

    有关 Max Degree of Parallelism 设置如何影响 BizTalk Server 的详细信息,请访问 在尝试连接到 BizTalk Server 中的 BizTalkMsgBoxDb 数据库时,您可能会遇到阻塞、死锁或其他 SQL Server 问题

  • 确定何时可以重新生成 BizTalk Server 索引。

    BizTalk Server 数据库中的大多数索引都是聚集的(索引 ID:1)。 DBCC SHOWCONTIG 命令可用于显示 BizTalk Server 数据库中表的碎片信息。 这些索引是基于 GUID 的,因此产生碎片是正常的。 如果 DBCC SHOWCONTIG 的扫描密度值小于 30%,则可以在停机期间重新生成索引。 BizTalk Server 数据库中的许多表都包含使用 DataType 定义的列,其中无法完成联机索引编制。 因此,在 BizTalk 处理数据时,不应重新生成 BizTalk Server 数据库中表的索引。

    有关如何重新生成 BizTalk 索引的详细信息,请参阅在尝试连接到 BizTalk Server 中的 BizTalkMsgBoxDb 数据库时,您可能遇到阻塞、死锁现象或其他 SQL Server 问题

    还可以使用 sys.dm_db_index_physical_stats 函数在 SQL Server 中查找碎片信息。 有关详细信息,请参阅sys.dm_db_index_physical_stats(Transact-SQL)。

  • 监视数据库中的锁、阻塞或死锁。

    这是 BizTalk Server 使用的 SQL Server 数据库上锁与阻塞的常见现象。 但是,预计这些限制或障碍不会持续较长时间。 BizTalk Server 使用的 SQL Server 数据库上的扩展阻塞和死锁是潜在问题的指标。

    对于 BizTalk Server 使用的 SQL Server 数据库上的死锁和阻塞的当前已知原因,请参见 当您尝试连接到 BizTalk Server 中的 BizTalkMsgBoxDb 数据库时,可能会遇到的阻塞、死锁条件或其他 SQL Server 问题

  • 监视数据库和表的大小。

    BizTalk Server MessageBox 数据库的大小通常不超过 5GB。 BizTalkMsgBoxDb 数据库不应保存任何数据,应在处理数据或移动到 BizTalkDTADb 数据库之前被视为缓冲区。 具有强大 SQL Server 后端和许多长时间运行的业务流程的环境可能具有大于 5GB 的 BizTalkMsgBoxDb 数据库。 在没有长时间运行的业务流程并且要求数据处理量大的环境中,BizTalk Server MessageBox 数据库应该远小于 5GB。

    BizTalk Server 跟踪数据库的大小可能会大不相同,但如果查询性能大幅下降,则跟踪数据库可能太大。 作为经验法则,BizTalk Server 跟踪数据库大于 15-20 GB 被视为太大,可能会对性能产生不利影响。

    以下问题可能归因于 BizTalk Server 数据库太大:

    • BizTalk Server MessageBox 数据库继续增长,而数据大小(而不仅仅是日志文件)保持不变。 BizTalk Server 处理甚至简单的消息流方案所需的时间比正常时间长。
    • Group Hub 查询所需时间比平时更长,甚至可能超时。
    • 数据库日志文件永远不会被截断。
    • BizTalk SQL 代理作业运行速度低于正常。
    • 某些表格与普通表格相比,显得相当大或者行数过多。

    由于多种原因,BizTalk Server 数据库可能会变得很大,包括:

    • BizTalk SQL 代理作业未运行
    • 过多挂起的消息或服务实例
    • 磁盘故障
    • 高级别的跟踪
    • BizTalk Server 节流
    • SQL Server 性能不佳
    • 网络延迟问题

    同样,表中的行数太多。 没有一个特定的行数被认为过多。 此外,此行数因表中存储的数据类型而异。 例如,具有 100 多万行的 dta_DebugTrace 表可能具有过多行。 HostNameQ_Suspended表包含超过 200,000 行的数据可能行数过多。

    请确保知道环境中的预期内容,以确定是否发生了数据问题。

  • 在 BizTalk Server 主机上启用跟踪。

    默认情况下,在默认主机上启用跟踪。 BizTalk 要求在单个主机上选中 “允许主机跟踪 ”选项。 启用跟踪后,跟踪数据解码服务(TDDS)会将跟踪事件数据从 BizTalk Server MessageBox 数据库移动到 BizTalk Server 跟踪数据库。 如果没有将 BizTalk Server 主机配置为允许主机跟踪,或者跟踪主机已停止,那么 TDDS 将不会运行,BizTalk Server MessageBox 数据库中的 TrackingData_x_x 表将不受控制地增长。

    因此,应使用“ 允许主机跟踪”选项配置专用 BizTalk Server 主机。 有关配置专用跟踪主机的详细信息,请参阅 配置专用跟踪主机

    若要允许 TDDS 在大容量方案中维护新的跟踪事件,可以创建单个跟踪主机的多个实例,但不应为跟踪配置多个主机。

  • 使用正确的 BizTalk SQL Server 代理作业。

    执行 BizTalk Server SQL 代理作业对于管理 BizTalk Server 数据库和维护最佳性能至关重要。

    • 备份 BizTalk Server SQL Server 代理作业是唯一支持的备份 BizTalk Server 数据库的方法。 此作业要求设置所有 BizTalk Server 数据库以使用完整恢复模式。 应为正常的 BizTalk Server 环境配置此作业。 仅当 SQL Server 服务停止且所有 BizTalk Server 进程已停止时,才能使用 SQL Server 方法备份 BizTalk Server 数据库。

      有关在配置 SQL 代理备份 BizTalk Server 作业时使用 SQL Server 完整恢复模型的详细信息,请参阅完整恢复模式下的日志传送或备份。

    • MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb SQL Server 代理作业被设计为无限期运行。 因此,SQL 代理作业历史记录可能不会指示此 SQL 代理作业已成功完成;此行为是设计造成的。 如果出现故障,作业将在 1 分钟内重新启动,并继续不间断地运行。 因此,通常可以忽略此作业的失败通知。

      如果MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb SQL Server 代理作业的作业历史记录指示此作业不断失败并重启,则可能需要进一步调查失败/重启周期的原因。

    • MessageBox_Message_Cleanup_BizTalkMsgBoxDb SQL Server 代理作业是唯一不应手动启用的作业,因为它由MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb作业启动。

    • DTA 清除和存档 SQL Server 代理作业通过清除和存档跟踪的消息来维护 BizTalk Server 跟踪数据库。 此作业读取表中的每一行,并比较每一行的时间戳,以确定是否应删除记录。

      对 BizTalk Server SQL Server 代理作业进行故障排除时,请验证除MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb之外的所有 SQL 代理作业是否都未出错。

    有关在 SQL Server 中使用的 BizTalk Server SQL Agent 任务的详细信息:

  • 监控并终止暂停的实例。

    服务实例可以暂停(可恢复)或挂起(不可恢复)。 这些服务实例可以是消息传送、业务流程或端口。 BizTalk Server 通过使用 BizTalk Server 管理控制台中的“组中心”页或使用 Terminate.vbs 脚本来容纳终止和删除这些实例。 有关 Terminate.vbs 脚本的详细信息,请参阅 “删除挂起的服务实例”。

    还可以使用终结者工具移除悬挂的实例。 BizTalk 运行状况监视器随附终结者工具。

    术语“孤儿”和“僵尸”常被互换使用。 孤立消息或僵尸消息是没有关联服务实例的消息,通常是因为服务实例在收到消息之前已终止。 孤立或僵尸服务是一个没有任何关联消息的服务。 有关 BizTalk Server 中的僵尸消息和服务实例的详细信息,请参阅 BizTalk Server 中的僵尸

  • 监视 PhysicalDisk 性能对象的性能计数器。

    BizTalk Server 在一分钟内将大量非常短、非常快速的事务处理到 SQL Server。 如果 SQL Server 无法维持此活动,可能会遇到 BizTalk Server 性能问题。 在 PhysicalDisk 性能对象中监视 Avg. Disk sec/ReadAvg. Disk sec/TransferAvg. Disk sec/Write 性能监控计数器。 最佳值小于 10 毫秒(毫秒)。 值 20 毫秒或更大被视为性能不佳。

    有关 BizTalk Server 数据库高可用性的详细信息,请参阅 为 BizTalk Server 数据库提供高可用性

  • 遵循 BizTalk Server 数据库的最佳做法。 请参阅 维护 BizTalk Server 数据库的最佳做法

BizTalk Server 数据库疑难解答

执行以下任务来排查 BizTalk Server 数据库的任何问题。

  • 确保启用并运行所有必需的 BizTalk SQL Server 代理作业。

    所有 BizTalk SQL Server 代理作业( MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb作业除外 )都应启用并成功运行。 请勿禁用任何其他作业。

    如果发生故障,请使用 SQL Server 中的“查看历史记录 ”选项查看错误信息,然后相应地对失败进行故障排除。 请记住, MessageBox _Message_ManageRefCountLog_BizTalkMsgBoxDb SQL Server 代理作业无限运行。 因此,仅当作业历史记录报告作业不断失败并重启时,才应该担心。

  • 使用 MsgBoxViewer 工具分析 BizTalk MessageBox 和其他数据库。

    MsgBoxViewer 工具包含在 BizTalk 运行状况监视器 中。 MsgBoxViewer 工具可用于故障排除,因为它提供了一个 HTML 报表,其中包含有关表大小和行计数的详细信息。 该报表还有助于确定 BizTalk Server 是否正在进行节流。 此外,该工具还提供 BizTalk Server 数据库和 BizTalk Server 配置的快照。

    当 BizTalk Server 运行速度低于平常时,请运行 MsgBoxViewer 工具,单击以选择 “可选查询 ”选项卡上的所有查询,然后查看生成的 HTML 报告,了解任何问题。 “ 摘要报告” 部分列出了黄色警告和红色的潜在问题。

    此外,可以使用 MsgBoxViewer 工具来确定哪些表最大且记录最多。 有关通常增大的表,以及如何管理这些表的说明,请参阅 显著增长的 BizTalk Server 数据库表

  • 使用 Terminator 工具解决由 MsgBoxViewer 工具标识的问题(如果有)。

    BizTalk 运行状况监视器随附终结者工具。 此工具使用户能够轻松解决 BizTalk MsgBoxViewer 工具标识的任何问题。

  • 调查死锁情境。

    在死锁方案中,在 SQL Server 上启用 DBCC 跟踪,以便死锁信息写入 SQLERROR 日志。 在 SQL Server 中,执行以下语句,为死锁方案启用 DBCC 跟踪:

    DBCC TRACEON (1222,-1)
    

    还可以使用 PSSDIAG 实用工具在 Lock:Deadlock 事件和 Lock:Deadlock Chain 事件上收集数据。 有关详细信息,请参阅 PSSDIAG 数据收集实用工具

    BizTalkMsgBoxDB 数据库是一个高负荷、高事务量的联机事务处理(OLTP)数据库。 使用此类数据库时,预期会出现一些死锁,并且此死锁由 BizTalk Server 引擎在内部处理。 发生此行为时,错误日志中未列出任何错误。 调查死锁场景时,必须将输出中正在调查的死锁与事件日志中的死锁错误相关联。

  • 查找阻塞的进程。

    可以使用 SQL Server 中的活动监视器来获取锁定系统进程的服务器进程标识符(SPID)。 然后,可以运行 SQL Profiler 来确定在锁定 SPID 中执行的 SQL 语句。 可以使用 PSSDIAG 实用工具排查 SQL Server 中的锁定和阻止问题。 该工具捕获所有启用阻止脚本的 Transact-SQL 事件。 有关详细信息,请参阅 PSSDIAG 数据收集实用工具

    在 SQL Server 中,可以指定 阻止的进程阈值 设置,以确定哪些 SPID 或 SPID 的阻塞时间比指定的阈值长。 有关阻止的进程阈值选项的详细信息,请参阅 阻止的进程阈值选项

    在 SQL Server 中遇到锁定或阻止问题时,可以联系Microsoft客户支持服务。

  • 删除所有不需要的数据。

    如果数据库已变得太大,并且不再需要数据库中包含的数据,则首选方法是删除数据。 谨慎: 请勿在数据至关重要或需要数据的任何环境中使用此方法。

    若要清除 BizTalkMsgBox 数据库,请执行以下作:

    1. 下载并安装包含在 BizTalk 运行状况监视器 中的 Terminator 工具。

    2. 请按照主题《如何在测试环境中从 MessageBox 数据库手动清除数据》中的步骤,在 BizTalk MessageBox 数据库中创建 bts_CleanupMsgbox 存储过程。

    3. 使用 Terminator 工具执行 bts_CleanupMsgbox 存储过程,清理 BizTalk MessageBox 数据库。

      bts_CleanupMsgbox存储过程删除数据。 在生产环境中运行此存储过程时请小心。

    4. 重启所有主机和 BizTalk Server 服务。

    清除 BizTalkDTADb 数据库

    • 方法 1

      1. 备份所有 BizTalk Server 数据库。
      2. 执行 dtasp_PurgeAllCompletedTrackingData 存储过程。 有关存储过程的详细信息,请参阅 如何从 BizTalk 跟踪数据库中手动清除数据
    • 方法 2:仅当 BizTalkDTADb 数据库包含必须删除的许多不完整实例时,才使用此选项。

      1. 备份所有 BizTalk Server 数据库。
      2. 停止所有 BizTalk 主机、服务和自定义独立适配器。 如果使用 HTTP 或 SOAP 适配器,请重启 IIS 服务。
      3. 在 BizTalkDTADb 数据库上执行 dtasp_CleanHMData 存储过程。
      4. 重启所有主机和 BizTalk Server 服务。

    如果必须具有跟踪数据,请备份 BizTalkDTADb 数据库,将数据库还原到另一个 SQL Server,然后清除原始 BizTalkDTADb 数据库。

如果需要帮助分析 MsgBoxViewer 数据或 PSSDIAG 输出,请联系Microsoft客户支持服务。 在联系客户支持服务之前,请压缩 MsgBoxViewer 数据、PSSDIAG 输出和更新的事件日志(.evt 文件)。 可能需要将这些文件发送到 BizTalk Server 支持工程师。

下一个

另请参阅

不应更改的 SQL Server 设置