0

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

这就是问题所在。其中一项要求是每天为每个员工建立一个空白记录,并将其放入考勤记录。执行此操作的代理调用一些程序并在数据库中进行一些检查。截至目前,每天大约有 1,800 条空白记录被创建。在开发 PC 上,处理每条记录大约需要 2 到 3 秒,平均为一个半小时。但是,当我们将其部署在服务器上时,处理每条记录大约需要 7 秒,大致相当于 3 个半小时才能完成。我们曾遇到过代理需要 4.5 到 5 小时才能完成的情况。

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

4

1 回答 1

1

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

您应该使用免费的NotesPeek实用程序来检查数据库并查看它包含多少删除存根。然后您应该检查清除间隔设置并考虑将其降低到您认为合适的最小值。(即,足够大,以便您知道所有服务器和用户将在该时间内复制,但足够小,以避免允许大量删除存根。)如果您更改清除间隔,您可以等待 24 小时让存根清除,或者您可以手动对服务器控制台上的数据库运行 updall 以强制执行它。

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

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

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

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

于 2013-04-08T16:21:31.197 回答