常见问题
本文介绍常见的TSDB For InfluxDB®错误信息和关于它们的描述,以及常见的解决方案。
如何处理报错“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
。
如何处理报错“max series per database exceeded: < >”?
当写入导致数据库中序列的数量超过每个数据库允许的最大序列数量时,错误max series per database exceeded
就会发生。每个数据库允许的最大序列数量由购买的实例规格所决定。
< >
内的信息展示了那些超出max-series-per-database
限制的序列的measurement和tag set。
如何处理报错“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关键字的标识符,请用双引号将标识符括起来。在某些情况下,当查询中某个标识符是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
如何处理报错“found < >, expected string at line < >, char < >”?
当TSDB For InfluxDB®在查询中找不到预期的字符串时,错误expected string
就会发生。
如何处理报错“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:00Z281
2016-10-07T18:50:10Z4122
2016-10-07T18:50:20Z6144
2016-10-07T18:50:30Z7153
查询一:
> 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中,没有明显的单个值可以返回。
如何处理报错“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:00Z2.064
2015-08-18T00:06:00Z2.116
2015-08-18T00:12:00Z2.028
如何处理报错“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=11439938800000000000
行协议语法
在某些情况下,当行协议中有更通用的语法错误时,错误
bad timestamp
就会发生。示例
写入一:
> INSERT hens location=2 value=9 ERR:{"error":"unable to parse 'hens location=2 value=9': bad timestamp"}
在写入一中的行协议使用空格将measurement
hen
和taglocation=2
分开,而不是用逗号。TSDB For InfluxDB®把fieldvalue=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
和fieldhappy=3
分开,而不是用逗号。TSDB For InfluxDB®把fieldhappy=3
当成了时间戳,所以返回错误。为了避免错误,使用逗号(而不是空格)将两个field分开:
> INSERT cows,name=daisy milk_prod=3,happy=3
如何处理报错“time outside range”?
当行协议中的时间戳在TSDB For InfluxDB®的有效时间范围之外时,错误time outside range
就会发生。
最小的有效时间戳是-9223372036854775806
或1677-09-21T00:12:43.145224194Z
,最大的有效时间戳是9223372036854775806
或2262-04-11T23:47:16.854775806Z
。
如何处理报错“engine: cache maximum memory size exceeded”?
当写入速度过快,导致服务端cache大小短时间超过预设的门限时,错误cache maximum memory size exceeded
就会发生。预设的门限由购买的实例规格决定。