故障排查
本页面包含一些常见的TSDB For InfluxDB®错误信息以及关于它们的描述,还包括常见的解决方案(如果适用的话)。
免责声明:本文档不是涵盖所有可能的TSDB For InfluxDB®错误的详细清单。
error: database name required
当包含SHOW
的查询没有明确指定一个数据库时,错误database name required
就会发生。指定数据库的方法包括:在SHOW
查询中使用ON
子句,在CLI中使用USE <database_name>
,或者在HTTP API请求中使用参数db
。
相关的SHOW
查询包括SHOW RETENTION POLICIES
、SHOW SERIES
、SHOW MEASUREMENTS
、SHOW TAG KEYS
、SHOW TAG VALUES
和SHOW FIELD KEYS
。
资源:文档Schema探索和InfluxQL参考
error: max series per database exceeded: < >
当写入导致数据库中序列的数量超过每个数据库允许的最大序列数量时,错误max series per database exceeded
就会发生。每个数据库允许的最大序列数量由购买的实例规格所决定。
< >
内的信息展示了那些超出max-series-per-database
限制的序列的measurement和tag set。
error parsing query: found < >, expected identifier at line < >, char < >
InfluxQL语法
当TSDB For InfluxDB®在查询中找不到预期的标识符时,错误expected identifier
就会发生。标识符是连续查询名字、数据库名字、field key、measurement的名字、保留策略名字、subscription的名字、tag key和用户名。这个错误通常用于提醒您仔细检查您的查询语法。
示例
> SELECT * FROM WHERE "blue" = true
ERR: error parsing query: found WHERE, expected identifier at line 1, char 15
该查询在FROM
和WHERE
之间缺少measurement的名字。
InfluxQL关键字
在某些情况下,当查询中某个标识符是InfluxQL关键字时,错误expected identifier
就会发生。如果要查询也是InfluxQL关键字的标识符,请用双引号将标识符括起来。
示例
> SELECT duration FROM runs
ERR: error parsing query: found DURATION, expected identifier, string, number, bool at line 1, char 8
在查询中,field key duration
是一个InfluxQL关键字。为了避免错误,请用双引号将duration
括起来:
> SELECT "duration" FROM runs
资源:文档InfluxQL参考
error parsing query: found < >, expected string at line < >, char < >
当TSDB For InfluxDB®在查询中找不到预期的字符串时,错误expected string
就会发生。
error parsing query: mixing aggregate and non-aggregate queries is not supported
当SELECT
语句同时包含聚合函数和不使用聚合函数的field key或tag key时,错误mixing aggregate and non-aggregate
就会发生。
聚合函数返回一个计算结果,对于没有被聚合的field或tag,没有明显的单个值可以返回。
示例
原始数据:
measurement peg
有两个field(square
and round
)和一个tag(force
):
name: peg
---------
time square round force
2016-10-07T18:50:00Z 2 8 1
2016-10-07T18:50:10Z 4 12 2
2016-10-07T18:50:20Z 6 14 4
2016-10-07T18:50:30Z 7 15 3
查询一:
> SELECT mean("square"),"round" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supported
查询一包含一个聚合函数和一个单独的field。
mean("square")
返回一个聚合值,这是measurement peg
中的四个square
值的平均值,但是从field round
的四个非聚合的field value中,没有明显的单个值可以返回。
查询二:
> SELECT mean("square"),"force" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supported
查询二包含一个聚合函数和一个单独的tag。
mean("square")
返回一个聚合值,这是measurement peg
中的四个square
值的平均值,但是从tag force
的四个非聚合的tag value中,没有明显的单个值可以返回。
资源:文档InfluxQL函数
invalid operation: time and *influxql.VarRef are not compatible
当在查询中用双引号把日期时间字符串括起来时,错误time and \*influxql.VarRef are not compatible
就会发生。需要用单引号把日期时间字符串括起来。
示例
用双引号把日期时间字符串括起来:
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= "2015-08-18T00:00:00Z" AND time <= "2015-08-18T00:12:00Z"
ERR: invalid operation: time and *influxql.VarRef are not compatible
用单引号把日期时间字符串括起来:
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:12:00Z'
name: h2o_feet
time water_level
---- -----------
2015-08-18T00:00:00Z 2.064
2015-08-18T00:06:00Z 2.116
2015-08-18T00:12:00Z 2.028
资源:文档数据探索
unable to parse < >: bad timestamp
时间语法
当行协议包含不是UNIX时间戳格式的时间戳时,错误bad timestamp
就会发生。
示例
> INSERT pineapple value=1 '2015-08-18T23:00:00Z'
ERR: {"error":"unable to parse 'pineapple value=1 '2015-08-18T23:00:00Z'': bad timestamp"}
上面的行协议使用了RFC3339格式的时间戳。为了避免错误,成功将数据点写入TSDB For InfluxDB®,将时间戳替换成UNIX时间戳:
> INSERT pineapple,fresh=true value=1 1439938800000000000
行协议语法
在某些情况下,当行协议中有更通用的语法错误时,错误bad timestamp
就会发生。
示例
写入一:
> INSERT hens location=2 value=9
ERR: {"error":"unable to parse 'hens location=2 value=9': bad timestamp"}
在写入一中的行协议使用空格将measurement hen
和tag location=2
分开,而不是用逗号。TSDB For InfluxDB®把field value=9
当成了时间戳,所以返回错误。
为了避免错误,使用逗号(而不是空格)将measurement和tag分开:
> INSERT hens,location=2 value=9
写入二:
> INSERT cows,name=daisy milk_prod=3 happy=3
ERR: {"error":"unable to parse 'cows,name=daisy milk_prod=3 happy=3': bad timestamp"}
在写入二中的行协议使用空格将field milk_prod=3
和field happy=3
分开,而不是用逗号。TSDB For InfluxDB®把field happy=3
当成了时间戳,所以返回错误。
为了避免错误,使用逗号(而不是空格)将两个field分开:
> INSERT cows,name=daisy milk_prod=3,happy=3
unable to parse < >: time outside range
当行协议中的时间戳在TSDB For InfluxDB®的有效时间范围之外时,错误time outside range
就会发生。最小的有效时间戳是-9223372036854775806
或1677-09-21T00:12:43.145224194Z
,最大的有效时间戳是9223372036854775806
或2262-04-11T23:47:16.854775806Z
。
write failed for shard < >: engine: cache maximum memory size exceeded
当写入速度过快,导致服务端cache大小短时间超过预设的门限时,错误cache maximum memory size exceeded
就会发生。预设的门限由购买的实例规格决定。
InfluxDB® is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB®.
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论