第二:数据库维护时所需要的空间。在我们进行Exchange Server数据库的离线碎片(Offline defrag)整理时,对于一个大小为20GB的数据库文件(edb文件加上stm文件),我们需要额外的20GB左右空间来存放整理过碎片的数据库文 件。另外,当需要进行数据库修复时,通常我们都会在服务器上做一个备份,这些空间,也是需要考虑的。
因此,存放数据库文件的RAID 5系统的容量,一般是邮箱数*用户数计算出来的容量的1.5至2倍。
日志文件的磁盘空间大小,由进行全备份的周期决定(在进行全备份时, 系统会自动清除日志文件)。如果企业每周进行一次全备份,那么日志文件磁盘的空间至少要能容纳一周之内产生日志文件(考虑到备份可能失败,磁带机故障等意 外因素,这个容量还需要留有余地)。通常情况下,我们可以采用18GB的SCSI磁盘组成镜像阵列,然后根据日志文件的增长速度,来动态的调整全备份的时 间。 存储引擎的性能检测和优化
作为管理员,我们需 要密切的监控Exchange Server Store的性能状态。下面的一些性能计数器是我们需要时刻关注的:
MSExchangeIS\Active User Count MSExchangeIS\User Count
上 面这两个计数器,反映了当前服务器上的活动用户数和登陆用户数。一般性,Active User Count总是小于User Count。由于Exchange Server内部使用了一些系统邮箱用来进行服务器间通信,因此即使没有任何使用者在线,User Count也总是维持在20左右,这是正常的。
MSExchangeIS\RPC Averaged Latency MSExchangeIS\RPC Operations/sec
MSExchangeIS\RPC Packets/sec
MSExchangeIS\RPC Requests
上 面四个计数器,反映了Exchange Server Store的RPC处理响应能力。这几个计数器,最能体现当前服务器的负载和响应速度。RPC Operations/sec、RPC Packets/sec分别表示服务器每秒接收到的RPC请求(所有Outlook MAPI客户端连接在读取、发送邮件时都会向服务器发送大量的RPC请求)。RPC Requests表示Exchange Server当前正在处理的请求,一般情况下,Exchange Server最多能同时处理100个请求,因此如果这个计数器超过了100,Exchange Server将会有严重的性能问题。最后一个也是最重要的一个,RPC Averaged Latency,这个计数器表示当前时刻之前的1024个RPC请求的平均响应时间,这个时间的单位是毫秒,一般性,这个计数器应该小于20。如果该计数 器大于100并且持续较长的时间,客户端Outlook的响应速度将变得很慢甚至死机。
对RPC Averaged Latency有影响的因素很多。执行备份、在线碎片整理、防病毒软件扫描数据库等等都会使RPC Averaged Latency的值升高。另外,值得注意的是,网络环境的不正确配置,也会引起问题。笔者曾遇到过由于交换机端口的速度与Exchange Server上的网卡速度不匹配而引起的严重性能问题。详细的情况是这样的,客户邮件系统的性能突然大幅度的下降,RPC Averaged Latency的值高达5位数,所有用户都不能打开邮箱。在排除Exchange和Windows的问题后,我们从客户处了解到,他们前一天更换了与 Exchange Server相连的交换机。按理说,Exchange Server是应用层的软件,它不会也不应该对数据链路层的设备有任何的依赖。但是查过微软的知识库以后,我们找到这了这篇文章:“Poor Performance When Network Adapter Is Set to Auto Sense”,文章的知识库号码为330343。文中提到,对于Exchange Server,如果网卡或者交换机端口设置为自动检测速度,这可能会造成严重的性能问题。首先查看Exchange Server,其网卡的设定为100M 全双工,符合微软的要求;再连接到交换机上察看,发现交换机上跟Exchange Server网卡相连的那个端口,被设定为Auto即自动检测速度,当前的连接情况为100M 半双工。改为固定的100M全双工设定以后,故障立刻消失,RPC Averaged Latency的值恢复到了20以下,用户收发邮件都没有问题了。
事 后我们分析,对于Exchange Server的系统,有可能微软在传送RPC信息时,使用了一些特殊格式的数据包,因此对网络链路有较高的要求。交换机一般都是上电之后直接使用,对它的 设定往往很容易被管理员们所忽略。
MSExchangeIS\VM Largest Block>MSExchangeIS\VM Total 16MB Free Blocks MSExchangeIS\VM Total Free Blocks
MSExchangeIS\VM Total Large Free Block Bytes
这 四个计数器跟Exchange Server Store进程的内存使用情况有关。我们都知道,在Exchange Server上,store.exe进程往往是内存消耗的大户,ESE数据库引擎为了提高它的性能,需要申请大量的内存作为其缓存空间,在有300个以上 用户的Exchange Server系统上,store.exe进程的物理内存占用量一般都在1GB以上。在Windows操作系统中,内存分为物理内存和虚拟内存。物理内存指 机器上安装的内存条;虚拟内存指CPU可以寻址的内存范围。对于Windows 2000来说,物理内存的大小由安装的内存多少决定,虚拟内存默认情况下都是4GB。(关于Windows 2000内存的更进一步知识,读者可以参考Inside Windows 2000这本书的第六章:内存管理。)如下图的左面部分所显示,每一个进程都有4GB的地址空间,默认情况下,2GB为操作系统所有,2GB为应用程序使 用。
Exchange Server在运行过程中,会频繁的在它所拥有的2GB用户地址空间中分配和释放内存。这样会引起内存地址空间的“碎片”:内存地址中的空余的空间变得不 连续。上述的四个计数器中,VM Largest Block>
当VM Largest Block >Source: MSExchangeIS Category: Performance
ID: 9582
Type: Warning/Error
Description:
The virtual memory necessary to run your Exchange server is fragmented in such a way that performance may be affected. It is highly recommended that you restart all Exchange services to correct this issue.
这 种情况出现,说明Exchange Server的虚拟地址空间中已经存在了大量的碎片,由于无法满足内存的分配,Exchange Server的性能和稳定性都会出现问题。
对于这类问题,大家可以参考微软的知识库文档“Troubleshoot Virtual Memory Fragmentation in Exchange 2003 and Exchange 2000”,其文档代号为325044。这篇文章详细地分析了虚拟内存碎片产生的原因和应对办法。
为了满足服务器软件对内存的要求,微软 公司的Windows 2000 Advanced Server和Data Canter版本的操作系统支持把用户地址空间扩大为3GB,这样可以有效的缓解虚拟内存碎片的问题。该项功能需要在系统分区的boot.ini中做一定 的修改才可以开启,具体的操作方法请参考微软文档“A Description of the 4 GB RAM Tuning Feature and the Physical Address Extension Switch”其文章代号为291988。
对于Exchange 2000 Server,当服务器安装了1GB以上的RAM时,微软推荐开启操作系统的3GB开关,否则可能会有性能上的问题。参考文档:
266096 Exchange requires /3GB switch with more than 1 GB RAM
328882 Exchange memory use and the /3GB switch
Exchange Server Store性能优化的建议
1.确保Exchange Server的网卡和交换机端口设置正确。
2.有1GB以上物理内存的服务 器要安装Windows 2000 Advanced Server版并在开启boot.ini中开启/3GB开关。
3.需要补充的是,在可能的 情况下,要尽量少的创建Storage Group。上一期文章中,我们知道,每一个Storage Group,都对应于一个ESE数据库引擎的实例。在store.exe中,每生成一个ESE数据库引擎的实例,都会消耗10M的内存空间。 数据库碎片整理的作用和注意事项
运行中的Exchange Server会根据管理员指定的时间在后台不断地进行在线碎片整理(Online Defrag)。在线碎片整理主要执行如下的操作:
1. 通过查询活动目录来确定Store中是否有被删除的邮箱。
2.物理的删除所有超过保留时间的邮件和邮箱。
3.执行在线碎片整理。
对 于第一项操作,Exchange Server会向活动目录发起查询,以确保活动目录中的用户信息和Exchange Store中保存的邮箱信息是同步的,对于删除的邮箱,Exchange Server会作特殊的标记。这项操作不会对Exchange Server带来太多的额外负担,但是对活动目录的域控制器却有一定的压力。一般我们是在晚上进行在线碎片整理的操作,所以此时活动目录的负载不会有什么 问题,但如果对于一些大型的跨国企业,其活动目录的域控制器往往要服务于各时区的用户时,在线碎片整理的时间需要认真地调整以避免给用户带来影响。
第 二和第三项操作会对Exchange Server本身带来一定的负载,主要是一些密集的磁盘操作。在线碎片整理期间,用户访问邮箱的速度会明显的变慢。当Exchange Server的备份和在线碎片整理的时间发生冲突时,在线碎片整理会被终止并直到备份完成才能得以恢复。关于在线碎片整理的详细细节,请参考微软知识库文 档“Understanding Performance and Scalability Characteristics of Exchange 2000 MDB Online Maintenance”,其文档代号为271222。
正常情况下,在线碎片整理会在管理员规定的时间 停止,并在事件日志中记下如下的内容
Event: 1221 Source: MSExchangeIS Private
Type: Information
Category: General
Description: The database has nnn megabytes of free space after online defragmentation has terminated.
这 表示Exchange Server在线碎片整理过程中发现并计算出数据库中含有的碎片空间的大小。在线碎片整理只会标示出碎片的位置并计算其空间,并不会物理的移动数据页面以 消除这些碎片空间。如果需要物理的消除这些碎片空间,需要执行离线碎片整理。当上面事件中显示的碎片空间达到一定的比例时(占数据库文件的 10%~15%),我们需要执行离线碎片整理。
对于离线碎片整理,我们通常按照如下的流程:
1.在进行离线碎片整理之 前,对所操作的Store进行全备份
2.Dismount Store
3.使用eseutil /mh确认edb和stm文件是“Clean shutdown”(在上期中有详细的论述)
4.执行如下的命令来进行碎片整理
C:\Program Files\Exchsrvr\BIN>eseutil /d X:\Exchsrvr\Mdbdata\SG1MS1.edb
/tX:\Exchsrvr\Mdbdata\SG1MS1_temp.edb /o /p <回车>
命令会有如下的输出:
Initiating DEFRAGMENTATION mode...
Database: F:\Exchsrvr\Mdbdata\SG1MS1.edb
Streaming File: F:\Exchsrvr\Mdbdata\SG1MS1.STM
Temp. Database: F:\Exchsrvr\Mdbdata\SG1MS1_temp.edb
Temp. Streaming File: F:\Exchsrvr\Mdbdata\SG1MS1_temp.STM
Defragmentation Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|-----|-----|-----|-----|-----|-----|------|------|------|------|
.................................................................................
Note:
It is REQUIRED that you immediately perform a full backup of this database. If you restore a backup made before the defragmentation, the database will be rolled back to the state it was in at the time of that backup.
Operation completed successfully in 13.110 seconds.
碎 片整理的实际时间取决于数据库文件的大小,在Exchange 2000中,一般一小时可以处理7~10GB的数据。在碎片整理完成后,系统会根据制定的文件名生成两个不含碎片的edb和stm文件。
5. 在把新的数据库文件Mount之前,需要确保其完整性,我们要执行如下的命令
C:\Program Files\Exchsrvr\BIN>eseutil /g X:\Exchsrvr\Mdbdata\SG1MS1_temp.edb /sX:\exchsrvr\mdbdata\SG1MS1_temp.stm <回车>
其 输出如下:
Microsoft(R) Exchange Server(TM) Database Utilities Version 6.0
Copyright (C) Microsoft Corporation 1991-2000. All Rights Reserved.
Initiating INTEGRITY mode...
Database: priv1.edb
Streaming File: priv1.stm
Temp. Database: TEMPINTEG3976.EDB
Checking database integrity.
Scanning Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|-----|-----|-----|-----|-----|-----|------|------|------|------|
.................................................................................
Integrity check successful.
Operation completed successfully in 9.62 seconds.
此 项操作也需要较长的时间,一般的速度是10GB每小时。
6.文件改名。把旧的edb文件和stm文件从mdbdata文件夹中移走。把执 行过碎片整理的临时文件改为同旧的edb文件和stm文件相同的名字。然后Mount数据库。
7.如果Mount数据库失败,最快的恢复办法就是 把旧的edb文件和stm文件再复制到mdbdata文件夹。Defrag过程中,旧的edb文件和stm文件没有被更改,即使defrag失败,也可以 恢复到defrag之前的状态。
关于碎片整理得更多细节,我们可以参考下面的文档:
192185 XADM: How to Defragment with the ESEUTIL Utility 如果避免 Exchange Server的数据库文件损坏
对于数据库损坏的问题,防患于未然要远远比事后亡羊补牢来的有 效。数据库的损坏一般可以分为物理损坏和逻辑损坏。
物理损坏往往是由磁盘介质、控制卡等硬件设备的故障引起的。这种类型的损坏都会引起数 据丢失,唯一的解决办法就是从备份的磁带进行恢复。
Exchange Server为了确保数据的一致性,会在向数据库写入内容时(写入的单位是4KB的页面),把根据数据内容计算得出的校验和跟实际的数据一并写入。当读取 时,系统会重新计算校验和,并跟保存的校验和进行比较,如果这两个值不同,说明读出的数据和当初写入的数据相比,已经发生了变化。这种变化往往是由磁盘故 障、控制器总线传输故障等引起的。为了排除干扰因素,当校验和不匹配的情况出现时,Exchange Server会再次到磁盘上去读取那个页面,如此循环16次。如果连续读取16次,校验和跟原始的值仍然无法匹配,Exchange Server就会认为数据库已经发生了物理损坏。在事件日志中,会有如下的内容被记录下来:
Event> Source: EDB
Type: Error
Category: Database Page Cache
Description: MSExchangeIS ((455)) Direct read found corrupted page error -1018 ((1:251563) (0-2295758), 251563 379225672 381322824). Please restore the database from a previous backup.
另 外,当事件日志的错误描述中出现如下的代码,基本上也可以认定数据库发生了物理损坏:
-1018 (JET_errReadVerifyFailure)
The data read from disk is not the same as the data that was written to disk.
-1022 (JET_errDiskIO)
The hardware, device driver, or operating system is returning errors.
-510 JET_errLogWriteFail
The log files are out of disk space or there is a hardware failure with the log file disk.
数 据库的物理损坏往往会带来数据丢失和Exchange Server停机等等损失。我们可以采取下面的一些建议来避免物理损坏的发生:
1. 采用高质量的磁盘和磁盘控制系统,对硬件RAID系统进行正确的配置。
2.不要使用文件级别的工具或防病毒软件扫描数据库文件和日志文件。
3. 避免使用磁盘控制卡上的写入缓存(Write-back caching)。
4.定期地进行全备份。全备份一方面保证了数据的安全,另一方面也能 及早地发现数据库的物理损坏。在执行全备份时,备份程序会把数据库的每一个页面读取出来并重新计算校验和,如果有损坏的页面存在,管理员可以及早的发现问 题并采取行动。
当物理损坏发生时,我们可以采取如下的步骤来进行恢复:
1.如果有全备份,一定要先从备份进行恢复。
2. 在没有备份的情况下,可以使用Eseutil /p来进行手工的修复。但这是不推荐的做法,从备份恢复是最好的解决办法。
关于数据库的物 理损坏,更详细的内容请参考微软知识库文档“Understanding and analyzing -1018, -1019, and -1022 Exchange database errors”,这篇文章的代号是314917。
另外一种常见的数据库损坏是逻辑损坏。数据库的 内容本身没有问题,但是一些内部的视图、关联发生问题时,就会发生逻辑损坏。逻辑损坏的症状往往表现为:大部分用户使用正常,某些用户在点击特定的邮箱文 件夹或者邮件时,会发生死机等现象。对于这种故障,一般可以使用ISINTEG命令来进行修复。
关于Exchange Server数据库的更多内容,大家可以阅读微软知识库文档“Overview of Exchange Server Database Architecture and Database Engine”这篇文章的代号是217987。