了解数据库维护

 

适用于: Exchange Server 2010 SP3

上一次修改主题: 2016-11-28

Microsoft Exchange Server 2010 中对数据库引擎进行的架构更改大大改善了其性能和稳健性。但是这些架构更改也改变了之前 Exchange Server 版本中数据库维护任务的行为。该主题说明了必须对 Exchange Server 2010 数据库定期执行的数据库维护任务。

在本主题中描述的所有任务统称为后台数据库维护。

数据库压缩

必须完成数据库压缩以释放数据库文件中的未使用空间。数据库压缩不会将该未使用的空间返回给文件系统。而是通过将记录压缩为尽可能少的页数来释放页面,并减少访问页面所需的 I/O。为此,ESE 数据库引擎使用数据库元数据,该元数据是描述数据库中表格的信息。对于每个表格,ESE 数据库引擎会检查表格中的每页,并尝试将记录移至以逻辑顺序排序的页面。

数据库压缩很重要,因为它可以减少与备份数据库文件相关的时间,并可帮助维持可预见的数据库文件大小。这对于准确地确定服务器/存储设备规模很重要。

针对 Exchange Server 2010 重新设计了数据库压缩。最明显的一点是,该操作现在对压缩量上的数据连续性提供了首选项。在之前的 Exchange Server 版本中,更注重空间压缩。在进程跨页面将记录在空闲空间中重新排序后,得到总是以随机顺序排序的页面。结合存储计划架构,这种随机重新排序意味着任何拉出数据集的请求(例如在文件夹内下载项目)总会导致随机 I/O。在 Exchange Server 2010 中,通过在页面上按序保存记录来减少随机 I/O。

此外在之前的 Exchange Server 版本中,会在联机维护窗口中执行数据库压缩操作。在 Exchange 2010 中,数据库压缩现已成为连续运行的后台进程。

数据库碎片整理

数据库碎片整理(也称为 OLD v2 和 B+ 树碎片整理)是 Exchange Server 2010 中的一个新维护任务。数据库碎片整理对于时刻保持有效利用磁盘资源很重要(即让 I/O 更加有序而不是随机)并保持标记为连续的表格的紧密度。

数据库碎片整理是一个后台进程,在执行操作时连续分析数据库,然后在需要时触发异步工作。这一进程监视空闲页面的所有表。如果表格达到某个阈值,在该阈值上有很高百分比的总 B+ 树页面计数为空闲,则会将空闲页面返回至根。该进程还能在整个表集中借助连续空间提示(使用已知连续使用模式创建的表格)保持连续性。如果数据库碎片整理在连续表格上发现扫描/预读,并且记录没有保存在表格内的连续页面上,进程会通过将所有受影响的页面移至 B+ 树中的新范围,对该表格部分进行碎片整理。您可以使用性能计数器来查看达到稳定状态时通过数据库碎片整理执行的主动工作的低级别。

数据库碎片整理有以下控件来规定完成任务的方式:

  • 未完成任务的最大数目   如果数据库中发生了很大变化,这可防止数据碎片整理在第一次通扫期间进行太多工作。

    100ms 延迟限制   如果系统过载,数据库碎片整理程序会将碎片整理工作延迟。在下次数据遵照同样的工作模式并且系统有更多资源时完成延迟的工作。

联机数据库扫描 (数据库校验和)

联机数据库扫描(也称为数据库校验和)是大块读取数据库的进程,并且会检查每页是否存在物理页损坏。校验和的主要用途是检测事务操作未检测到的物理损坏以及丢失的流(过期页面)。

注释注意:
在 Exchange Server 2007 和之前的版本中,校验和计算在备份过程中进行。但是这会导致复制数据库的问题,因为只会对正在备份的副本进行校验和计算。如果对被动副本进行了备份,则不会对主动副本进行校验和计算。为解决该问题,会将名为“联机维护校验和”的新可选联机维护任务添加至 Exchange Server 2007 Service Pack 1 (SP1)。有关详细信息,请参阅如何在 Exchange 2007 SP1 和 SP2 中配置联机维护数据库扫描

