【问题标题】:Lotus notes agent runs slower in server compared to development PC与开发 PC 相比,Lotus Notes 代理在服务器中的运行速度较慢
【发布时间】:2013-04-05 06:20:18
【问题描述】:

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

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

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

【问题讨论】:

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

标签: lotus-notes lotus-domino lotus lotusscript


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 2023-03-10
    • 2021-11-24
    • 2010-12-16
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多