排查 MessageBox 延迟问题

理想情况下,在将消息发布到 MessageBox 数据库后,所有消息都将被处理和传送,并且 MessageBox 数据库永远不会变得过大。 MessageBox 中所有不再被引用的消息将立即由定期清理 MessageBox 数据库表的 SQL 代理作业删除。

但是在实际情况下,通常不是以可预测的线性方式来接收消息,并且 SQL 代理作业需要时间来清理 MessageBox 数据库表。

因此在某些情况下,MessageBox 可能会迅速变得相当大。

以下各项原因可能会导致 MessageBox 变得过大并因此影响整体性能:

  • 已停止设置了“允许主机跟踪”选项的 Biztalk 主机实例。 这是负责将跟踪数据从 MessageBox 数据库移至 Biztalk 跟踪数据库 (BizTalkDTADb) 的主机。

  • SQL Server 代理未运行 如果负责将数据从 MessageBox 数据库移动到 BizTalkDTADb 数据库的 SQL 作业[随后清除 MessageBox 中的移动数据]未运行,则可能发生此情况。 SQL 代理服务必须始终运行以避免出现此问题。

  • SQL Server禁用作业 即使SQL Server 代理正在运行,也不得禁用任何默认SQL Server作业。

  • BizTalkDTADb 数据库过度增长 如果 BizTalkDTADb 数据库变得非常大,导致插入 BizTalkDTADb 数据库所需的时间更长,则可能会发生这种情况。 发生这种情况时,通过跟踪数据传送服务 (TDDS) 移动数据的速度会减慢,从而导致在 MessageBox 数据库中产生积压。 要避免出现这种问题,SQL Server 必须定期对 BizTalkDTADb 数据库执行存档和清除作业。

  • 磁盘 I/O 延迟过多 如果传入 MessageBox 数据库中的数据速率快于系统处理数据并将其移动到 BizTalkDTADb 数据库的速度,则积压工作可能会生成在 MessageBox 数据库中。 如果积压的数据持续增加,则这将是一个很严重的问题,并且系统性能将随着时间推移而下降。 一种缓解此问题的方法是安装速度较快的磁盘和/或升级硬件,以帮助确保系统能够消除随着时间的推移而产生的任何消息积压现象。

未来规划

即使按照上述所有的最佳实践执行操作,随着时间的推移,移至 BizTalkDTADb 数据库的跟踪数据量也将变得很大。 实施数据库维护计划以定期存档跟踪数据是非常重要的,以使系统的执行性能保持最佳。

可在 BizTalkDTADb 数据库中保留的历史数据量取决于通过系统推送的消息量。 对于工作负担不重和吞吐量不高的系统,数据库的增长速度会较慢,并且可以将更多的历史数据保留在 BizTalkDTADb 数据库中。

建议在 BizTalkDTADb 数据库中保留尽可能少的数据,以免影响运行时性能。