在 Exchange 2010 中,联机数据库扫描将对数据库进行校验和检查,并执行 Exchange 2010 存储崩溃之后的操作。空间可能由于崩溃而泄漏。联机数据库扫描将查找并恢复丢失的空间。Exchange 2010 中的系统是按照每七天对每个数据库进行一次完全扫描的期望设计的。如果数据库未在此时间范围内完成扫描,则将触发警告事件。在 Exchange 2010 中,现有两种模式可用于在主动数据库副本上运行联机数据库扫描:

  • 作为已安排的邮箱数据库维护过程中的最后一个任务来运行:可以通过更改邮箱数据库维护日程安排来配置其运行的时间。可将此选项用于大小在 1 兆兆字节 (TB) 以下的较小数据库,这种数据库完成全面扫描所需的时间较少。

  • 全天候在后台运行默认行为:此选项适用于所有数据库大小,但建议用于大型数据库(大小 1-2 TB)。Exchange 每天扫描数据库的次数不会超过一次。此读取 I/O 是 100% 按顺序执行的(这在磁盘上很容易实现),在大多数系统上,等同于大约 5 兆字节 (MB)/秒的扫描率。

注释注意:
  • 命令行管理程序、EMC 和 JetStress 将数据库校验和称为后台数据库维护。要在 EMC 中启用数据库校验和,可选择“属性”中的“启用后台数据库维护(全天候 ESE 扫描)”复选框。

  • 要在命令行管理程序中启用数据库校验和,请输入以下 cmdlet:Set-MailboxDatabase -Identity MDB1 -BackgroundDatabaseMaintenance $true

  • 要在 Jetstress 2010 中启用数据库校验和,在“选择测试类型”页面上选择“运行后台数据库维护”复选框。

页面修补

页面修补会用良好的副本替换损坏的页面。损坏页检测是数据库校验和的一个功能。此外,如果页面保存在数据库缓存中,会在运行时检测到损坏页面。页面修补可对高可用性 (HA) 数据库副本发挥作用。修复损坏页面的方式取决于 HA 数据库副本是主动还是被动。

主动数据库副本上的页面修补过程

  • 检测到已损坏的页面。

  • 写入活动日志文件的标记。此标记指示损坏的页数。它还指示页面需要更换。

  • 向页面修补程序请求列表中添加一个条目。

  • 关闭活动的日志文件。

  • 复制服务将日志文件发送到被动数据库副本。

  • 目标邮箱服务器上的复制服务收到已发送的日志文件并对其进行检查。

  • 目标服务器上的信息存储将重放日志文件并一直重放到标记,检索其页面健康状况,调用重放服务回调,然后将页面发送至源邮箱服务器。

  • 源邮箱服务器收到页面的健康状况,确认在页面修补请求列表中存在一个条目,然后将页面写入日志缓冲区。相应地将页面插入数据库高速缓存。

  • 删除页修补程序请求列表中的相应条目。

  • 此时,会将数据库视为已完成修补。(稍后检查点将前移,将数据库高速缓存清空,并将覆盖磁盘上的损坏页面。)

  • 将静默地丢弃该页面上的其他所有副本(接收自另一被动副本)。这是因为页面修补请求列表中没有相应条目。

被动数据库副本上的页面修补过程

  • 在检测到损坏页面的邮箱服务器上,将对受影响的数据库副本暂停日志重放。

  • 复制服务与托管主动数据库副本的邮箱服务器配合,并从主动副本的数据库头检索损坏的页面和所需日志范围。

  • 邮箱服务器对受影响的数据库副本更新数据库头,并插入新的所需日志范围。

  • 邮箱服务器将自己所需的日志文件告知托管主动数据库副本的邮箱服务器。

  • 邮箱服务器接收需要的日志文件,并会检查它们。

  • 邮箱服务器将其从主动数据库副本检索到的数据库页面的健康状况注入。页面会写入日志缓冲区。相应地将页面插入数据库高速缓存。

  • 邮箱服务器恢复日志重放。

