如何识别 MessageBox 数据库中的瓶颈

若要识别 MessageBox 数据库中的瓶颈,请先确保启动 SQL-Server-Agent 服务。 将服务启动状态从“手动”更改为“自动”,以便在服务器重启时,服务将自动重启。

默认情况下,如果 Spool、TrackingData 或 ApplicationQ 表大小增加,BizTalk 服务将限制处理速度。 这些表由 SQL-Agent 作业修剪,如果这些作业不运行,则会导致 Spool 增长,从而引发流量控制,并保护数据库免受额外的压力。 检查以下性能计数器的状态:

临时数据缓存表增长

由于多种原因,Spool 可以开始增长。 Spool增长的一个原因是应用队列正在增长。 由于下游瓶颈和/或资源争用等原因,它们可能会增长。

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

  • MessageBox_Message_Cleanup_BizTalkMessageBoxDb

  • MessageBox_Parts_Cleanup_BizTalkMessageBoxDb

    如果 MessageZeroSum 表很大,则表示已处理消息。 这意味着 DeQueue 已成功完成并删除了应用程序队列表中的数据,并且已标记行以供删除。 然而,清理任务无法及时删除数据。 当运行 SQL Server 的计算机出现严重的 CPU 争用时,可能会导致这种情况,影响清除作业正常进行,因为 CPU 资源不足。

应用程序队列表增长

DeQueue 负责清理应用程序队列中存储的正在处理中的过渡数据。

处理完这些消息后,可以清理 Spool 表(该表中保存着对这些行的引用)。

例如,RxHostQ 将数据发布到业务流程 PxHostQ。 此队列将数据发布到发送的 TxHostQ,每个队列引用 Spool 表中的行。 通过系统成功处理特定 HostQ 的消息后,DeQueue 会删除这些行。 删除这些行后,对这些行不再引用的 Spool 可以由清除作业进行清理。

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

例如,业务流程应用程序队列(PxHostQ)可能会增长,因为负责处理业务流程的服务器受 CPU 限制,无法更快地处理。 但是,如果接收服务器速度很快,则发布速度可能快于编排服务器可以处理,导致应用程序队列增长。

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

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

TrackingData 表 增长

MessageBox 数据库中的 TrackingData 表是一个过渡表,由拦截器将运行状况和活动(HAT)以及业务活动监控(BAM)的跟踪数据写入其中。 如果禁用跟踪,此表应为空。 默认情况下,为管道和业务流程的输入/输出事件启用了 HAT 跟踪。

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

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

如果 TDDS 无法跟上拦截器将数据写入 TrackingData 表的速率,此表将增长,从而导致启动限流。 这会影响可持续吞吐量。 若要减少此问题,请确保至少有一台主机在启用跟踪的情况下运行。

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

注释

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

另请参阅

数据库层中的瓶颈