我们的生产 Domino 服务器是 32 位 Windows 2003 服务器,其中操作系统、程序文件和 Domino 数据都位于不同的磁盘驱动器上。我不记得曾经在该服务器上看到过此错误:
NotesException:Notes 错误:此数据库的全文索引正在使用中
在我们切换到只有 C: 驱动器的 64 位 Windows 2008 虚拟服务器后,我们经常看到此错误。
今天我做了一个测试,首先生成了 4000 个相当大的文档。然后我运行了这个 XPage SSJS 代码:
for (var i = 0; i < 300; i++) {
print("FT");
database.FTSearch("[Form]=Test");
java.lang.Thread.sleep(100);
}
当上面的代码运行时我运行了这个:
print("START indexing");
database.updateFTIndex(true);
print("END indexing");
我在两台服务器上都执行了两次。在 32 位专用服务器上,我没有遇到任何错误。索引编制耗时 4 秒,索引编制过程中进行了 32 次 FT 搜索。
在 64 位虚拟服务器上,两次在“开始索引”打印后都只有 1 次 FT 搜索,之后我收到错误。所有这 3 件事都发生在同一秒(开始索引、一次 FT 搜索和错误)。
两个 Domino 服务器都是版本 9。虚拟服务器上有超过 10GB 的可用空间(测试数据库中的 FT 索引大小为 10MB)。
我能想到的造成这种差异的唯一原因是 FT 索引器使用专用服务器上的其他驱动器进行索引,因此那里没有发生错误。是这样吗?有相关文档吗?
我们没有使用FTBasePath
notes.ini 参数。
答案1
将操作系统、程序文件和 Domino 数据放在同一个磁盘上可能会/将会出现性能问题,但不应该导致您所看到的问题。
由于生产服务器显然已迁移到新平台,
- 删除所有 FT 索引(删除 .ft 目录)并在新机器上重新创建所有 FT 索引。停止服务器,删除所有相关数据库的 .ft 目录,重新启动服务器并为这些数据库重新创建 FT 索引。
- 验证服务器 notes.ini 中的所有路径是否正确
- Update_Fulltext_Thread=1 是否设置了?
除此之外,请确认没有病毒扫描程序等正在访问 FT 文件,正如 Simon 所评论的那样。
答案2
我将 FT 搜索之间的休眠时间减少到 10ms,并添加了异常处理,以便在异常发生 10ms 后再次尝试 FT 搜索。
结果是专用服务器上有 14 轮异常,虚拟服务器上有 12 轮异常。可能是我第一次测试时虚拟服务器上有些负载。100ms 的休眠时间太长,不至于导致专用服务器上的异常。
因此不幸的是,当全文索引开始时,这种异常似乎总是短暂发生。在其他虚拟服务器使用相同 RAID 系统的虚拟服务器上,磁盘操作有时会很慢,导致 FT 索引繁忙时间增加。