内容


优化 Lotus Domino 服务器性能

事务日志

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 优化 Lotus Domino 服务器性能

敬请期待该系列的后续内容。

此内容是该系列的一部分:优化 Lotus Domino 服务器性能

敬请期待该系列的后续内容。

[编辑注:我们非常兴奋地发布这篇关于事务日志的文章,这些内容均在 Notes.net 站点得到实现。您将了解有关性能受益等方面的内容!]

Domino R5 现在向前迈进了一大步 —— 它包含了事务日志,这是用于实现可靠数据存储的行业标准技术和最先进的解决方案。通过对事务日志的支持,该系统可以捕获数据更改,并将其写入事务日志。如果系统或媒体发生失败,您可以使用事务日志和第三方备份实用工具恢复数据库。还可以获得更快的服务器重启时间,更好的数据库完整性,更高的系统可用性。最后,事务日志还意味着那些冗长 Fixup 会话的终结!

使用 Domino 事务日志的内在好处之一是系统性能的整体提升。在本文中,我们将介绍 Windows NT 上 Domino 事务日志的性能分析。在我们开始分析数字之前,我们首先概述事务日志及其益处。然后描述测试方法和测试数据,最后总结测试结果对您的意义。

注意:有关使用事务日志的深度信息,请参见 Domino 5 Administration Help

事务日志介绍:一个更好的解决方案

在 R5 之前,特定于数据库的事务(或操作) —— 比如创建、修改或删除文档;更新视图;或更改数据库属性 —— 必须将操作提交到磁盘 才算成功。换句话说,事务要么成功要么失败,没有第三种情况。即使使用数据库缓冲时(比如,NOTES.INI 设置 NSF_BUFFER_POOL),事务及其数据也需要提交到磁盘。

在活动服务器上,实际写入磁盘的过程可能非常冗长。修改可能发生在数据库的不同部分,也可能涉及多个数据库。然后,服务器的磁盘头随机移动到磁盘的各个区域查找更改或更新过数据的磁道或扇区。用这种 “随机” 方式重定位磁头增加了完成事务所需的总时间。因此,随着 R4 服务器上数据库用户数的增多,事务数以及完成事务的平均时间也将增加。等待提交完成是必要的(不能从操作返回并 “相信” 系统最终能将数据提交到磁盘),以便在系统失败时,Fixup 任务可以修复数据库并恢复到 “干净” 的状态。

流线化数据库事务

Domino R5 的事务日志为流线化所有数据库事务增加了一种方法。通过事务日志,Domino 在允许数据库更新之前,将事务发布(或者说写入)到日志文件系列。提交时也会查看是否成功发布到日志(数据是否安全地存储到持久性存储器),成功后才允许数据库完成操作或进行下一步操作。将来某个时候,事务及其数据也可能从日志写入实际数据库。在系统失败时,事务日志可以应用或取消失败时没有写入磁盘的那些事务。

首先 写入日志,然后再写入数据库,这样做的最大好处在于,所有日志文件写入操作本质上都是按顺序 进行的。因此,磁盘头在数据磁盘上的移动更少,提交到磁盘的速度更快。为什么磁盘头移动更少?非常简单,随机访问比顺序访问的速度慢。正如上文提到的,随机访问要求磁盘头能随机移动到磁盘上,查找对应的数据点。使用顺序访问,磁盘头可以直接移动到磁盘的下一个可用磁道。

系统级别的好处

事务日志在系统级别上也有好处。在操作系统级别,操作系统内核执行的所有文件和磁盘操作要么是 “内核模式”,要么是 “特权模式”(所有文件和磁盘操作均由操作系统内核执行的进程状态)。这要求上下文切换到内核线程,以处理将数据移动到磁盘以及从磁盘移出数据的任务。磁盘操作需要的时间越长,系统等待 I/O 完成的时间越长,执行应用程序工作(即 Domino)的时间越短

事务日志可以提高 Domino 的整体 I/O 吞吐量;因此,它减少了内核时间并增加了 用户时间(所有应用程序运行的进程状态)。内核模式时间的减少降低了执行同一工作时所需的总体 CPU 周期。然后 Domino 可以使用这些周期。事务日志提高了 Domino 服务器事务的总吞吐量,这使同一个服务器能够支持更多的用户

简言之,使用事务日志:

  • 流线化数据目录 I/O
  • 减少内核模式时间,增加用户模式时间
  • 增加用户可以感觉到的服务器响应性
  • 增加服务器事务吞吐量

结合事务日志的备份和归档优势,事务日志可以让服务器的运行达到前所未有的顺畅。(有关使用事务日志进行备份的更多信息,请参见 Domino 5 Administration Help。)

设置事务日志

事务日志处理 Domino R5 格式的数据库,但使用早期格式版本的数据库不在此列。启用事务日志之后,R5 格式的所有数据库都将被自动记录日志。

要在 Domino R5 服务器上设置事务日志:

  1. 为事务日志目录分配空间。我们建议为事务日志分配一个至少 1GB 的独立 磁盘。
  2. 确保要记录日志的所有数据库都位于 Domino 数据目录中,或者位于根目录或者次级目录中。
  3. 在服务器上运行 Compact(这将把数据库升级到新的 R5 格式)。
  4. 打开 Domino Directory 中的 Server 文档,单击 Transactional Logging 选项卡,然后执行以下操作:
    -- 选择 “Enabled” 启用事务日志。
    -- 输入事务日志的路径名称位置(第 1 步中分配)。
    -- 输入最大日志空间(以 MB 为单位),空间大小在 192-4096MB (4GB) 之间。我们建议使用 1028MB (1GB)。
    -- 选择 “Enabled” 自动修复崩溃的数据库。
    -- 在 Runtime/Restart 性能字段选择 “Favor runtime”,以在事务日志中设置更少的恢复检查点,提高运行时性能。(如果关注服务器重启性能,则选择 “Favor Restart” 记录更多恢复检查点,提高重启性能。)
    -- 选择 “Circular” 作为日志样式,以持续重用日志文件并重写原来的事务。(备份日志时将使用 “Archiving”。)
    图 1. Server document 和 Transaction logging 选项卡
    Server document 和 Transaction logging 选项卡
    Server document 和 Transaction logging 选项卡
  5. 重启 Domino 服务器。

