如何修复 MarkLogic“文件太大”森林合并错误?

Posted

技术标签:

【中文标题】如何修复 MarkLogic“文件太大”森林合并错误?【英文标题】:How to fix a MarkLogic "File too large" forest merge error? 【发布时间】:2017-06-18 14:40:38 【问题描述】:

我正在运行 MarkLogic 版本 8.0-6.1。

主机操作系统是 Red Hat Enterprise Linux Server 6.8 版(圣地亚哥)。

数据存储在具有 90% 可用空间的本地磁盘上。

服务器运行良好,但偶尔会抛出以下错误。

SVC-FILWRT: File write error: write '/var/opt/MarkLogic/Forests/clickstream-1/0000008a/ListData': File too large

对根本原因和可能的解决方法有什么想法吗?

【问题讨论】:

什么样的文件?二进制、文本、XML、JSON?文件有多大? 数据库使用一个林。一个森林有 400 万个 XML 文件。每个 XML 文件的平均大小为 3 KB。 我相信 ListData 文件本质上是构成通用索引的好东西。所以看起来“零星”的东西可能与重新索引操作直接相关。 RHEL 6x EXT4 的单个文件限制为 16TB,因此 ListData 本身的文件大小的实际问题似乎不太可能。 ListData 文件有多大,整个林使用的磁盘空间有多大,有多少个支架,有多少已删除的片段,最后但并非最不重要的一点是,合并最大大小设置是多少? 我在一个森林中存储了 400 万个文档。从那以后,我添加了一个似乎解决了问题的新森林。我现在没有 ListData 的确切值,因为有 2 个森林。然而,目前每个森林有 3 个林分。原始森林仍然有较大的 ListData 和 TreeData 文件。最大的 ListData 文件为 2.8 GB。最大的 TreeData 文件为 3.7 GB。原始森林中删除的片段为 570,181。 Merge Max 设置是默认值 32768 MB。 【参考方案1】:

支架通常不应该那么大。我可以想象两种情况如何发生,尽管不能 100% 确定它们是真的:

您已从引入合并最大大小之前的版本升级了一个森林数量较少的大型数据库,导致 MarkLogic 无法立即清除已删除的片段

您运行了一些大型事务,导致内存中的 Stand 超过合并最大大小,一旦持久化到磁盘就会导致类似的情况

当然,这不一定是件坏事,除非您遇到文件写入错误。如此大的展台中被删除的片段可能会比平时更久,但如果有足够的片段被删除,MarkLogic 最终还是会将它们合并出去。

如果您想尽快摆脱大型支架,您可以尝试将旧林设置为仅删除模式,强制将新更新移至其他位置,然后“接触”该林中的所有文档,以使它们迁移到其他森林之一。一旦该林仅包含已删除的片段,您只需将该林取出(从数据库中取消分配它),然后将其删除。之后,您可能会重新创建它,并将空森林再次分配给数据库。它可能会触发重新平衡,但最终应该会下降,在您的数据库的所有森林中具有更均匀的平衡。

无论如何,如果您预计会有一定的增长或大型交易,从一开始就使用多个森林可能是明智之举。

对于那些想深入了解技术方面的人,我建议阅读 Inside MarkLogic 论文:

https://developer.marklogic.com/inside-marklogic

数据管理部分尤其与数据库、森林和林分相关。

HTH!

【讨论】:

以上是关于如何修复 MarkLogic“文件太大”森林合并错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Node.js 中的“413 请求实体太大”错误

sql文件太大,mysql导入报错怎么办

如何检查用户是不是能够在 marklogic 数据库中更新或插入文档?

如何在 Ubuntu 14.04 上安装 MarkLogic 8?

如何从 C# WebApi 禁用对 MarkLogic 服务器的预检请求

如何在Marklogic或Couchbase中进行xslt类型转换?