InfluxDB 因大量数据而宕机

zam*_*bro 2 influxdb

我正在使用 InfluxDB 构建仪表板。我有一个产生大约的来源。每分钟 2000 点。每个点有 5 个标签,6 个字段。只有一种测量。

一切正常大约 24 小时,但随着数据大小的增长,我无法对涌入运行任何查询。例如,现在我有大约 48 小时的数据,即使是基本的选择也会降低涌入数据库,

select count(field1) from measurementname
Run Code Online (Sandbox Code Playgroud)

它超时并出现错误:

ERR: Get http://localhost:8086/query?db=dbname&q=select+count%28field1%29+from+measuementname: EOF
Run Code Online (Sandbox Code Playgroud)


配置:

  • InfluxDB 版本:0.10.1 默认配置
  • 操作系统版本:Ubuntu 14.04.2 LTS
  • 配置:30GB内存,4个VCPU,150GB硬盘

一些背景:

我有一个仪表板和一个查询 influxdb 的网络应用程序。webapp 允许用户基于 tag1 或 tag2 查询数据库。

标签:

  • tag1 - 每条记录唯一。在 Web 应用程序的 where 子句中使用以获取基于此字段的记录。
  • tag2 - 每条记录唯一。在 Web 应用程序的 where 子句中使用以获取基于此字段的记录。
  • tag3 - 在 group by 中使用。把它想象成部门 ID 捆绑了一群员工。
  • tag4 - 在 group by 中使用。把它想象成部门 ID 捆绑了一群员工。
  • tag5 - 在 group by 中使用。值 0 或 1 或 2。

bec*_*ean 6

粘贴来自 influxdb@googlegroups.com 邮件列表的答案:https ://groups.google.com/d/msgid/influxdb/b4fb503e-18a5-4bd5-84b1-632dc4950747%40googlegroups.com?utm_medium = email & utm_source = footer

tag1 - 每条记录唯一。
tag2 - 每条记录唯一。

这是一个糟糕的架构。您正在为每条记录创建一个新系列,这会给数据库带来沉重的负担。每个系列都必须编入索引,并且整个索引当前必须驻留在 RAM 中。我怀疑由于系列基数,您在 48 小时后内存不足,查询只是最后一根稻草,而不是低 RAM 情况的实际原因。

在标签中使用唯一值是非常糟糕的做法。您仍然可以在 WHERE 子句中使用字段,只是它们的性能没有那么好,而且对系统的损害远小于每个点都有一个唯一的系列。

https://docs.influxdata.com/influxdb/v0.10/concepts/schema_and_data_layout/ https://docs.influxdata.com/influxdb/v0.10/guides/hardware_sizing/#when-do-i-need-more -内存