如何避免 arangodb 集合锁

How to avoid arangodb collection locks

我启用了跟踪功能,我看到以下消息在一秒钟内打印了 10k 次。

2016-03-12T18:14:56Z [31136] TRACE [C:\b\ArangoDB-2.8.4\arangod\Wal\CollectorThread.cpp:750] wal collector couldn't acquire write lock for collection '39659811'

以下为合集图

Type Count Size Info Datafiles 57 1.79 GB Journals 1 32 MB
Compactors 0 0 B Shape files 0 0 B Indexes 3 890.2 MB
Type Count Info Shapes 239 Attributes 77
Uncollected 221145
References 1
Type Count Size Deletion Info Alive 4398864 930.54 MB -
Dead 4484771 918.31 MB 0

ArangoDB 有两种数据文件 collections:

  • WAL-Files(预写日志);如果创建了新的(-)文档,这是它们直接去的地方,以确保数据尽快持久地写入磁盘。此文件线性增长。
  • collection 个文件;每个 collection 一个;这里我们有(旧的)永久数据。

因此,如果您插入或更新文档,它们会立即滚动 WAL-files。这很好,因为旋转磁盘不喜欢查找;所以突发被线性写入一个 WAL-file,而不管它们在哪个 collection 中。磁盘可以通过在物理上狭窄的区域中对写入操作进行分组来有效地进行写入突发,并且不需要跳跃文件之间(磁盘上的物理位置)。

文档由引用它们的索引管理,无论是在数据文件中还是在 WAL-files 中。它也将在 ArangoDB 重新启动时完美运行。

现在转到您要询问的 WAL-Collector 话题。该线程用于将文档从 wal 文件转换为各自的 collection 文件。由于您的查询可能正在其他线程中使用这些文档,因此在无法确保它们空闲时不能移动它们。因此它需要尝试获取它打算为其迁移文档的 collection 锁。这可能并不总是奏效,因为这在 ArangoDB 的开发过程中可能很有趣,因此它会为此编写一个跟踪日志条目。但是,它迟早会找时间这样做,一旦 WAL-file 的所有文档都迁移完毕,就可以删除该文件。

因为这是 ArangoDB 的常规业务 - TL;DR: 除非您停止使用跟踪日志级别,否则您无法避免这些消息,只要 WAL-files 迟早会被清理,您就不必担心它。