优化数据库文件组

在生产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 联机丛书中的数据库性能 (https://go.microsoft.com/fwlink/?LinkID=71419) 。

此外,文件和文件组启用数据放置,因为可以在特定文件组中创建表。 这可以提高性能,因为给定表的所有文件 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 存储库:

- 策略,它们是相关规则集。
- 词汇,这些词汇是规则中数据引用的用户友好、特定于域的名称的集合。
人工工作流服务管理数据库 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解决方案中争用的主要来源是BizTalk Server MessageBox 数据库。 这在单个和多 MessageBox 方案中都是如此。 合理假设分发 BizTalk 数据库的 80% 值派生自优化 MessageBox 数据文件和日志文件。 下面详述的示例方案侧重于优化 MessageBox 数据库的数据文件。 然后,可以根据需要对其他数据库执行这些步骤。 例如,如果解决方案需要广泛的跟踪,还可以优化跟踪数据库。

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

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

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

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

    SQL Server Login screen

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

    SQL Server 2005 Management Studio, Object Explorer

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

    SQL Server 2005 Database Properties dialog box

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

    SQL Server 2005, adding filegroups to a database

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

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

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

    SQL Server 2005, adding files to a filegroup

用于将文件组和文件添加到 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本指南中的示例脚本等脚本经过全面测试,这一点至关重要。

另请参阅

优化数据库性能