在生产 BizTalk Server 环境中,文件输入/输出(I/O)争用通常是限制因素或瓶颈。 BizTalk Server 是一个非常数据库密集型的应用程序,反过来,BizTalk Server 使用的 SQL Server 数据库非常文件 I/O 密集型。 本主题介绍如何充分利用 SQL Server 的文件和文件组功能,以最大程度地减少出现文件 I/O 争用并提高 BizTalk Server 解决方案的整体性能。
概述
随着吞吐量的增加,每个 BizTalk Server 解决方案最终都会遇到文件 I/O 争用。 I/O 子系统或存储引擎是任何关系数据库的关键组件。 成功的数据库实现通常需要在项目的早期阶段进行仔细规划。 此规划应包括以下问题的考虑:
要使用的磁盘硬件类型,例如 RAID(独立磁盘冗余阵列)设备。
如何使用文件和文件组在磁盘上分配数据。 有关在 SQL Server 中使用文件和文件组的详细信息,请参阅 数据库文件和文件组。
实现最佳索引设计,以提高访问数据时的性能。 有关设计索引的详细信息,请参阅 设计索引。
如何设置 SQL Server 配置参数以实现最佳性能。 有关为 SQL Server 设置最佳配置参数的详细信息,请参阅 服务器配置选项。
BizTalk Server 的主要设计目标之一是确保 消息永远不会 丢失。 为了缓解消息丢失的可能性,在处理消息时,通常会将消息写入 MessageBox 数据库。 当业务流程处理消息时,该消息将写入业务流程中每个持久性点的 MessageBox 数据库。 这些持久性点会导致 MessageBox 将消息和相关状态写入物理磁盘。 在更高的吞吐量下,此持久性可能会导致显著的磁盘争用,并可能成为瓶颈。
研究表明,充分利用 SQL Server 中的文件和文件组功能可以有效解决文件 IO 瓶颈,并提高 BizTalk Server 解决方案的整体性能。
注释
此优化应由经验丰富的 SQL Server 数据库管理员完成,只有在正确备份了所有 BizTalk Server 数据库之后。 应在 BizTalk Server 环境中的所有 SQL Server 计算机上执行此优化。
SQL Server 文件和文件组可用于提高数据库性能,因为此功能允许跨多个磁盘、多个磁盘控制器或 RAID(独立磁盘冗余阵列)系统创建数据库。 例如,如果计算机有四个磁盘,则可以创建一个数据库,该数据库由三个数据文件和一个日志文件组成,每个磁盘上有一个文件。 访问数据时,四个读/写头可以并行访问数据。 这大大加快了数据库操作的速度。 有关为 SQL Server 磁盘实现硬件解决方案的详细信息,请参阅 SQL Server 联机丛书中 的数据库性能 。
此外,文件和文件组支持数据放置,因为可以在特定文件组中创建表。 这可以提高性能,因为给定表的所有文件 I/O 都可以定向到特定的磁盘。 例如,大量使用的表可以放置在位于一个磁盘上的文件组中的文件上,而数据库中其他不太频繁访问的表可以位于另一个文件组中的另一个文件组中,位于另一个磁盘上。
在 数据库层中的瓶颈中,详细讨论了文件 I/O 瓶颈。 文件 I/O(磁盘 I/O)最常见的瓶颈指标是“物理磁盘:平均磁盘队列长度”计数器的值。 如果运行 SQL Server 的任何计算机上任何给定磁盘的“物理磁盘:平均磁盘队列长度”计数器的值大于 3,则文件 I/O 可能是瓶颈。
如果应用文件或文件组优化无法解决文件 I/O 瓶颈问题,则可能需要通过添加其他物理驱动器或 SAN 驱动器来提高磁盘子系统的吞吐量。
本主题介绍如何手动应用文件和文件组优化,但这些优化也可以编写脚本。 BizTalk Server MessageBox 数据库文件组 SQL 脚本中提供了一个示例 SQL 脚本。
注释
请务必注意,需要修改此脚本,以适应 SQL Server 数据库用于任何给定 BizTalk Server 解决方案的文件、文件组和磁盘配置。
使用默认 BizTalk Server 配置创建的数据库
根据配置 BizTalk Server 时启用的功能,最多可以在 SQL Server 中创建 13 个不同的数据库,所有这些数据库都在默认文件组中创建。 SQL Server 的默认文件组是 PRIMARY 文件组,除非使用 ALTER DATABASE 命令更改默认文件组。 下表列出了在配置 BizTalk Server 时启用所有功能时在 SQL Server 中创建的数据库。
BizTalk Server 数据库
数据库 | 默认数据库名称 | DESCRIPTION |
---|---|---|
配置数据库 | BizTalkMgmtDb | BizTalk Server 组中所有 BizTalk Server 实例的元信息中心存储。 |
BizTalk MessageBox 数据库 | BizTalkMsgBoxDb | 存储订阅条件表达式。 它是一个主机平台,为每个 BizTalk Server 主机保留队列和状态表。 MessageBox 数据库还存储消息和消息属性。 |
BizTalk 跟踪数据库 | BizTalkDTADb | 存储 BizTalk Server 跟踪引擎跟踪的业务和性能监视数据。 |
BAM 分析数据库 | BAMAnalysis | SQL Server Analysis Services 数据库,用于保留业务活动的聚合历史数据。 |
BAM 星型架构数据库 | BAMStarSchema | 将从业务活动监视收集的数据转换为用于 OLAP 处理。 使用 BAM 分析数据库时,需要此数据库。 |
BAM 主要导入数据库 | BAMPrimaryImport | 存储来自“业务活动”的事件,然后在活动实例之后查询进度和数据。 此数据库还会执行实时聚合。 |
BAM 存档数据库 | BAMArchive | 存储订阅条件。 BAM 存档数据库可最大程度地减少 BAM 主导入数据库中业务活动数据的累积。 |
SSO 数据库 | SSODB | 安全地存储接收位置的配置信息。 将 SSO 关联应用程序的信息以及加密的用户凭据存储到所有关联应用程序。 |
规则引擎数据库 | BizTalkRuleEngineDb | 存储库: - 策略,它们是相关规则集。 - 词汇是用于规则中数据引用的用户友好的、特定于某个领域的名称集合。 |
人工工作流服务管理数据库 | BizTalkHwsDb | 存储 BizTalk 人工工作流服务所需的管理信息。 |
贸易合作伙伴管理数据库 | TPM | 存储业务活动服务(BAS)的贸易合作伙伴数据。 |
分析服务器跟踪管理数据库 | BizTalkAnalysisDb | 存储业务和健康监控 OLAP 多维数据集。 |
数据文件和日志文件的分离
如前所述,默认 BizTalk Server 配置将 MessageBox 数据库置于默认文件组中的单个文件中。 默认情况下,MessageBox 数据库的数据和事务日志放置在同一驱动器和路径上。 这样做是为了容纳具有单个磁盘的系统。 单个文件/文件组/磁盘配置在生产环境中 不是最佳的 配置。 为了获得最佳性能,数据文件和日志文件应放置在单独的磁盘上。
注释
日志文件绝不是文件组的一部分。 日志空间独立于数据空间进行管理。
分发 BizTalk Server 数据库的 80/20 规则
由于磁盘 I/O 争用或数据库争用,大多数 BizTalk Server 解决方案中争用的主要来源是 BizTalk Server MessageBox 数据库。 这在单个和多个消息框场景中都是如此。 合理地假设分发 BizTalk 数据库的值的 80% 从优化 MessageBox 数据文件和日志文件派生。 下面详述的示例方案侧重于优化 MessageBox 数据库的数据文件。 然后,可以根据需要对其他数据库执行这些步骤。 例如,如果解决方案需要广泛的跟踪,还可以优化跟踪数据库。
手动将文件一步一步添加到 MessageBox 数据库
本主题的此部分介绍可以遵循的步骤,手动将文件添加到 MessageBox 数据库。 在此示例中,将添加三个文件组,然后将一个文件添加到每个文件组,以便跨多个磁盘分发 MessageBox 的文件。
在 SQL Server 上手动将文件添加到 MessageBox 数据库
打开 SQL Server Management Studio 以显示 “连接到服务器 ”对话框。
在“连接到服务器”对话框的服务器名称编辑框中,输入包含 BizTalk Server MessageBox 数据库的 SQL Server 实例的名称,然后单击“连接”以显示 SQL Server Management Studio。 在 SQL Server Management Studio 的对象资源管理器 窗格中,展开 “数据库 ”以查看此 SQL Server 实例的数据库。
右键单击要向其添加文件的数据库,然后单击“ 属性 ”以显示数据库的 “数据库属性 ”对话框。
在“ 数据库属性 ”对话框中,选择 “文件组 ”页。 若要为 BizTalkMsgBoxDb 数据库创建其他文件组,请单击“ 添加 ”。 在以下示例中,添加了另外三个文件组。
在“ 数据库属性 ”对话框中,选择“ 文件” 页。
若要创建要添加到文件组的其他文件,请单击“ 添加 ”,然后单击“ 确定”。 MessageBox 数据库现在分布在多个磁盘上,这将在单个磁盘配置上提供显著的性能优势。
在以下示例中,将为前面创建的每个文件组创建一个文件,并将每个文件放置在单独的磁盘上。
用于将文件组和文件添加到 BizTalk MessageBox 数据库的示例 SQL 脚本
本指南包含用于将文件组和文件添加到 BizTalk Server MessageBox 数据库的 SQL 脚本。
注释
由于 SQL Server 按顺序写入其日志文件,因此无法通过为 SQL Server 数据库创建多个日志文件来实现性能优势。
若要运行此脚本,请执行以下步骤:
打开 SQL Server Management Studio 以显示 “连接到服务器 ”对话框。
在“连接到服务器”对话框的服务器名称编辑框中,输入包含 BizTalk Server MessageBox 数据库的 SQL Server 实例的名称,然后单击“连接”以显示 SQL Server Management Studio 对话框。
在 SQL Server Management Studio 中,单击 “文件 ”菜单,指向“ 新建”,然后单击“ 使用当前连接进行查询 ”以启动 SQL 查询编辑器。
将 BizTalk Server MessageBox 数据库文件组 SQL 脚本 中的示例脚本复制到查询编辑器中。
编辑脚本中的参数以匹配 BizTalk Server 环境,并执行脚本。
脚本的优点是,脚本可以快速执行多个任务,可以精确重现,并减少人为错误的可能性。 脚本的缺点是,执行错误编写的脚本可能会导致严重问题,这些问题可能要求从头开始重新配置 BizTalk Server 数据库。
重要
在生产环境中执行之前,SQL 脚本(如本指南中的示例脚本)经过全面测试,这一点非常重要。