在arangodb中运行AQL时的高I / O.

时间:2015-05-19 17:19:45

标签: arangodb

我正在调查我正在使用的arangodb中的性能问题。我注意到它在执行某些AQL时会执行繁重的i / o(特定于读取操作)。我心中有以下问题:

  1. 实际加载到物理内存中的是什么。是先写日志文件,数据文件还是日记
  2. 如果我假设所有3个都已加载,那么为什么在读取数据时应该有i / o
  3. AQL在Journal / datafile上运行,或者也考虑了预写日志文件数据。
  4. 如果它只在Journal / datafile上运行,那么我们可能在预写文件中有新数据但是aql不会返回
  5. 系统根本没有使用任何交换。但AQL运行时间仍在增加。它有时需要高达10秒才能运行。我在arangodb上做了一个iotop,我发现这个(见下文)特定的命令会重读。它的读取速度高达15 mbps。

    “2320 be / 4 arangodb 10.69 M / s 149.39 K / s 0.00%22.48%arangod -c /etc/arangodb/arangod.conf --uid arangodb --gid arang~emp-path / var / tmp / arangod --log.tty --supervisor [[dispat_def]]“

2 个答案:

答案 0 :(得分:2)

ArangoDB将所有上述内容保留在内存中,AQL会考虑已编写并提交到数据库的所有内容,无论它是否仍驻留在预写日志中。

您的系统是否可能已耗尽主内存以映射所有这些数据?这可以解释高i / o

答案 1 :(得分:1)

正如stj提到的那样

  

AQL查询,即使只读,也为其中间结果分配内存。 OS可能通过从arangod的集合数据文件中卸载页面来满足这些内存分配请求。当再次访问这些页面时,这可能会导致大量后续I / O,无论是通过AQL查询本身还是对数据的其他操作。是否以及何时发生这种情况在很大程度上取决于操作系统和虚拟机配置,因此很难从这里了解

由于中间结果导致主内存耗尽的问题。