信息存储的责任

 

上一次修改主题: 2005-05-23

Exchange 存储的主要责任是维护 Exchange 数据库并管理事务,以便为其他服务和邮件客户端提供对邮箱和公用文件夹的访问支持。Exchange 存储另外还负责空间管理(管理物理数据库文件)和缓冲管理(管理 Store.exe 进程的内存使用情况)。

与其他 Exchange 服务交互

Exchange 存储与很多其他服务一前一后配合工作,以执行典型的 Exchange 操作。下表是典型的 Exchange 操作所必需的服务摘要。注意,哪些服务在特定 Exchange 服务器上可用取决于服务器的配置。

Exchange Server 2003 操作必需的服务

服务名 描述

Distributed Transaction Coordinator

对分布在跨多个数据库、邮件队列和文件系统的事务进行协调。

Event Log

将 Exchange Server 和其他应用程序发出的事件信息、警告和错误消息记录在日志中。

IIS Admin Service

允许在 IIS 管理单元中管理 Exchange HTTP 虚拟服务器。

Microsoft Exchange Event

监视文件夹并生成 Exchange Server 5.5 应用程序的事件。

Microsoft Exchange IMAP4

提供 Exchange IMAP4 服务。

Microsoft Exchange Information Store

管理 Exchange 信息存储。

Microsoft Exchange MTA Stacks

提供 Exchange X.400 服务。

Microsoft Exchange POP3

提供 Exchange POP3 服务。

Microsoft Exchange Routing Engine

处理 Exchange 邮件路由和链路状态信息。

Microsoft Exchange Site Replication Service

在组织中复制 Exchange 信息。

Microsoft Exchange System Attendant 服务

监视 Exchange 并提供必需的服务。

网络新闻传输协议 (NNTP)

跨网络传输新闻组邮件。

简单邮件传输协议 (SMTP)

跨邮件网络传输电子邮件。

World Wide Web Publishing 服务

为 Exchange Server(Microsoft Outlook Web Access、Microsoft Outlook Mobile Access 和 Microsoft Exchange ActiveSync)以及 Internet 信息服务 (IIS) 提供 HTTP 服务。

空间管理

数据库文件中的两种空间类型是已拥有的空间和可用空间。每个表、索引和长值 B 树都有自己的一列已拥有的页和可用页。可用空间是可以用来存储新数据的一系列页。可用空间始终是已拥有的空间的子集。

  • 已拥有的空间 ESE 在三级层次结构中组织已拥有的空间。这些级别是数据库根、表以及索引和长值。数据库根拥有数据库中的所有空间。表请求空间块,然后拥有这些空间块(像数据库根一样)。索引和长值树从表请求空间,而表又从数据库根拥有空间块。若要减少请求数和避免空间出现碎片,需要以块(通常 16 页或 64 KB)为单位请求更多空间。
  • 可用空间 可用空间略微不同。页可以在数据库根、表级别或作为索引或长值可用。页只在一个级别可用。

数据库碎片整理

碎片整理是 ESE 遍历每个 B 树数据库的底部页(叶页)的过程。ESE 确定它是否可以将相邻页的字符串合并成单个页。这将释放页并让它们返回到表的可用空间中。相关页在数据库文件内部的位置和连续性会被尽可能最佳化。

碎片整理可以按两个模式执行:

  • 联机碎片整理 该模式作为系统维护过程(默认情况下在 1:00 A.M. 和 6:00 A.M. 之间)的一部分运行。如果 ESE 无法处理完整个数据库,它会通知您它在哪里停止,并在下一次 Exchange 存储维护窗口发生时从该点继续。
    联机碎片整理有以下限制:
    • 数据库文件 (.edb) 内部的可用空间不会返回给文件系统。而是在联机碎片整理完成之后,由 Microsoft Exchange Information Store 服务在应用程序事件日志中记录一个事件(事件 ID 1221),该事件将指示可用的空闲数据库空间的数量。在物理数据库文件增长之前,如果需要,将使用该可用空间。
    • 数据库中的可用空间采用的形式是可以用来存储新数据的一组页。可用空间称为空间树。空间树是作为 B 树占用的,只要需要将新数据块添加到数据库中,就会对该 B 树进行搜索。在联机碎片整理期间不会删除空间树,空间树将保持碎片状态,直到执行脱机碎片整理。
    • 不回收被删除的列 ID 和长值 ID。
    • 将辅助索引重新排列但不重建它(如果有索引损坏,不会修复它)。
    • 不支持数据库文件 (.edb) 中的垂直合并(不折叠树级别)。
  • 脱机碎片整理 这是由管理员通过运行针对其数据库的 ESEUTIL 实用程序来完成的手动过程。Eseutil.exe 是位于 \Program Files\Exchsrvr\Bin 目录中的命令行实用程序。
    note注意:
    如果邮箱或公用文件夹存储是在您试图使用 ESEUTIL.exe 来压缩它的数据库时装入的,那么将返回错误代码 -1032 (JET_errFileAccessDenied)。记住,在对数据库进行脱机碎片整理之前和之后都要执行完整备份。

