维护和排查 BizTalk Server 数据库问题
本文详细介绍了如何维护和排查 BizTalk Server 数据库问题。
原始产品版本: BizTalk Server 数据库
原始 KB 数: 952555
总结
Microsoft BizTalk Server 数据库的运行状况对于成功的 BizTalk Server 消息传送环境非常重要。 本文讨论使用 BizTalk Server 数据库时要考虑的重要事项。 这些具体注意事项包括:
- 必须禁用
auto update statistics
和auto create statistics
SQL Server 选项。 - 必须正确设置
max degree of parallelism
(MAXDOP) 选项。 - 确定何时可以重新生成 BizTalk Server 索引。
- 可能会发生锁定、死锁或阻塞。
- 可能会遇到大型数据库或表的问题。
- BizTalk SQL Server 代理作业。
- 服务实例可能会挂起。
- 可能会遇到 SQL Server 和 BizTalk Server 性能问题。
- 应遵循 BizTalk Server 中的最佳做法。
简介
本文介绍如何维护 BizTalk Server 数据库以及如何排查 BizTalk Server 数据库问题。
必须禁用自动创建统计信息和自动更新统计信息选项
必须在数据库上BizTalkMsgBoxDb
保留禁用选项。auto create statistics
auto update statistics
若要确定这些设置是否已禁用,请在 SQL Server 中执行以下存储过程:
EXEC sp_dboption 'BizTalkMsgBoxDB', 'auto create statistics'
EXEC sp_dboption 'BizTalkMsgBoxDB', 'auto update statistics'
应将当前设置设置为 off
。 如果此设置设置为 on
,请通过在 SQL Server 中执行以下存储过程将其关闭:
EXEC sp_dboption 'BizTalkMsgBoxDB', 'auto create statistics', 'off'
EXEC sp_dboption 'BizTalkMsgBoxDB', 'auto update statistics', 'off'
必须正确设置 Max Degree of Parallelism 属性
在运行 SQL Server 并托管 BizTalkMsgBoxDb
数据库的计算机上,将最大并行度 run_value
和 config_value
属性设置为值 1。 在更高版本的 SQL 版本中,还可以为每个数据库而不是每个 SQL 实例指定此设置。 有关详细信息,请参阅 设置 MAXDOP。 若要确定设置 max degree of parallelism
,请对 SQL Server 中的 Master 数据库执行以下存储过程:
EXEC sp_configure 'show advanced options', 1;
GO
EXEC sp_configure 'max degree of parallelism'
如果未将属性run_value
config_value
设置为值 1,请在 SQL Server 中执行以下存储过程,将其设置为 1:
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_configure 'max degree of parallelism', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
确定何时可以重新生成 BizTalk Server 索引
大多数 BizTalk Server 索引都是聚集索引(索引 ID:1)。 可以使用 DBCC SHOWCONTIG
SQL Server 语句显示 BizTalk Server 表的碎片信息。
BizTalk Server 索引基于 GUID。 因此,通常会发生碎片。 如果语句返回 DBCC SHOWCONTIG
的扫描密度值小于 30%,则可以在停机期间重新生成 BizTalk Server 索引。
许多 BizTalk Server 表包含使用 DataType
定义的列。 无法在这些列中执行联机索引编制。 因此,在 BizTalk Server 处理数据时,不应重新生成 BizTalk Server 索引。
可能会发生锁定、死锁或阻塞
通常,锁和块发生在 BizTalk Server 环境中。 但是,这些锁或块不会长时间保留。 因此,阻塞和死锁表示潜在问题。
可能会遇到大型数据库或表的问题
我们已经看到, BizTalkMsgBoxDb
当数据库更大时,可能会出现性能问题。 理想情况下, BizTalkMsgBoxDb
数据库不应保存任何数据。 在 BizTalkMsgBoxDb
处理数据或移动到 BizTalkDTADb
或 BAM 数据库之前,应将数据库视为缓冲区。
在后端使用功能强大的 SQL Server 且许多长时间运行的业务流程的环境可能有一个 BizTalkMsgBoxDb
大于 5 GB 的数据库。 不使用长时间运行的业务流程的高卷环境应具有 BizTalkMsgBoxDb
小于 5 GB 的数据库。
数据库 BizTalkDTADb
没有设置大小。 但是,如果性能下降,数据库可能太大。 对于一些客户而言,20 GB 可能被认为太大,而对于具有 200 GB 的其他客户,在多个 CPU、大量内存和快速网络和存储上运行的强 SQL 服务器可能正常工作。 如果拥有大型 BizTalk Server 数据库,可能会遇到以下问题:
数据库
BizTalkMsgBoxDb
继续增长。 但是,日志文件和数据大小保持不变。BizTalk Server 处理甚至简单的消息流方案所需的时间比平时要长。
BizTalk 管理控制台或运行状况和活动跟踪 (HAT) 查询花费的时间比平常长,可能会超时。
数据库日志文件永远不会被截断。
BizTalk SQL Server 代理作业运行速度比平常慢。
与通常的表大小相比,某些表较大或行过多。
数据库可能会因各种原因而变得很大。 这些原因可能包括:
- BizTalk SQL Server 代理作业未运行
- 大量挂起的实例
- 磁盘故障
- 跟踪
- 限制
- SQL Server 性能
- 网络延迟
请确保知道环境中的预期内容,以确定是否发生了数据问题。
默认情况下,在默认主机上启用跟踪。 BizTalk 要求在单个主机上选中“允许主机跟踪”选项。 启用跟踪后,跟踪数据解码服务(TDDS)会将跟踪事件数据从 BizTalkMsgBoxDb
数据库移动到 BizTalkDTADb
数据库。 如果跟踪主机已停止,TDDS 不会将数据移到 BizTalkDTADb
数据库,并且 TrackingData_x_x
数据库中的 BizTalkMsgBoxDb
表将增长。
建议将一个主机用于跟踪。 若要允许 TDDS 在大容量方案中维护新的跟踪事件,请创建单个跟踪主机的多个实例。 不应存在多个跟踪主机。
表中的行数可能太多。 没有设置过多的行数。 此外,此行数因表中存储的数据类型而异。 例如, dta_DebugTrace
包含 100 多万行的表可能具有太多行。 <HostName>Q_Suspended
包含 200,000 多行的表可能包含过多行。
使用正确的 BizTalk SQL Server 代理作业
BizTalk SQL Server 代理作业对于管理 BizTalk Server 数据库和维护高性能非常重要。
备份 BizTalk Server SQL Server 代理作业是启动SQL Server 代理和 BizTalkServer 主机实例时唯一支持备份 BizTalk Server 数据库的方法。 此作业要求所有 BizTalk Server 数据库都使用完整恢复模式。 应为正常的 BizTalk Server 环境配置此作业。 仅当停止SQL Server 代理并且所有 BizTalk Server 主机实例都停止时,SQL Server 方法才可用于备份 BizTalk Server 数据库。
MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb
SQL Server 代理作业无限运行。 因此,SQL Server 代理作业历史记录永远不会显示成功完成。 如果发生故障,作业在一分钟内重新启动,并继续无限运行。 因此,可以安全地忽略失败。 此外,可以清除作业历史记录。 仅当作业历史记录报告此作业不断失败并重启时,才应该担心。
MessageBox_Message_Cleanup_BizTalkMsgBoxDb
SQL Server 代理作业是唯一不应启用的 BizTalk Server 作业,因为它由MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb
SQL Server 代理作业启动。
DTA 清除和存档SQL Server 代理作业通过清除和存档跟踪的消息来帮助维护BizTalkDTADb
数据库。 此作业读取表中的每一行,并比较时间戳以确定是否应删除记录。
除SQL Server 代理作业外MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb
的所有 BizTalk SQL Server 代理作业都应成功运行。
服务实例可能会挂起
服务实例可以暂停(可恢复)或挂起(不可恢复)。 这些服务实例可以是消息传送、业务流程或端口。
这些服务实例可以使 BizTalkMsgBoxDb
数据库变得不必要的增长,并且可以终止。 可以使用组中心查询、恢复或终止消息。 还可以使用 Terminate.vbs 脚本或 BizTalk 运行状况监视器 (BHM) 工具来查询、清除和维护 BizTalk 数据库。 在某些情况下,系统中可能会留下孤立消息或僵尸消息。 BHM 工具可以帮助纠正这些情况。
有关 Terminate.vbs 脚本的详细信息,请参阅“删除挂起的服务实例”。
缓存实例不会显示在“组中心”页中,并且无法挂起或终止它们。 此限制是表增长的常见原因。 若要防止 BizTalk Server 2006 中缓存服务实例的新僵尸消息,请在 Microsoft 知识库文章936536中安装修补程序。 此问题已在 BizTalk Server 2006 R2 及更高版本中得到解决。
注意
僵尸消息是路由但未使用的消息。
有关僵尸消息的说明,请访问以下 MSDN 网站: BizTalk Core Engine 的 WebLog
可能会遇到 SQL Server 和 BizTalk Server 性能问题
BizTalk Server 在一分钟内将数百个简短的快速事务处理到 SQL Server。 如果 SQL Server 无法维持此活动,BizTalk Server 可能会遇到性能问题。 在 性能监视器 中,监视 PhysicalDisk 性能对象中的 Avg. Disk sec/Read、Avg. Disk sec/Transfer 和 Avg. Disk sec/Write 性能监视器 计数器。 最佳值小于 10 毫秒(毫秒)。 值 20 毫秒或更大被视为性能不佳。
BizTalk Server 中的最佳做法
在 SQL Server 上启动SQL Server 代理。 停止SQL Server 代理后,负责数据库维护的内置 BizTalk SQL Server 代理作业无法运行。 此行为会导致数据库增长,此增长可能会导致性能问题。
将 SQL Server 日志文件 (LDF) 和主数据库文件 (MDF) 文件放在单独的驱动器上。 当 LDF 和数据库的文件BizTalkMsgBoxDb
BizTalkDTADb
位于同一驱动器上时,可能会发生磁盘争用。
如果不受益于消息正文跟踪,请不要启用此功能。 但是,最好在开发和排查解决方案时启用消息正文跟踪。 如果执行此操作,请确保在完成后禁用邮件正文跟踪。 启用消息正文跟踪后,BizTalk Server 数据库将增长。 如果需要启用消息正文跟踪,请确认TrackedMessages_Copy_BizTalkMsgBoxDb
成功运行和 DTA 清除和存档SQL Server 代理作业。
通常,较小的事务日志会导致性能更好。 若要减小事务日志,请将备份 BizTalk Server SQL Server 代理 作业配置为更频繁地运行。
sp_ForceFullBackup
数据库中的BizTalkMgmtDb
存储过程还可用于帮助执行数据和日志文件的临时完整备份。 存储过程使用值 1 更新 adm_ForceFullBackup
表。 下次运行备份 BizTalk Server 作业时,将创建完整的数据库备份集。
BizTalk 运行状况监视器 (BHM) 工具可用于评估现有的 BizTalk Server 部署。 BHM 执行许多与数据库相关的检查。
故障排除
BizTalk Server SQL Server 数据库的最佳故障排除步骤取决于数据库问题类型,例如阻止或死锁。 若要排查 BizTalk Server 数据库问题,请执行以下步骤。
步骤 1:启用并运行所有必需的 BizTalk SQL Server 代理作业
所有 BizTalk SQL Server 代理作业(应启用和成功运行作业MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb
除外)。 不要禁用任何其他作业。
如果发生故障,请使用 SQL Server 中的“查看历史记录 ”选项查看错误信息,然后相应地对失败进行故障排除。 请记住,MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb
SQL Server 代理作业无限运行。 因此,仅当作业历史记录报告作业不断失败并重启时,才应该担心。
步骤 2:使用 BizTalk 运行状况监视器 (BHM)/MsgBoxViewer 工具
在重现问题时收集 BHM 报告。
BHM 工具可用于故障排除,因为它提供了一个 HTML 报表,其中包含有关表大小和行计数的详细信息。 该报表还有助于确定 BizTalk Server 是否正在限制。 此外,该工具还提供 BizTalk Server 数据库和 BizTalk Server 配置的快照视图。
有关 BizTalk Server 中的限制的详细信息,请参阅 BizTalk Server 如何实现主机限制。
BizTalk Server 运行速度比平常慢时,请运行 BHM 工具,然后查看生成的 HTML 报告,了解任何问题。 “ 摘要” 部分列出了黄色警告和红色的潜在问题。
此外,可以使用 BHM 工具输出来确定哪些表最大且记录最多。 下表列出了通常增长最大的 BizTalk Server 表。 可以使用此数据来确定可能存在潜在问题的位置。
表 | 说明 |
---|---|
<HostName>Q_Suspended |
此表包含对表中与特定主机挂起实例关联的消息 Spool 的引用。 此表位于 BizTalkMsgBoxDb 数据库中。 |
<HostName>Q |
此表包含对表中与特定主机关联的消息 Spool 的引用,并且不会挂起。 此表位于 BizTalkMsgBoxDb 数据库中。 |
Spool Parts Fragments |
这些表将实际消息数据存储在 BizTalkMsgBoxDb 数据库中。 |
Instances |
此表将所有实例及其当前状态 BizTalkMsgBoxDb 存储在数据库中。 |
TrackingData_0_x |
这四个表将业务活动监视(BAM)跟踪的事件 BizTalkMsgBoxDb 存储在 TDDS 的数据库中,以将事件移动到 BAMPrimaryImport 数据库。 |
TrackingData_1_x |
这四个表将跟踪的事件 BizTalkMsgBoxDb 存储在 TDDS 的数据库中,以将事件移动到 BizTalkDTADB 数据库。 |
Tracking_Fragmentsx Tracking_Partsx Tracking_Spoolx |
其中两个表位于 BizTalkMsgBoxDb 数据库和 BizTalkDTADb 数据库中。 一个是联机的,另一个是脱机的。在 BizTalk Server 2004 SP2 和更高版本中, TrackedMessages_Copy_BizTalkMsgBoxDb SQL Server 代理作业会将跟踪的消息正文直接移到数据库中的这些表BizTalkDTADb 。在 BizTalk Server 2004 Service Pack 1(SP1)和早期版本的 BizTalk Server 2004 中, TrackedMessages_Copy_BizTalkMsgBoxDb SQL Server 代理作业会将跟踪的消息正文复制到数据库中的这些表中BizTalkMsgBoxDb 。 TrackingSpool_Cleanup_BizTalkMsgBoxDb SQL Server 代理作业会清除脱机表,并使表联机,而作业也会使联机表脱机。 |
dta_ServiceInstances |
此表存储数据库中服务实例的 BizTalkDTADb 跟踪事件。 如果此表很大,则 BizTalkDTADb 数据库可能很大。 |
dta_DebugTrace |
此表将业务流程调试器事件存储在 BizTalkDTADb 数据库中。 |
dta_MessageInOutEvents |
此表将跟踪的事件消息 BizTalkDTADb 存储在数据库中。 这些跟踪的事件消息包括消息上下文信息。 |
dta_ServiceInstanceExceptions |
此表存储数据库中任何挂起的服务实例 BizTalkDTADb 的错误信息。 |
请考虑以下方案。
<HostName>Q_Suspended
表<HostName>Q_Suspended
如果表有多个记录,则这些表可能是在组中心或 HAT 中显示的有效挂起实例。 这些实例可以终止。 如果这些实例未出现在 组中心 或 HAT 中,则这些实例可能是缓存实例或孤立路由失败报告。 终止挂起的实例时,将清理此表中的项及其关联的行Spool
以及Instances
表中的行。在此方案中,通过恢复挂起的实例或终止它们来处理挂起的实例。 也可以使用 BHM 工具。
<HostName>Q
表<HostName>Q
如果表有多个记录,则可能存在以下类型的实例:- 准备运行的实例
- 活动实例
- 已解除冻结的实例 BizTalk Server 需要时间才能“赶上”并处理实例。
当传入的处理速率超过传出处理速率时,此表可能会增长。 当出现另一个问题(例如大型
BizTalkDTADb
数据库或 SQL Server 磁盘延迟)时,可能会出现这种情况。Spool
、Parts
表和Fragments
表Spool
如果和Parts
Fragments
表具有许多记录,则许多消息当前处于活动状态、解除冻结或挂起。 根据这些表的大小、部件数和碎片设置,单个消息可能会生成所有这些表。 每条消息在Spool
表中只有一行,表中至少有一行Parts
。Instances
桌子BizTalk 管理员不应允许许多挂起的实例保留在
Instances
表中。 仅当业务逻辑需要长时间运行的业务流程时,才应保留解除冻结的实例。 请记住,一个服务实例可以与表上的Spool
许多消息相关联。TrackingData_x_x
表TrackingData_x_x
如果表很大,跟踪主机(TDDS)未成功运行。 如果跟踪主机实例正在运行,请查看数据库中的BizTalkDTADb
事件日志和TDDS_FailedTrackingData
表以获取错误信息。 如果 BizTalk 状态为 6(大型数据库),则如果不需要数据,则也可以使用 BizTalk 终止符工具截断这些表。如果表中的序列号
BizTalkMsgBoxDb
TrackingData_x_x
与BAMPrimaryImport
表BizTalkDTADb
TDDS_StreamStatus
之间存在较大差距,则 TDDS 可能不会从BizTalkMsgBoxDb
数据库移动数据。 若要更正此问题,请使用 BHM 工具清除这些表并重置序列号。dta_DebugTrace
和dta_MessageInOutEvents
表在业务流程上启用 Shape 开始和结束时,将
dta_DebugTrace
填充该表。dta_DebugTrace
如果表包含许多记录,则正在使用或正在使用这些业务流程调试事件。 如果常规操作不需要业务流程调试,请清除业务流程属性中的“形状开始和结束”复选框。在业务流程和/或管道上启用消息发送和接收时,将
dta_MessageInOutEvents
填充该表。 如果不需要这些跟踪事件,请在业务流程和/或管道属性中清除此选项的复选框。如果禁用这些跟踪事件或数据库中存在
BizTalkMsgBoxDb
积压工作,这些表可能会继续增长,因为 TDDS 继续将此数据移到这些表中。默认情况下,全局跟踪处于启用状态。 如果不需要全局跟踪,则可以禁用它。 有关详细信息,请参阅 “如何关闭全局跟踪”。
如果数据库中的
dta_DebugTrace
表和/或dta_messageInOutEvents
表BizTalkDTADb
太大,则可以在停止跟踪主机后手动截断表。 BHM 工具还提供此功能。若要截断数据库中的所有跟踪表
BizTalkMsgBoxDb
,请使用 BHM 工具。 BHM 工具可在Microsoft下载中心外部使用。有关跟踪数据库大小调整指南的详细信息,请访问以下 MSDN 网站: 跟踪数据库大小调整准则。
dta_ServiceInstanceExceptions
桌子该
dta_ServiceInstanceExceptions
表通常在定期暂停实例的环境中变得很大。
步骤 3:调查死锁方案
在死锁方案中,在 SQL Server 上启用 DBCC 跟踪,以便死锁信息写入 SQLERROR 日志。
在 SQL Server 2005 及更高版本中,执行以下语句:
DBCC TRACEON (1222,-1)
在 SQL Server 2000 中,执行以下语句:
DBCC TRACEON (1204)
此外,使用 PSSDiag 实用工具收集有关事件和 Lock:Deadlock
Chain 事件的数据Lock:Deadlock
。
数据库 BizTalkMsgBoxDB
是卷高事务联机事务处理(OLTP)数据库。 需要一些死锁,并且此死锁由 BizTalk Server 引擎在内部处理。 发生此行为时,错误日志中未列出任何错误。 调查死锁方案时,输出中正在调查的死锁必须与事件日志中的死锁错误相关联。
取消排队命令和一些SQL Server 代理作业预计将死锁。 通常,这些工作被选为死锁受害者。 这些作业将显示在死锁跟踪中。 但是,事件日志中未列出任何错误。 因此,此死锁是预期的,你可以安全地忽略这些作业的死锁。
如果频繁的死锁出现在死锁跟踪中,并且事件日志中列出了关联错误,则可能需要死锁。
步骤 4:查找阻止的进程
使用 SQL Server 中的活动监视器获取锁定系统进程的服务器进程标识符(SPID)。 然后,运行 SQL Profiler 来确定在锁定 SPID 中执行的 SQL 语句。
若要排查 SQL Server 中的锁定和阻止问题,请使用 PSSDiag for SQL 实用工具捕获已启用阻止脚本的所有 Transact-SQL 事件。
在 SQL Server 2005 及更高版本中,可以指定 阻止的进程阈值 设置,以确定哪些 SPID 或 SPID 的阻塞时间比指定的阈值长。
有关阻止的进程阈值设置的详细信息,请参阅阻止的进程阈值服务器配置选项。
注意
在 SQL Server 中遇到锁定或阻止问题时,建议联系Microsoft客户支持服务。 Microsoft客户支持服务可帮助你配置正确的 PSSDiag 实用工具选项。
步骤 5:安装最新的 BizTalk Server Service Pack 和累积更新
BizTalk Server 更高版本已移动到累积更新 (CU) 模型。 累积更新将包含最新的修补程序。
删除所有数据
如果数据库太大或首选方法是删除所有数据,则可以删除所有数据。
注意
请勿在数据至关重要或需要数据的任何环境中使用此方法。
BizTalkMsgBoxDb 数据库清除步骤
若要删除数据库中的所有数据BizTalkMsgBoxDb
,请使用 BizTalk 运行状况监视器 (BHM) 工具。
BizTalkDTADb 数据库清除选项
若要从BizTalkDTADb
数据库中删除所有数据,请使用 BizTalk 运行状况监视器 (BHM) 工具。 否则,请使用以下方法之一。
注意
虽然这两种方法都删除所有消息,但方法 2 速度更快。
方法 1:
备份所有 BizTalk Server 数据库。
dtasp_PurgeAllCompletedTrackingData
执行存储过程。 有关存储过程的详细信息dtasp_PurgeAllCompletedTrackingData
,请参阅 如何从 BizTalk 跟踪数据库中手动清除数据。注意
此操作将删除所有已完成的消息。
方法 2:
备份所有 BizTalk 数据库。
dtasp_CleanHMData
执行存储过程。 仅当数据库包含必须删除的许多不完整实例时BizTalkDTADb
,才使用此选项。为此,请按照下列步骤进行操作:
- 停止所有 BizTalk 主机、服务和自定义独立适配器。 如果使用 HTTP 或 SOAP 适配器,请重启 IIS 服务。
- 对
dtasp_CleanHMData
数据库执行存储过程BizTalkDTADb
。 - 重启所有主机和 BizTalk Server 服务。
仅 BizTalk Server 2004 步骤
注意
如果必须具有跟踪数据,请备份 BizTalkDTADb
数据库,将数据库还原到另一个 SQL Server,然后清除原始 BizTalkDTADb
数据库。
如果需要分析 BHM 数据或 PSSDiag 输出的帮助,请联系Microsoft客户支持服务。 有关客户支持服务电话号码的完整列表以及有关支持成本的信息,请参阅“联系Microsoft 支持部门。
注意
在联系客户支持服务之前,请压缩 BHM 报告数据、PSSDiag 输出和更新的事件日志(.evt 文件)。 可能需要将这些文件发送到 BizTalk Server 支持工程师。
适用于
- BizTalk Server 2009
- BizTalk Server 2010
- BizTalk Server 2013
- BizTalk Server 2013 R2
- BizTalk Server 2016
- BizTalk Server 2020