TL;DR InfluxDB 技术提示 - 限制数据库中的序列和持续查询配置
作者:Regan Kuchan / 开发者
2016 年 9 月 29 日
导航至
在本周的帖子中,我们回顾了与 InfluxDB 和 TICK-stack 相关的最有趣的问题、解决方法、如何在数据库中限制序列、持续查询配置以及持续查询结果中的 FILL() 函数,以及来自 GitHub、IRC 和 InfluxDB Google Group 的问答,您可能在过去一周左右错过了这些内容。
限制每个数据库的序列数量
问:有没有办法限制写入 InfluxDB 的序列数量?
答:是的。max-series-per-database
配置设置允许您限制每个数据库写入的序列数量。默认情况下,max-series-per-database
设置为 1,000,000
,您可以在配置文件的 [data]
部分找到它。
如果一个点导致数据库中的序列数量超过 max-series-per-database
,InfluxDB 将不会写入该点,并返回 500
错误,如下所示
{"error":"max series per database exceeded: <series>"}
配置持续查询的计划
问:我的 CQ 每小时运行一次,在每小时开始时。有没有办法让它每小时运行一次,但在每小时的第三十分钟运行?因此,CQ 不是在 00:00
和 01:00
运行,而是在 00:30
运行,然后在 01:30
运行,然后在 2:30
运行,依此类推。
答:CQ 语法支持使用 offset interval 来更改 CQ 的默认执行时间。例如,以下 CQ 在默认执行时间后 30 分钟(30m
)执行
CREATE CONTINUOUS QUERY "thirty_is_the_new_00" [...] GROUP BY time(1h,30m)
请注意,offset interval 也会将每个查询覆盖的时间范围向前移动。在 00:30
,CQ 的时间范围将在 23:30
和 00:30
之间,而不是默认的 23:00
和 00:00
之间。
Fill() 持续查询结果
问:我在我的 CQ 中包含了 fill(100)
以用值填充任何无数据间隔,但它似乎不起作用;如果一个间隔没有数据,它仍然在 CQ 结果中丢失。当我创建 CQ 并且当我查看日志时 CQ 似乎正在运行时,我没有看到任何错误。这是预期的行为吗?
我的持续查询
CREATE CONTINUOUS QUERY "fruit_rollup" ON "mydb" BEGIN
SELECT mean("usage_idle") INTO "average_idle" FROM "cpu" GROUP BY time(30m),cpu fill(100)
END
答:这是您的 CQ 的预期行为。基本语法只是忽略 CQ 查询中包含的 fill()
。
具有高级语法的 CQ(即包含 RESAMPLE
子句的 CQ)确实支持 fill()
。请注意,至少必须有一个数据点落在 RESAMPLE
的 FOR
间隔内,fill()
才能运行。如果没有数据落在 FOR
间隔内,CQ 将不会向目标测量写入任何点。
例如,以下 CQ 每半小时运行一次单个查询。当它运行时,查询覆盖 now()
和 now()
前两小时之间的时间范围。如果 cpu
测量在该时间范围内至少有一个数据点,则 CQ 将向 average_idle
测量写入数据,用 100
填充任何无数据的 30m
间隔。但是,如果 cpu
测量在该两小时时间范围内没有数据,则 CQ 不会向 average_idle
测量写入任何结果。
CREATE CONTINUOUS QUERY "fruit_rollup" ON "mydb" RESAMPLE FOR 2h BEGIN
SELECT mean("usage_idle") INTO "average_idle" FROM "cpu" GROUP BY time(30m),cpu fill(100)
END
有关更多 InfluxDB 提示,请参阅我们的 常见问题解答 页面,并随时在 InfluxDB 用户组 中发布您的问题!
下一步是什么?
- 下载 并 开始使用 InfluxDB!
- 安排一次免费的 20 分钟咨询,与解决方案架构师一起审查您的 InfluxDB 项目。
- 参加我们免费的虚拟培训研讨会之一。
- 有问题需要 InfluxData 支持团队立即解答?包含无限事件的支持订阅每月仅需 399 美元起。查看所有支持选项 此处。