缓冲管理

ESE 的基本设计目标是避免磁盘访问。为了这样做,ESE 使用了一个全面的缓冲管理器。缓冲管理器执行以下两个作业:

  • 它决定缓冲缓存应当使用多少内存。这是使用称为动态缓冲分配 (DBA) 的内部功能来完成的。
  • 它决定了哪个页应当留在缓冲缓存中。由一个叫做 LRU-K 的算法做出该决定。

动态缓冲分配

动态缓冲分配 (DBA) 是在 Exchange Server 5.5 中首先引入的功能,它已经成为管理 Microsoft Exchange Information Store 服务内存使用情况的主要因素。ESE 连续监视缓存状态。它确认系统的要求,并在需要时对缓存大小做出调整。

动态缓冲分配使用四个规则来管理缓存应当有多大或多小:

  • 可用内存越多,Exchange 存储的工作集增长得越快。
  • 缓存内存越多,Exchange 存储的工作集收缩得越快。
  • 内存负载越高,Exchange 存储的工作集增长得越快。
  • 可用内存负载越高,Exchange 存储的工作集收缩得越快。

DBA 使用专利公式来确定缓冲缓存大小应当随时间推移如何增长或收缩。

LRU-K 替换算法

DBA 管理缓冲区的大小。随着时间的推移,将在缓冲区中填充所缓存的数据库页。为了给更多页留出空间,必须从缓存中删除更早的页。DBA 提供的一个机制可以确定哪些页留在缓存中。数据库系统传统上使用最近最少使用 (LRU) 算法,这种算法由 Denning 在 1968 年首先描述(P. J. Denning,“Resource Allocation In Multiprocess Computer Systems”,Massachusetts Institute of Technology,Cambridge,MA,1968 年)。当需要缓冲空间时,LRU 会从内存缓冲区中丢弃最长时间未被访问的页。

但是,LRU 算法也有缺点。它仅仅根据最后引用的时间来决定从内存中丢弃哪一页。具体地说,LRU 无法区分有相对频繁引用的页和有非常少引用的页。例如,某一页可能已被访问了 100 次,它后面的另一页则只被访问了一次。按照 LRU,被访问了 100 次的页会被丢弃,而不管该页比只被访问一次的另一页更受欢迎这一事实。

为了优化数据库磁盘缓冲,1993 年引入了 LRU-K 算法(Elizabeth J. O'Neil、Patrick E. O'Neil、Gerhard Weikum,“The LRU-K Page Replacement Algorithm For Database Disk Buffering”。SIGMOD 会议 1993 年)。该算法通过区别对待频繁引用的页和很少引用的页,从而超越了传统缓冲算法。Exchange Server 2003 使用 LRU-K 算法。

LRU-K 算法跟踪最后一次对内存页进行 K 引用的时间(ESE 将 K 的默认值设置为 2),并按照所期望的未来行为,使用该统计信息对页进行等级排序。基于该统计信息,ESE 可以决定要丢弃哪个内存驻留页,以便为必须读入内存中的最近访问过的页腾出空间。因为有关被引用的页的统计信息被经常收集,因此 LRU-K 算法可以实时地适应不断更改的访问模式。该算法相当简单,因此几乎不会带来多少簿记开销。它使用每个页的最后两个引用或更多的引用(通常是最后一个 K 引用,在这里,K 大于或等于 2)来决定应当丢弃哪个页。