Lotus notes 与开发PC相比,Lotus notes代理在服务器上运行较慢

Lotus notes 与开发PC相比,Lotus notes代理在服务器上运行较慢,lotus-notes,lotus-domino,lotus,lotusscript,Lotus Notes,Lotus Domino,Lotus,Lotusscript,我有一个考勤系统,有两个数据库,一个用于当前,另一个用于存档。服务器处理考勤记录,并将标记为已完成的记录放入存档。存档数据库中未进行任何处理 问题就在这里。其中一项要求是每天为每名员工建立一个空白记录,考勤记录将被放入其中。执行此操作的代理将调用一些过程并在数据库中执行一些检查。到目前为止,每天大约有1800条空白记录被创建。在开发PC上,处理每条记录大约需要2到3秒,这意味着平均需要一个半小时。然而,当我们将其部署到服务器上时,处理每个记录大约需要7秒,大约需要3个半小时才能完成。我们有过代理

我有一个考勤系统,有两个数据库,一个用于当前,另一个用于存档。服务器处理考勤记录,并将标记为已完成的记录放入存档。存档数据库中未进行任何处理

问题就在这里。其中一项要求是每天为每名员工建立一个空白记录,考勤记录将被放入其中。执行此操作的代理将调用一些过程并在数据库中执行一些检查。到目前为止,每天大约有1800条空白记录被创建。在开发PC上,处理每条记录大约需要2到3秒,这意味着平均需要一个半小时。然而,当我们将其部署到服务器上时,处理每个记录大约需要7秒,大约需要3个半小时才能完成。我们有过代理需要4.5到5个小时才能完成的实例


请注意,在这两种情况下,都会安排代理。服务器中没有其他lotus应用程序,服务器大部分时间是空闲的(除了Windows server和lotus Notes之外,没有其他应用程序)。与开发PC和服务器相比,是否有可能导致额外的处理时间

您的流程每天生成1800个新文档,并且您已经说过您也在定期归档文档,因此我认为这意味着您在归档文档后将删除它们。在这样的应用程序中,性能问题可能会随着时间的推移而累积。数据库中可能有大量的删除存根,NSF文件可能是高度碎片化的(内部和/或外部)

您应该使用free实用程序检查数据库并查看它包含多少删除存根。然后你应该检查并考虑把它降到最小的值。(即,大到足以让您知道所有服务器和用户都将在该时间内进行复制,但小到足以避免大量删除存根的累积。)如果更改清除间隔,您可以等待24小时以清除存根,或者您可以在服务器控制台上对数据库手动运行updall以强制清除

然后应该在NSF文件上运行compact-c,并在NSF所在的服务器磁盘卷上运行碎片整理

如果这些步骤确实提高了性能,那么您可能希望在代码中采取步骤,通过使用最小化删除存根、数据库增长和碎片的编码技术来防止问题再次发生

也就是说,进入您的代码进行归档,并对其进行更改,以便在归档后不会删除它们。相反,让您的代码用一个字段标记它们,例如
FreeDocList:=“1”
。然后添加一个名为
(FreeDocList)
的隐藏视图,其选择公式为
FreeDocList=“1”
。还可以进入数据库中的任何其他视图,并将
&(!(FreeDocList=“1”)
添加到选择公式中。然后更改代码添加新的空白文档,这样它就不用创建新文档,而只需转到
FreeDocList
视图,找到第一个文档,设置
FreeDocList=“0”
,并清除以前的所有字段值。当然,如果FreeDocList视图中没有足够的文档,代码将恢复到旧的行为并创建新文档


通过上述更改,您将尽可能重新使用现有文档,而不是删除和创建新文档。我已经在类似这样的代码上运行了基准测试,发现它可以提供帮助;但我不能保证在所有情况下都是这样。这在很大程度上取决于应用程序中正在进行的其他操作。

您需要在debug中找到应用程序中方法的时间,并将其缩小到相关代码。在此之后发布一个示例。您所说的“在开发PC上”到底是什么意思?这是否意味着您有一个本地副本,并且通过从菜单中选择它来运行代理?或者您正在使用服务器副本,但仍在从菜单中选择代理?“将其部署到服务器上”是指将其作为计划代理运行吗?使用探查器:@SimonO'Doherty我将为每个方法放置带有时间戳的打印语句。@RichardSchwartz是的,我们有一个本地副本,在使用模板和替换设计实现到服务器上之前,会对其进行更改和测试。此外,我们在本地副本上按计划运行代理,以便模拟服务器上的部署环境。