TL;DR InfluxDB技术技巧 - 限制数据库中的系列数量及连续查询配置
作者:Regan Kuchan / 开发者
2016年9月29日
导航到
在这周的文章中,我们回顾了与InfluxDB和TICK-stack相关的最有趣的问题、解决方案、如何在数据库中限制系列数量、连续查询配置、以及连续查询结果中的FILL()函数,以及GitHub、IRC和InfluxDB Google Group上的问答,这些都是您在过去一周左右可能错过的内容。
限制每个数据库中的系列数量
Q:有没有方法限制写入InfluxDB的系列数量?
A:是的。通过配置设置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>"}
配置连续查询的调度
Q:我的连续查询(CQ)每小时开始一次。有没有办法让它每小时三十分钟运行一次?所以,而不是在00:00
和01:00
运行,CQ将在00:30
、01:30
、2:30
等时间运行。
A:CQ语法支持使用偏移间隔来改变CQ的默认执行时间。例如,以下CQ在默认执行时间后30分钟(30m
)执行。
CREATE CONTINUOUS QUERY "thirty_is_the_new_00" [...] GROUP BY time(1h,30m)
请注意,偏移间隔也会将每个查询覆盖的时间范围向前移动。在00:30
时,CQ将具有从23:30
到00:30
的时间范围,而不是默认的23:00
和00:00
。
填充连续查询结果
Q:我在CQ中包含了fill(100)
来填充任何没有数据的时间段,但它似乎不起作用;如果一个时间段没有数据,它似乎仍然会从CQ结果中缺失。我在创建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
A:这是您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用户组中提问!