页面清零

数据库页面清零是一项安全措施,借助该措施数据库中已删除的页面将用一种模式覆盖(已清零)。这使得发现数据变得更为困难。

在 Exchange Server 2007 和之前的版本中,页面清零计算在流备份过程中发生。由于这些计算在流备份过程中发生,页面清零不会导致生成日志文件。由于被动副本永远不会将其页面清零,这将引发复制数据库的问题。此外,如果完成了流备份,主动副本会将其页面清零。在 Exchange Server 2007 SP1 中,我们引入了新的可选联机维护任务来解决该问题:校验和过程中将数据库页面清零。如果在校验和过程中启用了“数据库页面清零”,该任务会在联机维护窗口中将页面清零,然后记录下更改。所做的更改会复制到被动副本。

但是在 Exchange Server 2007 SP1 实施中,会在计划的维护窗口中执行清零进程。这会造成删除页面时以及将页面清零时两个时刻之间的延迟。因此,页面清零任务成为运行时事件,可在 Exchange Server 2010 SP1 中连续运行。通常,该任务现在将在发生硬删除的事务时间将页面清零。

此外,可以在联机校验和过程中将数据库页内容擦除。该情况中的目标页面如下:

  • 在运行时由于丢弃的任务(如果系统负载过大)或由于执行擦除数据任务之前存储装置崩溃而无法擦除的已删除记录。

  • 已删除的表和辅助索引。当将这些删除时,我们不要擦除其内容。因此,联机校验和检测到这些页面不再属于任何有效对象并且会将页面内容擦除。

有关 Exchange 2010 中页面清零的详细信息,请参阅了解 Exchange 2010 页清零

使用性能计数器跟踪后台维护任务

在 Exchange Server 2010 中,不会对碎片整理和压缩维护任务记录事件。但是,可以使用性能计数器跟踪后台维护任务。下面的表格描述了要在 MSExchange 数据库 ==> 实例对象下使用的性能计数器。

计数器 说明

数据库维护持续时间

自从上一次完成对该数据库的维护以来所经过的秒数。如果值为 0,则当天维护已完成。

数据库维护页错误校验和

在数据库维护过程中遇到的非可纠正页面校验和的数目

碎片整理任务

当前正在运行的后台数据库碎片整理任务的计数

每秒完成的碎片整理任务

完成后台数据库碎片整理任务的速率

下面的表格描述了要在 MSExchange 数据库对象下使用的页面清零计数器:

计数器 说明

已清零数据库维护页

指示自调用性能计数器以来,由数据库引擎清零的页数

每秒已清零数据库维护页数

指示数据库引擎对页进行清零的速率

空白空间

在数据库中,您可以有数千个表。在每个邮箱中,每个文件夹至少可以有一个表。消息表、文件夹表和附件表代表 90% 已在数据库中使用的空间。这些表在数据库中有最大空闲空间(也称为空白)百分比。

要确定数据库中存在多少空白并回收空白,可执行以下步骤:

  1. 卸载数据库。

  2. 使用 Exchange Server Database Utilities (Eseutil) 工具再配合 /MS 开关完成空间转储。有关如何进行该操作的详细信息,请参阅如何在文件转储模式下运行 Eseutil /M

    在转储文件末尾是类似下面内容的行:

    -----------------------------------------------------------------------
    253

    此为可在所有表格中使用的页面总数的和。将该值乘以 32K 来确定数据库中确切的空白量。

注释注意:
有关 Eseutil 转储文件的示例,请参阅确定 Exchange 数据库中确切的空间量

在确定数据库中有多少空白之后,您可能还想回收空白。

如果遇到有大量空白的数据库,并且不希望一般的操作回收空白,我们建议执行以下步骤:

  1. 创建新的数据库及其相关联的数据库副本。

  2. 将所有邮箱都移动到新的数据库。

  3. 删除原始数据库及其关联的数据库副本。

 © 2010 Microsoft Corporation。保留所有权利。