全部产品
Search
文档中心

时间序列数据库 TSDB:常见问题

更新时间:Jul 19, 2022

本文介绍常见的TSDB For InfluxDB®错误信息和关于它们的描述,以及常见的解决方案。

如何处理报错“database name required”?

当包含SHOW的查询没有明确指定一个数据库时,错误database name required就会发生。指定数据库的方法包括:在SHOW查询中使用ON子句,在CLI中使用USE <database_name>,或者在HTTP API请求中使用参数db

相关的SHOW查询包括SHOW RETENTION POLICIESSHOW SERIESSHOW MEASUREMENTSSHOW TAG KEYSSHOW TAG VALUESSHOW 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

    该查询在FROMWHERE之间缺少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和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

如何处理报错“time outside range”?

当行协议中的时间戳在TSDB For InfluxDB®的有效时间范围之外时,错误time outside range就会发生。

最小的有效时间戳是-92233720368547758061677-09-21T00:12:43.145224194Z,最大的有效时间戳是92233720368547758062262-04-11T23:47:16.854775806Z

如何处理报错“engine: cache maximum memory size exceeded”?

当写入速度过快,导致服务端cache大小短时间超过预设的门限时,错误cache maximum memory size exceeded就会发生。预设的门限由购买的实例规格决定。