测试方法:用数据说话!

现在,让我们了解一下启用 Domino 事务日志后的性能影响。我们的测试场景在系统上使用新的 NotesBench R5 Mail 工作负载,分别测试打开和关闭事务日志后的性能。我们比较了 CPU 利用率(用户模式和特权模式利用率)、每分钟平均事务和 NotesBench 响应时间。本节描述系统配置,以及关于工作负载的深度信息。

系统配置

对于我们的测试场景,我们安装了一个 Domino 服务器,配置如下:

  • CPU:4 个 Pentium II/400MHz,带 1MB 二级缓存,IBM Netfinity 7000 M10
  • 内存:4GB RAM
  • 3 个 Ultra2 SCSI (80MB/s) 控制器
  • 6 个跨 12 个磁盘驱动器创建的硬件阵列
  • 22 个 9GB 10K RPM 驱动器配置如下:
    --物理磁盘 C:1 个 9GB 驱动器,RAID0,用于操作系统
    --物理磁盘 D:1 个 9GB 驱动器,RAID0,用于页面文件
    --物理磁盘 E:1 个 9GB 驱动器,RAID0,用于 Domino 可执行程序
    --物理磁盘 F:1 个 9GB 驱动器,RAID0,用于日志文件(应该 拥有自己的驱动器!)
    --逻辑磁盘 G: EXP15 阵列中 9 个 9GB 驱动器,配置为 RAID0,其中 4 个驱动器用于用户邮件文件、日志和 MAIL.BOX(SCSI 控制器 1 的通道 1 上的主 \data 目录共 36GB 存储器)
    --逻辑磁盘 M:EXP15 阵列中 9 个 9GB 驱动器,配置为 RAID0,其中 4 个驱动器用于用户邮件文件、日志和 MAIL.BOX(SCSI 控制器 2 的通道 1 上的次 \data 目录共 36GB 存储器)
  • 操作系统:Windows NT 4.0 Enterprise Edition with Service Pack 4
  • Domino:Build 165(R5 生产版本)

设置我们的测试环境时,我们的目标是最大化 I/O 带宽。因此,我们尽可能分发文件访问 —— 在独立的物理磁盘 驱动上安装操作系统、分页文件和 Domino 可执行文件。(将这些文件放到分条磁盘区中真的没有必要。)此外,我们在独立 驱动上设置日志文件。这样一来,我们避免了将任何其他数据写入驱动器,并减少了任何随机磁头的移动。记住,写入日志文件是按顺序进行的,正是这一点提高了性能。要进一步最大化性能,您可以将日志文件驱动器放到它自己的控制器的通道上。

我们在两个独立 的 RAID0 分条磁盘区上放置 Domino 数据文件(Domino Directory、MAIL.BOX 数据库和邮件文件)。每个分条磁盘区都位于独立的 SCSI RAID 控制器上。我们在主数据目录和次级数据目录上都放置了 2500 个邮件文件。该配置使我们能够控制用户将需要访问哪些 RAID 集合,并将邮件 I/O 通信与应用程序通信隔离。

此外,我们在 Server Configuration 文档的 Router/SMTP-Basics 选项卡上分配了 10 个邮箱,并指定了以下 NOTES.INI 设置:

  • SERVER_POOL_TASKS=100(指定 100 个 worker 线程 —— 这个新的 R5 机制实际承载所有连接用户的数据库工作。)
  • SERVER_MAX_CONCURRENT_TRANS=1000
  • NSF_BUFFER_POOL_SIZE=768000000(即 768MB)

关于 R5Mail 工作负载

R5Mail 工作负载模拟活动用户阅读和发送邮件、安排约会、发送会议邀请等。该脚本每 30 分钟向 3 个收件人发送 6 条消息(两条备忘记录、两次约会和两次邀请)。对于 15 分钟脚本的每次迭代,客户端:

  • 读取 5 个文档
  • 更新 2 个文档
  • 删除 1 个文档
  • 添加 1 个文档
  • 滚动一个视图
  • 打开并关闭一个数据库

我们的发现

使用我们的测试配置,我们发现,打开事务日志时整体性能都得到了提高。我们比较了 CPU 利用率、用户利用率、特权利用率、每分钟平均事务和 NotesBench 响应时间。

下表展示了我们对 5000 用户进行的纯 R5Mail 测试的结果。测试时间约 6 个小时。注意,打开事务日志后,每分钟的平均事务增加了 16%。NotesBench 响应时间提高了 2.6 倍。特权模式利用率的降低意味着有更多的 CPU 时间用于用户模式执行。这说明,Domino 能够在测试时间内完成更多工作,这直接反映在每分钟平均事务数量上。同样,由于事务日志流线化了写入 Data 驱动器的过程,我们还能体验到 I/O 利用率的降低。

% CPU 利用率% 用户模式利用率% 磁盘时间% 特权模式利用率平均事务/分钟响应时间 (ms)
关闭日志31.0022.451009.347914158
打开日志25.2420.28874.96922560

可以看到,只需要添加一个磁盘用于日志文件并启用事务日志,您就可以立即 实现性能改进!


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Lotus
ArticleID=398645
ArticleTitle=优化 Lotus Domino 服务器性能: 事务日志
publish-date=08021999