Domino应用程序性能优化指南
Domino应用程序性能优化指南
应用程序性能是衡量应用程序在某些环境中,在特定工作负荷情况下如何有效运行的一种标准。您能衡量应用程序性能吗?答案是可以,它所需要的是一种独立的测试环境,包括与生产环境类似的网络、仿真用户及其工作的负荷测试软件以及大量时间。与服务器性能测试不同,在测试服务器性能时您可以不考虑CPU、RAM、NIC等变量,而应用程序性能测试涉及一次次小心翼翼地测试一个视图中一张表格的一个字段。考虑到某些定制的Notes应用程序的复杂性,这类测试不仅仅单调乏味,而且似乎永无止境。谁知道您需要花费多长的时间来减少一个设计因素、公式、脚本程序或属性,它们有可能阻碍应用程序的正常运行。
我们提供了一种简便的方法并将在本文中介绍。基于多年来评估定制的Notes应用程序来诊断性能问题方面的丰富经验,我们编译了影答复用程序性能的最通用的属性。我们在一系列文章的第一篇文章中介绍众所周知的影答复用程序性能的数据库、视图和表格属性。我们将阐述何时使用某些属性,何时不使用某些属性以获得最佳性能,适当时我们为您提供备选解决方案。本文假设您是一位富有经验的Notes应用程序开发人员。
数据库属性
当应用程序成为一种产品时数据库属性经常被忽略。但事实是通过启用和禁用某些属性,您可以提高性能且不会造成功能、开发时间和管理资源方面的损失。我们将讨论以下影响性能的通用数据库属性:
不保留未读标记
不覆盖空闲空间
保留LastAccessed 属性
不支持指定的答复层次
Web访问:需要SSL连接
所有这些属性都包含在数据库属性对话框中。前四个属性位于Advanced标签,最后一个属性位于Database Basics标签。
不保留未读标记
无可否认,这一属性让人迷惑,因为它读起来就像双重否定一样,但缺省情况下,数据库对所有读和未读文档都进行了标记。这可以用于用户希望了解在讨论论坛中哪些主题和答复是新的和未读的。但是,跟踪读和未读的文档会影响应用程序的性能。例如,假设您有一个有1,000,000 份文档的知识数据库。有10,000名用户访问该数据库,其中许多用户使用选择的复制公式本地复制该数据库。当用户复制时,它遇到了最初的延迟,因为本地和服务器复制器同步它们的未读标记(Unread Marks)表。这一流程需要与实际数据复制一样长的时间。这意味着当用户复制时他们将遇到长延迟。同样,当访问服务器上的数据库的用户最初打开数据库时也会遇到延迟,因为该程序必须读取未读标记表,以确定显示哪些文档为读/未读文档。这一延迟可能只持续数秒,但在用户的脑海中,它算得上是一次反对您的应用程序的罢工了。
要禁用这一功能,选择数据库属性对话框"高级"标签上的不保留未读标记选项。在R5 和Notes/Domino 6中,这一功能将影响整个数据库,而不仅仅是某个视图。
不覆盖空闲空间
在Notes Release 3和更早的版本中,Notes 保留了删除的数据-未加密的数据-直到删除了empty space或white space为止。在版本4中对这一功能进地了微妙的改进,从而删除的数据用随机字符覆盖,以便可以对其进行重新检索。(这称为覆盖空闲空间。)在Release 5 和Notes/Domino 6中,您可以选择启用/禁用这一功能。覆盖空闲空间将对数据库性能产生负面影响。
为了帮助您了解这一特性,例如,我们考虑从您的桌面PC中删除一些文件。当您在Windows 操作系统中删除文件时,它直接放到回收站。然后您可以清空回收站,系统显示该文件已经永久删除。现在我们讨论当清空回收站后,您意识到实际上很需要这份文件。该文件就这样永久消失了吗? 不是这样的-它不再存在您的回收站中,但它仍旧在您的计算机中。在适当软件工具(例如Norton Utilities)的帮助下您可以检索到这一已删除的文件。
因此,做为一种安全性措施,当您删除Notes文档时,Notes覆盖已删除的数据,以防止任何人重新检索到它。当您按下F9或选择视图- 刷新时,该文档被删除。设想您的Notes文档从:
The quick brown fox jumped over the lazy dog
到:
XX XXXXXXXXXXXXX XXXXXXXXXXX XX X XXXXXXXXXX
注:这一例子不能准确地阐述Notes是如何覆盖已删除的数据的。
此时,用户是否可以检索到删除的文档已经无关紧要的,因为数据自身已经被破坏了。注意,如果您对文档进行了软删除,Notes不会覆盖该文档。只有硬删除才能激活覆盖功能。
大多数情况下我们无需保留覆盖的数据。但是,也有一些您希望Notes 继续覆盖删除的数据的情形:
服务器和数据库的物理访问受到损害,从而非法用户可以使用它们。
数据库未加密或ACL使数据库易于遭受攻击。
企业部署了需要这一功能的安全性策略。
如果您的企业、服务器或数据库未出现以上任何一种情形,那么考虑禁用这一功能-选择不覆盖空闲空间选项。
维持LastAccessed属性
我们在Release 4中开始引入了维持LastAccessed属性;它跟踪最近访问文档的日期(也就是读或修改文档的最后时间)。缺省情况下,数据库只跟踪最后修改文档的时间,但通过选择维持LastAccessed属性功能,数据库还可以跟踪最后读取文档的时间。当然,为了实现最佳的应用程序性能,您希望取消选定这一功能。
但是,这一功能对正在归档文档的用户很有用。例如,返回我们包含1,000,000 份文档的知识数据库例子,设想每天向数据库增加1,000份新文档。由于要增加如此多的文档,我们发现有必要对早期文档进行归档。我们可以使用维持LastAccessed属性功能,找出最后访问文档的时间,以确定哪些文档要被归档。我们可以保留LastAccessed属性来设置归档特性,以归档在最近18个月内未打开或读取的任何文档。
您可能希望使用这一功能来帮助归档文档到期、过期或短生命周期的任何数据库中的文档,例如,讨论数据库或工作流程数据库。但是,您可能不希望在文档很少访问或无最后访问的日期要跟踪的数据库中使用这一功能,例如,在帮助台应用程序中。
要记住的另外一件事是:LastAccessed属性不适用于Web应用程序。这一属性忽略Web浏览器的读取操作。
不支持指定的答复层次
不支持指定的答复层次使您的应用程序能够充分利用指定的答复@公式:@AllChildren和@AllDescendents。这些功能允许您根据父级文档和所有答复文档的指定标准来构建视图。现在我们以包含10,000主题和100,000答复文档的讨论数据库为例。假设您创建了一些只显示某些类别的视图,如应用程序性能。如果只对100个主题进行了分类,您可能期望该视图能够显示这100个主题以及所有相关的答复文档(以及答复文档的所有答复文档)。Notes传统上依赖于Selection公式,如:
SELECT (Form = "Main Topic" & Categories = "Application Development") | @IsResponseDoc
遗憾的是,这一公式为您提供了所有100,000份答复文档。您大概不希望看到其中大多数文档,因为您的视图将有一个答复层次。但它们全部到位,从而减缓了您的视图索引速度并占用磁盘空间。如果您选择了指定的答复层次(在Release 4中提供, Release 5 和Notes/Domino 6中的可选功能),那么您可以使用稍微不同的公式:
SELECT (Form = "Main Topic" & Categories = "Application Development") | @AllDescendants
这一公式为您提供您正在查找的一组准确的文档,从而最大限度地减少您的视图索引和磁盘空间需求。
迄今为止,我们只告诉了您启用这一功能的原因(也就是,不选中这一选项)。但是如果您的应用程序未使用那些使用@AllChildren或@AllDescendants的公式,那么该程序没有任何理由来维持这类信息,因此您可以通过选择不支持指定的答复层次来缩短处理时间。
Web访问:需要SSL连接
Web访问:需要SSL连接选项为每个Web事务提供一个SSL(安全套接层)连接,从而对客户机和服务器之间传输的所有数据都进行了加密。在您实现SSL之后,您和您的用户将体验到近10%的性能下降。但是,每个应用程序的架构将影响这一百分比。在实现了SSL后,每个信息包都被加密, 从而需要在客户机和服务器之间进行多次来回传送的应用程序需要多次加密。
例如,假设您有使用SSL对所有表格数据进行加密的表格。该表格包含一个@DbLookup 公式。SSL对客户机和服务器之间的每次事务进行加密,因此,除了对表格数据进行加密之外, SSL还对查询事务进行加密。
有些时候为您的应用程序提供SSL是不可避免的。例如,企业策略可能要求在特殊的应用程序上运行SSL。另外,在某些情形下实现SSL最恰当不过了,例如当客户机位于 一个国家,而服务器位于另一个国家时。如果您不能确定是否可以相信一个网络,最好的方法是实现SSL。如果您有一个值得信任的网络-一个您不认为会受到损害的网络-那么您的应用程序不需要SSL,您和您的用户的性能也不会受到任何影响。
创建个人文件夹/视图
创建个人文件夹/视图是一项ACL功能。获得此项特权的用户可以创建专用视图和文件夹并把它们保存到托管数据库的服务器上。创建多个视图,尤其是大视图,会影响性能,因为它需要额外的索引。同样需要注意的是管理员或开发人员很难删除保存在服务器上的专用视图和文件夹。
compact 和updall 任务
尽管压缩应用程序和运行updall任务来刷新视图索引是不错的数据库优化措施,但它们通常不会明显提高应用程序的性能。但也有例外,如有占非常大比例White Space的数据库。但对具有5%或10%White Space的数据库运行compact 不能实现任何显而易见的性能增益。