如何避免arangodb集合锁

时间:2016-03-12 17:18:14

标签: arangodb

我启用了跟踪功能,并且我看到以下信息在10秒内打印出来,并在一秒钟内完成。

  

2016-03-12T18:14:56Z [31136] TRACE [C:\ b \ ArangoDB-2.8.4 \ arangod \ Wal \ CollectorThread.cpp:750] wal收藏家无法获取收藏的写锁' 39659811'

以下是该系列的数据。

  

类型计数大小信息   数据文件57 1.79 GB   期刊1 32 MB
  压路机0 0 B.   形状文件0 0 B.   指数3 890.2 MB
  输入计数信息   形状239   属性77
  未收集221145
  参考文献1
  键入计数大小删除信息   活着4398864 930.54 MB -
  死4484771 918.31 MB 0

1 个答案:

答案 0 :(得分:2)

ArangoDB有两种用于集合的数据文件:

  • WAL文件(预写日志);如果创建了新的(版本的)文档,这是他们直接去的地方,以确保数据尽可能快地持久写入磁盘。这个文件线性增长。
  • 收集文件;每个系列一个;这里我们有(较旧的)永久数据。

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

文档由引用它们的索引管理,无论是在数据文件还是WAL文件中。它也可以在ArangoDB重启之间完美运行。

现在你要问的WAL-Collector线程。此线程用于将文件从wal文件转换为各自的集合文件。由于您的查询可能正在其他线程中使用这些文档,因此它不能移动它们,因为它们无法使它们无所事事。因此,它需要尝试获取它打算为其迁移文档的集合锁。这可能并不总是有效,因为在ArangoDB的开发过程中这可能很有趣,然后为此编写跟踪日志条目。但是,它迟早会找到时间,并且一旦迁移了WAL文件的所有文档,就可以删除该文件。

由于这是ArangoDB的常规业务 - TL; DR: 除非您停止使用跟踪日志级别,否则您无法避免这些消息,只要早晚清除WAL文件,您就不需要了解它们。