优化数据库文件组

文件输入/输出 (I/O) 争用通常是生产BizTalk Server环境中的限制因素或瓶颈。 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 脚本。

注意

请务必注意,需要修改此脚本,以适应任何给定BizTalk Server解决方案SQL Server数据库使用的文件、文件组和磁盘配置。

使用默认BizTalk Server配置创建的数据库

根据配置BizTalk Server时启用的功能,最多可以在 SQL Server 中创建 13 个不同的数据库,所有这些数据库都在默认文件组中创建。 SQL Server的默认文件组是 PRIMARY 文件组,除非使用 ALTER DATABASE 命令更改默认文件组。 下表列出了在配置BizTalk Server时启用所有功能时在 SQL Server 中创建的数据库。

BizTalk Server 数据库

数据库 默认数据库名称 说明
配置数据库 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 存储库:

- 策略,这些策略是相关规则集。
- 词汇,是规则中数据引用的用户友好、特定于域的名称的集合。
Human Workflow Services 管理数据库 BizTalkHwsDb 存储 BizTalk Human Workflow Services 所需的管理信息。
贸易合作伙伴管理数据库 TPM 将 Business Activity Services 的贸易合作伙伴数据存储 (BAS) 。
跟踪 Analysis Server 管理数据库 BizTalkAnalysisDb 存储业务和运行状况监视 OLAP 多维数据集。

数据文件和日志文件的分离

如前所述,默认BizTalk Server配置会将 MessageBox 数据库置于默认文件组中的单个文件中。 默认情况下,MessageBox 数据库的数据和事务日志放置在相同的驱动器和路径上。 这样做是为了适应具有单个磁盘的系统。 在生产环境中,单个文件/文件组/磁盘配置 不是最佳 配置。 为了获得最佳性能,数据文件和日志文件应放在单独的磁盘上。

注意

日志文件不包括在文件组内。 日志空间与数据空间分开管理。

分发BizTalk Server数据库的 80/20 规则

由于磁盘 I/O 争用或数据库争用,大多数BizTalk Server解决方案中争用main源是 MessageBox 数据库BizTalk Server。 这在单个和多 MessageBox 方案中都是如此。 可以合理地假设分发 BizTalk 数据库的值的 80% 将派生自优化 MessageBox 数据文件和日志文件。 下面详细介绍的示例方案侧重于优化 MessageBox 数据库的数据文件。 然后,可以根据需要对其他数据库执行这些步骤。 例如,如果解决方案需要大量跟踪,还可以优化跟踪数据库。

手动将文件添加到 MessageBox 数据库,分步操作

本主题的这一部分介绍手动将文件添加到 MessageBox 数据库时可以遵循的步骤。 在此示例中,将添加三个文件组,然后向每个文件组添加一个文件,以便跨多个磁盘分发 MessageBox 的文件。

在 SQL Server 上手动将文件添加到 MessageBox 数据库

  1. 打开SQL Server Management Studio以显示“连接到服务器”对话框。

    SQL Server登录屏幕

  2. 在“连接到服务器”对话框的“服务器名称编辑”框中,输入包含BizTalk Server MessageBox 数据库的SQL Server实例的名称,然后单击“连接”以显示SQL Server Management Studio。 在SQL Server Management Studio的“对象资源管理器”窗格中,展开“数据库”以查看此SQL Server实例的数据库。

    SQL Server 2005 Management Studio,对象资源管理器

  3. 右键单击要向其添加文件的数据库,然后单击“ 属性 ”以显示数据库的“ 数据库属性 ”对话框。

    SQL Server 2005 数据库属性对话框

  4. 在“ 数据库属性 ”对话框中,选择“ 文件组 ”页。 若要为 BizTalkMsgBoxDb 数据库创建其他文件组,请单击“ 添加 ”。 在以下示例中,添加了另外三个文件组。

    SQL Server 2005,将文件组添加到数据库

  5. “数据库属性” 对话框中,选择 “文件” 页。

    若要创建要添加到文件组的其他文件,请单击“ 添加 ”,然后单击“ 确定”。 MessageBox 数据库现在分布在多个磁盘上,这将提供与单个磁盘配置相较的显著性能优势。

    在下面的示例中,为之前创建的每个文件组创建一个文件,每个文件都放在单独的磁盘上。

    SQL Server 2005,将文件添加到文件组

用于将文件组和文件添加到 BizTalk MessageBox 数据库的示例 SQL 脚本

本指南包含用于将文件组和文件添加到 BizTalk Server MessageBox 数据库的 SQL 脚本。

注意

由于SQL Server按顺序写入其日志文件,因此为SQL Server数据库创建多个日志文件无法实现性能优势。

若要运行此脚本,请执行以下步骤:

  1. 打开SQL Server Management Studio以显示“连接到服务器”对话框。

  2. 在“连接到服务器”对话框的“服务器名称编辑”框中,输入包含BizTalk Server MessageBox 数据库的SQL Server实例的名称,然后单击“连接”以显示“SQL Server Management Studio”对话框。

  3. 在“SQL Server Management Studio”中,单击“文件”菜单,指向“新建”,然后单击“使用当前连接进行查询”以启动 SQL 查询编辑器。

  4. 将示例脚本从 BizTalk Server MessageBox 数据库文件组 SQL 脚本复制到 查询编辑器。

  5. 编辑脚本中的参数以匹配BizTalk Server环境,并执行脚本。

    脚本的优点是脚本可以快速执行多个任务,可以精确重现,并减少人为错误的可能性。 脚本的缺点是执行错误编写的脚本可能会导致严重的问题,这些问题可能需要从头开始重新配置BizTalk Server数据库。

重要

在生产环境中执行 SQL 脚本(如本指南中的示例脚本)之前,必须经过全面测试,这一点至关重要。

另请参阅

优化数据库性能