如何找出 MessageBox 数据库的瓶颈

若要找出 MessageBox 数据库的瓶颈,首先要确保 SQL Server 代理服务已启动。 将“服务启动状态”从“手动”更改为“自动”,以便在服务器重启后,服务将自动重启。

默认情况下,如果 Spool、TrackingData 或 ApplicationQ 表增长,BizTalk 服务将受到限制。 这些表由 SQL-Agent 作业进行修剪,如果不运行,则会导致 Spool 增长,从而导致限制启动并保护数据库免受额外的压力。 检查下列性能计数器的状态:

后台打印表增长

导致 Spool 增长的原因有多种。 后台处理程序增长的一个原因是应用程序队列是否在增长。 它们可能会由于下游瓶颈和/或资源争用等原因而增长。

如果应用程序队列较小且 Spool 仍然很大,请验证清除作业是否保持同步。 请确保 SQL 代理服务正在运行,然后验证下列作业是否成功完成:

  • MessageBox_Message_Cleanup_BizTalkMessageBoxDb

  • MessageBox_Parts_Cleanup_BizTalkMessageBoxDb

    如果 MessageZeroSum 表很大,则表示消息已处理。 这意味着 DeQueue 已成功完成并删除了应用程序队列表中的数据,并且行已被标记为要删除。 但清除作业不能及时删除数据。 如果运行 SQL Server 的计算机遇到严重的 CPU 争用,从而影响清除作业因 CPU 不足而保持正常运行的能力,则可能会发生这种情况。

应用程序队列表增长

应用程序队列托管待处理后由 DeQueue 清理的未完成转换数据。

处理这些消息后,可以清除包含对这些行) 引用的后台处理程序表 (。

例如,RxHostQ 将数据发布到业务流程 PxHostQ。 此队列将数据发布到发送的 TxHostQ,每个都引用 Spool 表中的一行。 在系统成功处理特定 HostQ 的消息后,DeQueue 会删除这些行。 删除这些行后,清除作业就可以清理 Spool(已不再被这些行引用)了。

应用程序队列增长表示负责排出应用程序队列的主机实例无法跟上传入速率。

例如,由于负责处理业务流程的服务器争夺不到更多的 CPU 资源而无法加快处理速度,这就会导致业务流程应用程序队列 (PxHostQ) 增长。 但是,如果接收服务器速度很快,则发布速度可能会快于业务流程服务器可以处理的速度,从而导致应用程序队列增长。

业务流程队列增长的另一个原因可能是内存争用。 当内存中同时实例化许多长时间运行的业务流程实例时,内存膨胀会间接导致限制收缩线程池,直到内存压力得到缓解。

发送应用程序队列可能会增加的一个原因是,如果下游系统无法接收消息 (从BizTalk Server) 传出足够快。 因此,消息将继续驻留在 BizTalk 系统中,导致应用程序队列增长。 这可能会导致限制启动并降低接收速率,从而影响系统的总体吞吐量。

TrackingData 表增长

MessageBox 数据库中的 TrackingData 表是一个转换表,侦听器将运行状况和活动 (HAT) 和业务活动监视 (BAM) 跟踪的跟踪数据写入其中。 如果禁用跟踪,则此表将为空。 默认情况下,为管道和业务流程的 In/Out 事件启用 HAT 跟踪。

如果启用邮件正文跟踪,请确保 MessageBox 数据库服务器 (,即,具有“允许主机跟踪”的主机 ) 正在运行。 确保具有“允许主机跟踪”的主机正在运行,将减少在主机将数据从 MessageBox 数据库中的 TrackingData 表移动到 BizTalk 跟踪数据库表时出现瓶颈的可能性。

可以通过启用自定义 HAT 跟踪来跟踪自定义事件,例如,在升级的属性和消息正文跟踪上。 除了 HAT 跟踪数据外,BAM 数据还会写入 TrackingData 表。 跟踪数据解码服务 (TDDS,该服务在启用跟踪的主机实例上运行,) 负责将此数据从 MessageBox 数据库移动到 BizTalk 跟踪和 BAM 主导入数据库。 然后,在成功移动数据后,TDDS 会删除此数据。 消息正文跟踪数据另由 SQL 代理作业 TrackedMessages_Copy_BizTalkMsgBoxDb 来移动。

如果 TDDS 无法跟上侦听器将数据写入 TrackingData 表的速率,则此表将增大,从而导致限制开始。 这会影响可持续吞吐量。 若要减少此问题,请确保至少有一台主机正在运行,并且启用了跟踪。

如果数据仍在累积,请确保 BizTalk 跟踪数据库不会失控。 此外,请确保存档和清除作业正在运行,并且能够跟上数据的到达速度。

注意

默认情况下,清除作业无法在存档此数据之前从 BizTalk 跟踪数据库表中删除数据。 如果不需要存档跟踪数据,可以按照 如何从 BizTalk 跟踪数据库清除数据 (https://go.microsoft.com/fwlink/?LinkID=153817) 中的步骤修改作业以清除 BizTalk 跟踪数据库而不进行存档。

另请参阅

数据库层的瓶颈