Merge branch 'main' into merge/mainto3.0
This commit is contained in:
commit
b8ec59ab19
|
@ -701,15 +701,6 @@ The charset that takes effect is UTF-8.
|
||||||
| Type | String |
|
| Type | String |
|
||||||
| Default Value | _tag_null |
|
| Default Value | _tag_null |
|
||||||
|
|
||||||
### smlDataFormat
|
|
||||||
|
|
||||||
| Attribute | Description |
|
|
||||||
| ----------- | ----------------------------------------------------------------------------------- |
|
|
||||||
| Applicable | Client only |
|
|
||||||
| Meaning | Whether schemaless columns are consistently ordered, depat, discarded since 3.0.3.0 |
|
|
||||||
| Value Range | 0: not consistent; 1: consistent. |
|
|
||||||
| Default | 0 |
|
|
||||||
|
|
||||||
### smlTsDefaultName
|
### smlTsDefaultName
|
||||||
|
|
||||||
| Attribute | Description |
|
| Attribute | Description |
|
||||||
|
@ -719,6 +710,16 @@ The charset that takes effect is UTF-8.
|
||||||
| Type | String |
|
| Type | String |
|
||||||
| Default Value | _ts |
|
| Default Value | _ts |
|
||||||
|
|
||||||
|
### smlDot2Underline
|
||||||
|
|
||||||
|
| Attribute | Description |
|
||||||
|
| -------- | -------------------------------------------------------- |
|
||||||
|
| Applicable | Client only |
|
||||||
|
| Meaning | Convert the dot in the supertable name to an underscore |
|
||||||
|
| Type | Bool |
|
||||||
|
| Default Value | true |
|
||||||
|
|
||||||
|
|
||||||
## Compress Parameters
|
## Compress Parameters
|
||||||
|
|
||||||
### compressMsgSize
|
### compressMsgSize
|
||||||
|
|
|
@ -20,21 +20,22 @@ taosBenchmark --start-timestamp=1600000000000 --tables=100 --records=10000000 --
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM meters
|
SELECT * FROM meters
|
||||||
WHERE voltage > 10
|
WHERE voltage > 230
|
||||||
ORDER BY ts DESC
|
ORDER BY ts DESC
|
||||||
LIMIT 5
|
LIMIT 5;
|
||||||
```
|
```
|
||||||
|
|
||||||
上面的 SQL,从超级表 `meters` 中查询出电压 `voltage` 大于 10 的记录,按时间降序排列,且仅输出前 5 行。查询结果如下:
|
上面的 SQL,从超级表 `meters` 中查询出电压 `voltage` 大于 230 的记录,按时间降序排列,且仅输出前 5 行。查询结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
ts | current | voltage | phase | groupid | location |
|
ts | current | voltage | phase | groupid | location |
|
||||||
==========================================================================================================
|
===================================================================================================
|
||||||
2023-11-14 22:13:10.000 | 1.1294620 | 18 | 0.3531540 | 8 | California.MountainView |
|
2023-11-15 06:13:10.000 | 14.0601978 | 232 | 146.5000000 | 10 | California.Sunnyvale |
|
||||||
2023-11-14 22:13:10.000 | 1.0294620 | 12 | 0.3631540 | 2 | California.Campbell |
|
2023-11-15 06:13:10.000 | 14.0601978 | 232 | 146.5000000 | 1 | California.LosAngles |
|
||||||
2023-11-14 22:13:10.000 | 1.0294620 | 16 | 0.3531540 | 1 | California.Campbell |
|
2023-11-15 06:13:10.000 | 14.0601978 | 232 | 146.5000000 | 10 | California.Sunnyvale |
|
||||||
2023-11-14 22:13:10.000 | 1.1294620 | 18 | 0.3531540 | 2 | California.Campbell |
|
2023-11-15 06:13:10.000 | 14.0601978 | 232 | 146.5000000 | 5 | California.Cupertino |
|
||||||
2023-11-14 22:13:10.000 | 1.1294620 | 16 | 0.3431540 | 7 | California.PaloAlto |
|
2023-11-15 06:13:10.000 | 14.0601978 | 232 | 146.5000000 | 4 | California.SanFrancisco |
|
||||||
|
Query OK, 5 row(s) in set (0.145403s)
|
||||||
```
|
```
|
||||||
|
|
||||||
## 聚合查询
|
## 聚合查询
|
||||||
|
@ -48,28 +49,28 @@ TDengine 支持通过 GROUP BY 子句,对数据进行聚合查询。SQL 语句
|
||||||
group by 子句用于对数据进行分组,并为每个分组返回一行汇总信息。在 group by 子句中,可以使用表或视图中的任何列作为分组依据,这些列不需要出现在 select 列表中。此外,用户可以直接在超级表上执行聚合查询,无须预先创建子表。以智能电表的数据模型为例,使用 group by 子句的 SQL 如下:
|
group by 子句用于对数据进行分组,并为每个分组返回一行汇总信息。在 group by 子句中,可以使用表或视图中的任何列作为分组依据,这些列不需要出现在 select 列表中。此外,用户可以直接在超级表上执行聚合查询,无须预先创建子表。以智能电表的数据模型为例,使用 group by 子句的 SQL 如下:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT groupid,avg(voltage)
|
SELECT groupid, avg(voltage)
|
||||||
FROM meters
|
FROM meters
|
||||||
WHERE ts >= "2022-01-01T00:00:00+08:00"
|
WHERE ts >= "2022-01-01T00:00:00+08:00"
|
||||||
AND ts < "2023-01-01T00:00:00+08:00"
|
AND ts < "2023-01-01T00:00:00+08:00"
|
||||||
GROUP BY groupid
|
GROUP BY groupid;
|
||||||
```
|
```
|
||||||
|
|
||||||
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2023-01-01T00:00:00+08:00` 的数据,按照 `groupid` 进行分组,求每组的平均电压。查询结果如下:
|
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2023-01-01T00:00:00+08:00` 的数据,按照 `groupid` 进行分组,求每组的平均电压。查询结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
groupid | avg(voltage) |
|
groupid | avg(voltage) |
|
||||||
==========================================
|
======================================
|
||||||
8 | 9.104040404040404 |
|
8 | 243.961981544901079 |
|
||||||
5 | 9.078333333333333 |
|
5 | 243.961981544901079 |
|
||||||
1 | 9.087037037037037 |
|
1 | 243.961981544901079 |
|
||||||
7 | 8.991414141414142 |
|
7 | 243.961981544901079 |
|
||||||
9 | 8.789814814814815 |
|
9 | 243.961981544901079 |
|
||||||
6 | 9.051010101010101 |
|
6 | 243.961981544901079 |
|
||||||
4 | 9.135353535353536 |
|
4 | 243.961981544901079 |
|
||||||
10 | 9.213131313131314 |
|
10 | 243.961981544901079 |
|
||||||
2 | 9.008888888888889 |
|
2 | 243.961981544901079 |
|
||||||
3 | 8.783888888888889 |
|
3 | 243.961981544901079 |
|
||||||
Query OK, 10 row(s) in set (0.042446s)
|
Query OK, 10 row(s) in set (0.042446s)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -110,24 +111,24 @@ TDengine 按如下方式处理数据切分子句。
|
||||||
```sql
|
```sql
|
||||||
SELECT location, avg(voltage)
|
SELECT location, avg(voltage)
|
||||||
FROM meters
|
FROM meters
|
||||||
PARTITION BY location
|
PARTITION BY location;
|
||||||
```
|
```
|
||||||
|
|
||||||
上面的示例 SQL 查询超级表 `meters`,将数据按标签 `location` 进行分组,每个分组计算电压的平均值。查询结果如下:
|
上面的示例 SQL 查询超级表 `meters`,将数据按标签 `location` 进行分组,每个分组计算电压的平均值。查询结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
location | avg(voltage) |
|
location | avg(voltage) |
|
||||||
=========================================================
|
======================================================
|
||||||
California.SantaClara | 8.793334320000000 |
|
California.SantaClara | 243.962050000000005 |
|
||||||
California.SanFrancisco | 9.017645882352941 |
|
California.SanFrancisco | 243.962050000000005 |
|
||||||
California.SanJose | 9.156112940000000 |
|
California.SanJose | 243.962050000000005 |
|
||||||
California.LosAngles | 9.036753507692307 |
|
California.LosAngles | 243.962050000000005 |
|
||||||
California.SanDiego | 8.967037053333334 |
|
California.SanDiego | 243.962050000000005 |
|
||||||
California.Sunnyvale | 8.978572085714285 |
|
California.Sunnyvale | 243.962050000000005 |
|
||||||
California.PaloAlto | 8.936665800000000 |
|
California.PaloAlto | 243.962050000000005 |
|
||||||
California.Cupertino | 8.987654066666666 |
|
California.Cupertino | 243.962050000000005 |
|
||||||
California.MountainView | 9.046297266666667 |
|
California.MountainView | 243.962050000000005 |
|
||||||
California.Campbell | 9.149999028571429 |
|
California.Campbell | 243.962050000000005 |
|
||||||
Query OK, 10 row(s) in set (2.415961s)
|
Query OK, 10 row(s) in set (2.415961s)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -200,20 +201,20 @@ SLIMIT 2;
|
||||||
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2022-01-01T00:05:00+08:00` 的数据;数据首先按照子表名 `tbname` 进行数据切分,再按照每 1 分钟的时间窗口进行切分,且每个时间窗口向后偏移 5 秒;最后,仅取前 2 个分片的数据作为结果。查询结果如下:
|
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2022-01-01T00:05:00+08:00` 的数据;数据首先按照子表名 `tbname` 进行数据切分,再按照每 1 分钟的时间窗口进行切分,且每个时间窗口向后偏移 5 秒;最后,仅取前 2 个分片的数据作为结果。查询结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
tbname | _wstart | _wend | avg(voltage) |
|
tbname | _wstart | _wend | avg(voltage) |
|
||||||
==========================================================================================
|
======================================================================================
|
||||||
d40 | 2021-12-31 15:59:05.000 | 2021-12-31 16:00:05.000 | 4.000000000000000 |
|
d2 | 2021-12-31 23:59:05.000 | 2022-01-01 00:00:05.000 | 253.000000000000000 |
|
||||||
d40 | 2021-12-31 16:00:05.000 | 2021-12-31 16:01:05.000 | 5.000000000000000 |
|
d2 | 2022-01-01 00:00:05.000 | 2022-01-01 00:01:05.000 | 244.166666666666657 |
|
||||||
d40 | 2021-12-31 16:01:05.000 | 2021-12-31 16:02:05.000 | 8.000000000000000 |
|
d2 | 2022-01-01 00:01:05.000 | 2022-01-01 00:02:05.000 | 241.833333333333343 |
|
||||||
d40 | 2021-12-31 16:02:05.000 | 2021-12-31 16:03:05.000 | 7.666666666666667 |
|
d2 | 2022-01-01 00:02:05.000 | 2022-01-01 00:03:05.000 | 243.166666666666657 |
|
||||||
d40 | 2021-12-31 16:03:05.000 | 2021-12-31 16:04:05.000 | 9.666666666666666 |
|
d2 | 2022-01-01 00:03:05.000 | 2022-01-01 00:04:05.000 | 240.833333333333343 |
|
||||||
d40 | 2021-12-31 16:04:05.000 | 2021-12-31 16:05:05.000 | 15.199999999999999 |
|
d2 | 2022-01-01 00:04:05.000 | 2022-01-01 00:05:05.000 | 244.800000000000011 |
|
||||||
d41 | 2021-12-31 15:59:05.000 | 2021-12-31 16:00:05.000 | 4.000000000000000 |
|
d26 | 2021-12-31 23:59:05.000 | 2022-01-01 00:00:05.000 | 253.000000000000000 |
|
||||||
d41 | 2021-12-31 16:00:05.000 | 2021-12-31 16:01:05.000 | 7.000000000000000 |
|
d26 | 2022-01-01 00:00:05.000 | 2022-01-01 00:01:05.000 | 244.166666666666657 |
|
||||||
d41 | 2021-12-31 16:01:05.000 | 2021-12-31 16:02:05.000 | 9.000000000000000 |
|
d26 | 2022-01-01 00:01:05.000 | 2022-01-01 00:02:05.000 | 241.833333333333343 |
|
||||||
d41 | 2021-12-31 16:02:05.000 | 2021-12-31 16:03:05.000 | 10.666666666666666 |
|
d26 | 2022-01-01 00:02:05.000 | 2022-01-01 00:03:05.000 | 243.166666666666657 |
|
||||||
d41 | 2021-12-31 16:03:05.000 | 2021-12-31 16:04:05.000 | 8.333333333333334 |
|
d26 | 2022-01-01 00:03:05.000 | 2022-01-01 00:04:05.000 | 240.833333333333343 |
|
||||||
d41 | 2021-12-31 16:04:05.000 | 2021-12-31 16:05:05.000 | 9.600000000000000 |
|
d26 | 2022-01-01 00:04:05.000 | 2022-01-01 00:05:05.000 | 244.800000000000011 |
|
||||||
Query OK, 12 row(s) in set (0.021265s)
|
Query OK, 12 row(s) in set (0.021265s)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -255,19 +256,19 @@ SLIMIT 1;
|
||||||
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2022-01-01T00:05:00+08:00` 的数据,数据首先按照子表名 `tbname` 进行数据切分,再按照每 1 分钟的时间窗口进行切分,且时间窗口按照 30 秒进行滑动;最后,仅取前 1 个分片的数据作为结果。查询结果如下:
|
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2022-01-01T00:05:00+08:00` 的数据,数据首先按照子表名 `tbname` 进行数据切分,再按照每 1 分钟的时间窗口进行切分,且时间窗口按照 30 秒进行滑动;最后,仅取前 1 个分片的数据作为结果。查询结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
tbname | _wstart | avg(voltage) |
|
tbname | _wstart | avg(voltage) |
|
||||||
================================================================
|
=============================================================
|
||||||
d40 | 2021-12-31 15:59:30.000 | 4.000000000000000 |
|
d2 | 2021-12-31 23:59:30.000 | 248.333333333333343 |
|
||||||
d40 | 2021-12-31 16:00:00.000 | 5.666666666666667 |
|
d2 | 2022-01-01 00:00:00.000 | 246.000000000000000 |
|
||||||
d40 | 2021-12-31 16:00:30.000 | 4.333333333333333 |
|
d2 | 2022-01-01 00:00:30.000 | 244.666666666666657 |
|
||||||
d40 | 2021-12-31 16:01:00.000 | 5.000000000000000 |
|
d2 | 2022-01-01 00:01:00.000 | 240.833333333333343 |
|
||||||
d40 | 2021-12-31 16:01:30.000 | 9.333333333333334 |
|
d2 | 2022-01-01 00:01:30.000 | 239.500000000000000 |
|
||||||
d40 | 2021-12-31 16:02:00.000 | 9.666666666666666 |
|
d2 | 2022-01-01 00:02:00.000 | 243.833333333333343 |
|
||||||
d40 | 2021-12-31 16:02:30.000 | 10.000000000000000 |
|
d2 | 2022-01-01 00:02:30.000 | 243.833333333333343 |
|
||||||
d40 | 2021-12-31 16:03:00.000 | 10.333333333333334 |
|
d2 | 2022-01-01 00:03:00.000 | 241.333333333333343 |
|
||||||
d40 | 2021-12-31 16:03:30.000 | 10.333333333333334 |
|
d2 | 2022-01-01 00:03:30.000 | 241.666666666666657 |
|
||||||
d40 | 2021-12-31 16:04:00.000 | 13.000000000000000 |
|
d2 | 2022-01-01 00:04:00.000 | 244.166666666666657 |
|
||||||
d40 | 2021-12-31 16:04:30.000 | 15.333333333333334 |
|
d2 | 2022-01-01 00:04:30.000 | 244.666666666666657 |
|
||||||
Query OK, 11 row(s) in set (0.013153s)
|
Query OK, 11 row(s) in set (0.013153s)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -290,13 +291,13 @@ SLIMIT 1;
|
||||||
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2022-01-01T00:05:00+08:00` 的数据,数据首先按照子表名 `tbname` 进行数据切分,再按照每 1 分钟的时间窗口进行切分,且时间窗口按照 1 分钟进行切分;最后,仅取前 1 个分片的数据作为结果。查询结果如下:
|
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2022-01-01T00:05:00+08:00` 的数据,数据首先按照子表名 `tbname` 进行数据切分,再按照每 1 分钟的时间窗口进行切分,且时间窗口按照 1 分钟进行切分;最后,仅取前 1 个分片的数据作为结果。查询结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
tbname | _wstart | _wend | avg(voltage) |
|
tbname | _wstart | _wend | avg(voltage) |
|
||||||
=================================================================================================================
|
======================================================================================
|
||||||
d28 | 2021-12-31 16:00:00.000 | 2021-12-31 16:01:00.000 | 7.333333333333333 |
|
d2 | 2022-01-01 00:00:00.000 | 2022-01-01 00:01:00.000 | 246.000000000000000 |
|
||||||
d28 | 2021-12-31 16:01:00.000 | 2021-12-31 16:02:00.000 | 8.000000000000000 |
|
d2 | 2022-01-01 00:01:00.000 | 2022-01-01 00:02:00.000 | 240.833333333333343 |
|
||||||
d28 | 2021-12-31 16:02:00.000 | 2021-12-31 16:03:00.000 | 11.000000000000000 |
|
d2 | 2022-01-01 00:02:00.000 | 2022-01-01 00:03:00.000 | 243.833333333333343 |
|
||||||
d28 | 2021-12-31 16:03:00.000 | 2021-12-31 16:04:00.000 | 6.666666666666667 |
|
d2 | 2022-01-01 00:03:00.000 | 2022-01-01 00:04:00.000 | 241.333333333333343 |
|
||||||
d28 | 2021-12-31 16:04:00.000 | 2021-12-31 16:05:00.000 | 10.000000000000000 |
|
d2 | 2022-01-01 00:04:00.000 | 2022-01-01 00:05:00.000 | 244.166666666666657 |
|
||||||
Query OK, 5 row(s) in set (0.016812s)
|
Query OK, 5 row(s) in set (0.016812s)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -342,53 +343,65 @@ SLIMIT 2;
|
||||||
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2022-01-01T00:05:00+08:00` 的数据;数据首先按照子表名 `tbname` 进行数据切分,再按照每 1 分钟的时间窗口进行切分,如果窗口内的数据出现缺失,则使用使用前一个非 NULL 值填充数据;最后,仅取前 2 个分片的数据作为结果。查询结果如下:
|
上面的 SQL,查询超级表 `meters` 中,时间戳大于等于 `2022-01-01T00:00:00+08:00`,且时间戳小于 `2022-01-01T00:05:00+08:00` 的数据;数据首先按照子表名 `tbname` 进行数据切分,再按照每 1 分钟的时间窗口进行切分,如果窗口内的数据出现缺失,则使用使用前一个非 NULL 值填充数据;最后,仅取前 2 个分片的数据作为结果。查询结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
tbname | _wstart | _wend | avg(voltage) |
|
tbname | _wstart | _wend | avg(voltage) |
|
||||||
=================================================================================================================
|
=======================================================================================
|
||||||
d40 | 2021-12-31 16:00:00.000 | 2021-12-31 16:01:00.000 | 5.666666666666667 |
|
d2 | 2022-01-01 00:00:00.000 | 2022-01-01 00:01:00.000 | 246.000000000000000 |
|
||||||
d40 | 2021-12-31 16:01:00.000 | 2021-12-31 16:02:00.000 | 5.000000000000000 |
|
d2 | 2022-01-01 00:01:00.000 | 2022-01-01 00:02:00.000 | 240.833333333333343 |
|
||||||
d40 | 2021-12-31 16:02:00.000 | 2021-12-31 16:03:00.000 | 9.666666666666666 |
|
d2 | 2022-01-01 00:02:00.000 | 2022-01-01 00:03:00.000 | 243.833333333333343 |
|
||||||
d40 | 2021-12-31 16:03:00.000 | 2021-12-31 16:04:00.000 | 10.333333333333334 |
|
d2 | 2022-01-01 00:03:00.000 | 2022-01-01 00:04:00.000 | 241.333333333333343 |
|
||||||
d40 | 2021-12-31 16:04:00.000 | 2021-12-31 16:05:00.000 | 13.000000000000000 |
|
d2 | 2022-01-01 00:04:00.000 | 2022-01-01 00:05:00.000 | 244.166666666666657 |
|
||||||
d41 | 2021-12-31 16:00:00.000 | 2021-12-31 16:01:00.000 | 5.666666666666667 |
|
d26 | 2022-01-01 00:00:00.000 | 2022-01-01 00:01:00.000 | 246.000000000000000 |
|
||||||
d41 | 2021-12-31 16:01:00.000 | 2021-12-31 16:02:00.000 | 9.333333333333334 |
|
d26 | 2022-01-01 00:01:00.000 | 2022-01-01 00:02:00.000 | 240.833333333333343 |
|
||||||
d41 | 2021-12-31 16:02:00.000 | 2021-12-31 16:03:00.000 | 11.000000000000000 |
|
d26 | 2022-01-01 00:02:00.000 | 2022-01-01 00:03:00.000 | 243.833333333333343 |
|
||||||
d41 | 2021-12-31 16:03:00.000 | 2021-12-31 16:04:00.000 | 7.666666666666667 |
|
d26 | 2022-01-01 00:03:00.000 | 2022-01-01 00:04:00.000 | 241.333333333333343 |
|
||||||
d41 | 2021-12-31 16:04:00.000 | 2021-12-31 16:05:00.000 | 10.000000000000000 |
|
d26 | 2022-01-01 00:04:00.000 | 2022-01-01 00:05:00.000 | 244.166666666666657 |
|
||||||
Query OK, 10 row(s) in set (0.022866s)
|
Query OK, 10 row(s) in set (0.022866s)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 状态窗口
|
### 状态窗口
|
||||||
|
|
||||||
使用整数(布尔值)或字符串来标识产生记录时候设备的状态量。产生的记录如果具有相同的状态量数值则归属于同一个状态窗口,数值改变后该窗口关闭。TDengine 还支持将 CASE 表达式用在状态量,可以表达某个状态的开始是由满足某个条件而触发,这个状态的结束是由另外一个条件满足而触发的语义。以智能电表为例,电压正常范围是 205V 到 235V,那么可以通过监控电压来判断电路是否正常。
|
使用整数(布尔值)或字符串来标识产生记录时候设备的状态量。产生的记录如果具有相同的状态量数值则归属于同一个状态窗口,数值改变后该窗口关闭。TDengine 还支持将 CASE 表达式用在状态量,可以表达某个状态的开始是由满足某个条件而触发,这个状态的结束是由另外一个条件满足而触发的语义。以智能电表为例,电压正常范围是 225V 到 235V,那么可以通过监控电压来判断电路是否正常。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT tbname, _wstart, _wend,_wduration, CASE WHEN voltage >= 205 and voltage <= 235 THEN 1 ELSE 0 END status
|
SELECT tbname, _wstart, _wend,_wduration, CASE WHEN voltage >= 225 and voltage <= 235 THEN 1 ELSE 0 END status
|
||||||
FROM meters
|
FROM meters
|
||||||
WHERE ts >= "2022-01-01T00:00:00+08:00"
|
WHERE ts >= "2022-01-01T00:00:00+08:00"
|
||||||
AND ts < "2022-01-01T00:05:00+08:00"
|
AND ts < "2022-01-01T00:05:00+08:00"
|
||||||
PARTITION BY tbname
|
PARTITION BY tbname
|
||||||
STATE_WINDOW(
|
STATE_WINDOW(
|
||||||
CASE WHEN voltage >= 205 and voltage <= 235 THEN 1 ELSE 0 END
|
CASE WHEN voltage >= 225 and voltage <= 235 THEN 1 ELSE 0 END
|
||||||
)
|
)
|
||||||
SLIMIT 10;
|
SLIMIT 2;
|
||||||
```
|
```
|
||||||
|
|
||||||
以上 SQL,查询超级表 meters 中,时间戳大于等于 2022-01-01T00:00:00+08:00,且时间戳小于 2022-01-01T00:05:00+08:00的数据;数据首先按照子表名 tbname 进行数据切分;根据电压是否在正常范围内进行状态窗口的划分;最后,取前 10 个分片的数据作为结果。查询结果如下:
|
以上 SQL,查询超级表 meters 中,时间戳大于等于 2022-01-01T00:00:00+08:00,且时间戳小于 2022-01-01T00:05:00+08:00的数据;数据首先按照子表名 tbname 进行数据切分;根据电压是否在正常范围内进行状态窗口的划分;最后,取前 2 个分片的数据作为结果。查询结果如下:(由于数据是随机生成,结果集包含的数据条数会有不同)
|
||||||
|
|
||||||
```text
|
```text
|
||||||
tbname | _wstart | _wend | _wduration | status |
|
tbname | _wstart | _wend | _wduration | status |
|
||||||
=====================================================================================================================================
|
===============================================================================================
|
||||||
d76 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:00:00.000 | 2022-01-01 00:01:20.000 | 80000 | 0 |
|
||||||
d47 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:01:30.000 | 2022-01-01 00:01:30.000 | 0 | 1 |
|
||||||
d37 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:01:40.000 | 2022-01-01 00:01:40.000 | 0 | 0 |
|
||||||
d87 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:01:50.000 | 2022-01-01 00:01:50.000 | 0 | 1 |
|
||||||
d64 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:02:00.000 | 2022-01-01 00:02:20.000 | 20000 | 0 |
|
||||||
d35 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:02:30.000 | 2022-01-01 00:02:30.000 | 0 | 1 |
|
||||||
d83 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:02:40.000 | 2022-01-01 00:03:00.000 | 20000 | 0 |
|
||||||
d51 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:03:10.000 | 2022-01-01 00:03:10.000 | 0 | 1 |
|
||||||
d63 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:03:20.000 | 2022-01-01 00:03:40.000 | 20000 | 0 |
|
||||||
d0 | 2021-12-31 16:00:00.000 | 2021-12-31 16:04:50.000 | 290000 | 0 |
|
d2 | 2022-01-01 00:03:50.000 | 2022-01-01 00:03:50.000 | 0 | 1 |
|
||||||
Query OK, 10 row(s) in set (0.040495s)
|
d2 | 2022-01-01 00:04:00.000 | 2022-01-01 00:04:50.000 | 50000 | 0 |
|
||||||
|
d26 | 2022-01-01 00:00:00.000 | 2022-01-01 00:01:20.000 | 80000 | 0 |
|
||||||
|
d26 | 2022-01-01 00:01:30.000 | 2022-01-01 00:01:30.000 | 0 | 1 |
|
||||||
|
d26 | 2022-01-01 00:01:40.000 | 2022-01-01 00:01:40.000 | 0 | 0 |
|
||||||
|
d26 | 2022-01-01 00:01:50.000 | 2022-01-01 00:01:50.000 | 0 | 1 |
|
||||||
|
d26 | 2022-01-01 00:02:00.000 | 2022-01-01 00:02:20.000 | 20000 | 0 |
|
||||||
|
d26 | 2022-01-01 00:02:30.000 | 2022-01-01 00:02:30.000 | 0 | 1 |
|
||||||
|
d26 | 2022-01-01 00:02:40.000 | 2022-01-01 00:03:00.000 | 20000 | 0 |
|
||||||
|
d26 | 2022-01-01 00:03:10.000 | 2022-01-01 00:03:10.000 | 0 | 1 |
|
||||||
|
d26 | 2022-01-01 00:03:20.000 | 2022-01-01 00:03:40.000 | 20000 | 0 |
|
||||||
|
d26 | 2022-01-01 00:03:50.000 | 2022-01-01 00:03:50.000 | 0 | 1 |
|
||||||
|
d26 | 2022-01-01 00:04:00.000 | 2022-01-01 00:04:50.000 | 50000 | 0 |
|
||||||
|
Query OK, 22 row(s) in set (0.153403s)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 会话窗口
|
### 会话窗口
|
||||||
|
@ -417,18 +430,18 @@ SLIMIT 10;
|
||||||
|
|
||||||
上面的 SQL,查询超级表 meters 中,时间戳大于等于 2022-01-01T00:00:00+08:00,且时间戳小于 2022-01-01T00:10:00+08:00的数据;数据先按照子表名 tbname 进行数据切分,再根据 10 分钟的会话窗口进行切分;最后,取前 10 个分片的数据作为结果,返回子表名、窗口开始时间、窗口结束时间、窗口宽度、窗口内数据条数。查询结果如下:
|
上面的 SQL,查询超级表 meters 中,时间戳大于等于 2022-01-01T00:00:00+08:00,且时间戳小于 2022-01-01T00:10:00+08:00的数据;数据先按照子表名 tbname 进行数据切分,再根据 10 分钟的会话窗口进行切分;最后,取前 10 个分片的数据作为结果,返回子表名、窗口开始时间、窗口结束时间、窗口宽度、窗口内数据条数。查询结果如下:
|
||||||
```text
|
```text
|
||||||
tbname | _wstart | _wend | _wduration | count(*) |
|
tbname | _wstart | _wend | _wduration | count(*) |
|
||||||
=====================================================================================================================================
|
===============================================================================================
|
||||||
d76 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d2 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
d47 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d26 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
d37 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d52 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
d87 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d64 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
d64 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d76 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
d35 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d28 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
d83 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d4 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
d51 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d88 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
d63 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d77 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
d0 | 2021-12-31 16:00:00.000 | 2021-12-31 16:09:50.000 | 590000 | 60 |
|
d54 | 2022-01-01 00:00:00.000 | 2022-01-01 00:09:50.000 | 590000 | 60 |
|
||||||
Query OK, 10 row(s) in set (0.043489s)
|
Query OK, 10 row(s) in set (0.043489s)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -458,26 +471,26 @@ FROM meters
|
||||||
WHERE ts >= "2022-01-01T00:00:00+08:00"
|
WHERE ts >= "2022-01-01T00:00:00+08:00"
|
||||||
AND ts < "2022-01-01T00:10:00+08:00"
|
AND ts < "2022-01-01T00:10:00+08:00"
|
||||||
PARTITION BY tbname
|
PARTITION BY tbname
|
||||||
EVENT_WINDOW START WITH voltage >= 10 END WITH voltage < 20
|
EVENT_WINDOW START WITH voltage >= 225 END WITH voltage < 235
|
||||||
LIMIT 10;
|
LIMIT 5;
|
||||||
```
|
```
|
||||||
|
|
||||||
上面的 SQL,查询超级表meters中,时间戳大于等于2022-01-01T00:00:00+08:00,且时间戳小于2022-01-01T00:10:00+08:00的数据;数据先按照子表名tbname进行数据切分,再根据事件窗口条件:电压大于等于 10V,且小于 20V 进行切分;最后,取前 10 行的数据作为结果,返回子表名、窗口开始时间、窗口结束时间、窗口宽度、窗口内数据条数。查询结果如下:
|
上面的 SQL,查询超级表meters中,时间戳大于等于2022-01-01T00:00:00+08:00,且时间戳小于2022-01-01T00:10:00+08:00的数据;数据先按照子表名tbname进行数据切分,再根据事件窗口条件:电压大于等于 225V,且小于 235V 进行切分;最后,取每个分片的前 5 行的数据作为结果,返回子表名、窗口开始时间、窗口结束时间、窗口宽度、窗口内数据条数。查询结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
tbname | _wstart | _wend | _wduration | count(*) |
|
tbname | _wstart | _wend | _wduration | count(*) |
|
||||||
=====================================================================================================================================
|
==============================================================================================
|
||||||
d0 | 2021-12-31 16:00:00.000 | 2021-12-31 16:00:00.000 | 0 | 1 |
|
d0 | 2022-01-01 00:00:00.000 | 2022-01-01 00:01:30.000 | 90000 | 10 |
|
||||||
d0 | 2021-12-31 16:00:30.000 | 2021-12-31 16:00:30.000 | 0 | 1 |
|
d0 | 2022-01-01 00:01:40.000 | 2022-01-01 00:02:30.000 | 50000 | 6 |
|
||||||
d0 | 2021-12-31 16:00:40.000 | 2021-12-31 16:00:40.000 | 0 | 1 |
|
d0 | 2022-01-01 00:02:40.000 | 2022-01-01 00:03:10.000 | 30000 | 4 |
|
||||||
d0 | 2021-12-31 16:01:20.000 | 2021-12-31 16:01:20.000 | 0 | 1 |
|
d0 | 2022-01-01 00:03:20.000 | 2022-01-01 00:07:10.000 | 230000 | 24 |
|
||||||
d0 | 2021-12-31 16:02:20.000 | 2021-12-31 16:02:20.000 | 0 | 1 |
|
d0 | 2022-01-01 00:07:20.000 | 2022-01-01 00:07:50.000 | 30000 | 4 |
|
||||||
d0 | 2021-12-31 16:02:30.000 | 2021-12-31 16:02:30.000 | 0 | 1 |
|
d1 | 2022-01-01 00:00:00.000 | 2022-01-01 00:01:30.000 | 90000 | 10 |
|
||||||
d0 | 2021-12-31 16:03:10.000 | 2021-12-31 16:03:10.000 | 0 | 1 |
|
d1 | 2022-01-01 00:01:40.000 | 2022-01-01 00:02:30.000 | 50000 | 6 |
|
||||||
d0 | 2021-12-31 16:03:30.000 | 2021-12-31 16:03:30.000 | 0 | 1 |
|
d1 | 2022-01-01 00:02:40.000 | 2022-01-01 00:03:10.000 | 30000 | 4 |
|
||||||
d0 | 2021-12-31 16:03:40.000 | 2021-12-31 16:03:40.000 | 0 | 1 |
|
d1 | 2022-01-01 00:03:20.000 | 2022-01-01 00:07:10.000 | 230000 | 24 |
|
||||||
d0 | 2021-12-31 16:03:50.000 | 2021-12-31 16:03:50.000 | 0 | 1 |
|
……
|
||||||
Query OK, 10 row(s) in set (0.034127s)
|
Query OK, 500 row(s) in set (0.328557s)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 计数窗口
|
### 计数窗口
|
||||||
|
@ -492,17 +505,25 @@ sliding_val 是一个常量,表示窗口滑动的数量,类似于 interval
|
||||||
select _wstart, _wend, count(*)
|
select _wstart, _wend, count(*)
|
||||||
from meters
|
from meters
|
||||||
where ts >= "2022-01-01T00:00:00+08:00" and ts < "2022-01-01T00:30:00+08:00"
|
where ts >= "2022-01-01T00:00:00+08:00" and ts < "2022-01-01T00:30:00+08:00"
|
||||||
count_window(10);
|
count_window(1000);
|
||||||
```
|
```
|
||||||
|
|
||||||
上面的 SQL 查询超级表 meters 中时间戳大于等于 2022-01-01T00:00:00+08:00 且时间戳小于 2022-01-01T00:10:00+08:00 的数据。以每 10 条数据为一组,返回每组的开始时间、结束时间和分组条数。查询结果如下。
|
上面的 SQL 查询超级表 meters 中时间戳大于等于 2022-01-01T00:00:00+08:00 且时间戳小于 2022-01-01T00:10:00+08:00 的数据。以每 1000 条数据为一组,返回每组的开始时间、结束时间和分组条数。查询结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
_wstart | _wend |count(*)|
|
_wstart | _wend | count(*) |
|
||||||
===========================================================
|
=====================================================================
|
||||||
2021-12-31 16:00:00.000 | 2021-12-31 16:10:00.000 | 10 |
|
2022-01-01 00:00:00.000 | 2022-01-01 00:01:30.000 | 1000 |
|
||||||
2021-12-31 16:10:00.000 | 2021-12-31 16:20:00.000 | 10 |
|
2022-01-01 00:01:40.000 | 2022-01-01 00:03:10.000 | 1000 |
|
||||||
2021-12-31 16:20:00.000 | 2021-12-31 16:30:00.000 | 10 |
|
2022-01-01 00:03:20.000 | 2022-01-01 00:04:50.000 | 1000 |
|
||||||
|
2022-01-01 00:05:00.000 | 2022-01-01 00:06:30.000 | 1000 |
|
||||||
|
2022-01-01 00:06:40.000 | 2022-01-01 00:08:10.000 | 1000 |
|
||||||
|
2022-01-01 00:08:20.000 | 2022-01-01 00:09:50.000 | 1000 |
|
||||||
|
2022-01-01 00:10:00.000 | 2022-01-01 00:11:30.000 | 1000 |
|
||||||
|
2022-01-01 00:11:40.000 | 2022-01-01 00:13:10.000 | 1000 |
|
||||||
|
2022-01-01 00:13:20.000 | 2022-01-01 00:14:50.000 | 1000 |
|
||||||
|
2022-01-01 00:15:00.000 | 2022-01-01 00:16:30.000 | 1000 |
|
||||||
|
Query OK, 10 row(s) in set (0.062794s)
|
||||||
```
|
```
|
||||||
|
|
||||||
## 时序数据特有函数
|
## 时序数据特有函数
|
||||||
|
@ -563,14 +584,14 @@ UNION ALL
|
||||||
上面的 SQL,分别查询:子表 d1 的 1 条数据,子表 d11 的 2 条数据,子表 d21 的 3 条数据,并将结果合并。返回的结果如下:
|
上面的 SQL,分别查询:子表 d1 的 1 条数据,子表 d11 的 2 条数据,子表 d21 的 3 条数据,并将结果合并。返回的结果如下:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
tbname | ts | current | voltage | phase |
|
tbname | ts | current | voltage | phase |
|
||||||
=================================================================================================
|
====================================================================================
|
||||||
d11 | 2020-09-13 12:26:40.000 | 1.0260611 | 6 | 0.3620200 |
|
d11 | 2020-09-13 20:26:40.000 | 11.5680809 | 247 | 146.5000000 |
|
||||||
d11 | 2020-09-13 12:26:50.000 | 2.9544230 | 8 | 1.0048079 |
|
d11 | 2020-09-13 20:26:50.000 | 14.2392311 | 234 | 148.0000000 |
|
||||||
d21 | 2020-09-13 12:26:40.000 | 1.0260611 | 2 | 0.3520200 |
|
d1 | 2020-09-13 20:26:40.000 | 11.5680809 | 247 | 146.5000000 |
|
||||||
d21 | 2020-09-13 12:26:50.000 | 2.9544230 | 2 | 0.9948080 |
|
d21 | 2020-09-13 20:26:40.000 | 11.5680809 | 247 | 146.5000000 |
|
||||||
d21 | 2020-09-13 12:27:00.000 | -0.0000430 | 12 | 0.0099860 |
|
d21 | 2020-09-13 20:26:50.000 | 14.2392311 | 234 | 148.0000000 |
|
||||||
d1 | 2020-09-13 12:26:40.000 | 1.0260611 | 10 | 0.3520200 |
|
d21 | 2020-09-13 20:27:00.000 | 10.0999422 | 251 | 146.0000000 |
|
||||||
Query OK, 6 row(s) in set (0.006438s)
|
Query OK, 6 row(s) in set (0.006438s)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -54,10 +54,10 @@ TDengine 利用这些日志文件实现故障前的状态恢复。在写入 WAL
|
||||||
|
|
||||||
数据库参数 wal_level 和 wal_fsync_period 共同决定了 WAL 的保存行为。。
|
数据库参数 wal_level 和 wal_fsync_period 共同决定了 WAL 的保存行为。。
|
||||||
- wal_level:此参数控制 WAL 的保存级别。级别 1 表示仅将数据写入 WAL,但不立即执行 fsync 函数;级别 2 则表示在写入 WAL 的同时执行 fsync 函数。默认情况下,wal_level 设为 1。虽然执行 fsync 函数可以提高数据的持久性,但相应地也会降低写入性能。
|
- wal_level:此参数控制 WAL 的保存级别。级别 1 表示仅将数据写入 WAL,但不立即执行 fsync 函数;级别 2 则表示在写入 WAL 的同时执行 fsync 函数。默认情况下,wal_level 设为 1。虽然执行 fsync 函数可以提高数据的持久性,但相应地也会降低写入性能。
|
||||||
- wal_fsync_period:当 wal_level 设置为 1 时,这个参数控制执行 fsync 的频率。设置为 0 表示每次写入后立即执行 fsync,这可以确保数据的安全性,但可能会牺牲一些性能。当设置为大于 0 的数值时,表示 fsync 周期,默认为 3000,范围是[1, 180000],单位毫秒。
|
- wal_fsync_period:当 wal_level 设置为 2 时,这个参数控制执行 fsync 的频率。设置为 0 表示每次写入后立即执行 fsync,这可以确保数据的安全性,但可能会牺牲一些性能。当设置为大于 0 的数值时,表示 fsync 周期,默认为 3000,范围是[1, 180000],单位毫秒。
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
CREATE DATABASE POWER WAL_LEVEL 1 WAL_FSYNC_PERIOD 3000;
|
CREATE DATABASE POWER WAL_LEVEL 2 WAL_FSYNC_PERIOD 3000;
|
||||||
```
|
```
|
||||||
|
|
||||||
在创建数据库时可以选择不同的参数类型,来选择性能优先或者可靠性优先。
|
在创建数据库时可以选择不同的参数类型,来选择性能优先或者可靠性优先。
|
||||||
|
|
|
@ -180,6 +180,7 @@ charset 的有效值是 UTF-8。
|
||||||
| tmrDebugFlag | 定时器模块的日志开关,取值范围同上 |
|
| tmrDebugFlag | 定时器模块的日志开关,取值范围同上 |
|
||||||
| uDebugFlag | 共用功能模块的日志开关,取值范围同上 |
|
| uDebugFlag | 共用功能模块的日志开关,取值范围同上 |
|
||||||
| rpcDebugFlag | rpc 模块的日志开关,取值范围同上 |
|
| rpcDebugFlag | rpc 模块的日志开关,取值范围同上 |
|
||||||
|
| cDebugFlag | 客户端模块的日志开关,取值范围同上 |
|
||||||
| jniDebugFlag | jni 模块的日志开关,取值范围同上 |
|
| jniDebugFlag | jni 模块的日志开关,取值范围同上 |
|
||||||
| qDebugFlag | query 模块的日志开关,取值范围同上 |
|
| qDebugFlag | query 模块的日志开关,取值范围同上 |
|
||||||
| dDebugFlag | dnode 模块的日志开关,取值范围同上,缺省值 135 |
|
| dDebugFlag | dnode 模块的日志开关,取值范围同上,缺省值 135 |
|
||||||
|
|
|
@ -35,6 +35,7 @@ TDengine 客户端驱动提供了应用编程所需要的全部 API,并且在
|
||||||
|smlAutoChildTableNameDelimiter | schemaless tag之间的连接符,连起来作为子表名,无缺省值 |
|
|smlAutoChildTableNameDelimiter | schemaless tag之间的连接符,连起来作为子表名,无缺省值 |
|
||||||
|smlTagName | schemaless tag 为空时默认的 tag 名字, 缺省值 "_tag_null" |
|
|smlTagName | schemaless tag 为空时默认的 tag 名字, 缺省值 "_tag_null" |
|
||||||
|smlTsDefaultName | schemaless自动建表的时间列名字通过该配置设置, 缺省值 "_ts" |
|
|smlTsDefaultName | schemaless自动建表的时间列名字通过该配置设置, 缺省值 "_ts" |
|
||||||
|
|smlDot2Underline | schemaless 把超级表名中的 dot 转成下划线 |
|
||||||
|enableCoreFile | crash 时是否生成 core 文件,0: 不生成, 1: 生成;缺省值:1 |
|
|enableCoreFile | crash 时是否生成 core 文件,0: 不生成, 1: 生成;缺省值:1 |
|
||||||
|enableScience | 是否开启科学计数法显示浮点数; 0: 不开始, 1: 开启;缺省值:1 |
|
|enableScience | 是否开启科学计数法显示浮点数; 0: 不开始, 1: 开启;缺省值:1 |
|
||||||
|compressMsgSize | 是否对 RPC 消息进行压缩; -1: 所有消息都不压缩; 0: 所有消息都压缩; N (N>0): 只有大于 N 个字节的消息才压缩; 缺省值 -1|
|
|compressMsgSize | 是否对 RPC 消息进行压缩; -1: 所有消息都不压缩; 0: 所有消息都压缩; N (N>0): 只有大于 N 个字节的消息才压缩; 缺省值 -1|
|
||||||
|
|
|
@ -38,7 +38,7 @@ int32_t vmGetAllVnodeListFromHash(SVnodeMgmt *pMgmt, int32_t *numOfVnodes, SVnod
|
||||||
SVnodeObj *pVnode = *ppVnode;
|
SVnodeObj *pVnode = *ppVnode;
|
||||||
if (pVnode && num < size) {
|
if (pVnode && num < size) {
|
||||||
int32_t refCount = atomic_add_fetch_32(&pVnode->refCount, 1);
|
int32_t refCount = atomic_add_fetch_32(&pVnode->refCount, 1);
|
||||||
// dTrace("vgId:%d, acquire vnode list, ref:%d", pVnode->vgId, refCount);
|
dTrace("vgId:%d,acquire vnode, vnode:%p, ref:%d", pVnode->vgId, pVnode, refCount);
|
||||||
pVnodes[num++] = (*ppVnode);
|
pVnodes[num++] = (*ppVnode);
|
||||||
pIter = taosHashIterate(pMgmt->hash, pIter);
|
pIter = taosHashIterate(pMgmt->hash, pIter);
|
||||||
} else {
|
} else {
|
||||||
|
@ -52,7 +52,7 @@ int32_t vmGetAllVnodeListFromHash(SVnodeMgmt *pMgmt, int32_t *numOfVnodes, SVnod
|
||||||
SVnodeObj *pVnode = *ppVnode;
|
SVnodeObj *pVnode = *ppVnode;
|
||||||
if (pVnode && num < size) {
|
if (pVnode && num < size) {
|
||||||
int32_t refCount = atomic_add_fetch_32(&pVnode->refCount, 1);
|
int32_t refCount = atomic_add_fetch_32(&pVnode->refCount, 1);
|
||||||
// dTrace("vgId:%d, acquire vnode list, ref:%d", pVnode->vgId, refCount);
|
dTrace("vgId:%d, acquire vnode, vnode:%p, ref:%d", pVnode->vgId, pVnode, refCount);
|
||||||
pVnodes[num++] = (*ppVnode);
|
pVnodes[num++] = (*ppVnode);
|
||||||
pIter = taosHashIterate(pMgmt->closedHash, pIter);
|
pIter = taosHashIterate(pMgmt->closedHash, pIter);
|
||||||
} else {
|
} else {
|
||||||
|
@ -84,7 +84,7 @@ int32_t vmGetVnodeListFromHash(SVnodeMgmt *pMgmt, int32_t *numOfVnodes, SVnodeOb
|
||||||
SVnodeObj *pVnode = *ppVnode;
|
SVnodeObj *pVnode = *ppVnode;
|
||||||
if (pVnode && num < size) {
|
if (pVnode && num < size) {
|
||||||
int32_t refCount = atomic_add_fetch_32(&pVnode->refCount, 1);
|
int32_t refCount = atomic_add_fetch_32(&pVnode->refCount, 1);
|
||||||
// dTrace("vgId:%d, acquire vnode list, ref:%d", pVnode->vgId, refCount);
|
dTrace("vgId:%d, acquire vnode, vnode:%p, ref:%d", pVnode->vgId, pVnode, refCount);
|
||||||
pVnodes[num++] = (*ppVnode);
|
pVnodes[num++] = (*ppVnode);
|
||||||
pIter = taosHashIterate(pMgmt->hash, pIter);
|
pIter = taosHashIterate(pMgmt->hash, pIter);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -103,7 +103,7 @@ SVnodeObj *vmAcquireVnodeImpl(SVnodeMgmt *pMgmt, int32_t vgId, bool strict) {
|
||||||
pVnode = NULL;
|
pVnode = NULL;
|
||||||
} else {
|
} else {
|
||||||
int32_t refCount = atomic_add_fetch_32(&pVnode->refCount, 1);
|
int32_t refCount = atomic_add_fetch_32(&pVnode->refCount, 1);
|
||||||
// dTrace("vgId:%d, acquire vnode, ref:%d", pVnode->vgId, refCount);
|
dTrace("vgId:%d, acquire vnode, vnode:%p, ref:%d", pVnode->vgId, pVnode, refCount);
|
||||||
}
|
}
|
||||||
(void)taosThreadRwlockUnlock(&pMgmt->lock);
|
(void)taosThreadRwlockUnlock(&pMgmt->lock);
|
||||||
|
|
||||||
|
@ -115,16 +115,24 @@ SVnodeObj *vmAcquireVnode(SVnodeMgmt *pMgmt, int32_t vgId) { return vmAcquireVno
|
||||||
void vmReleaseVnode(SVnodeMgmt *pMgmt, SVnodeObj *pVnode) {
|
void vmReleaseVnode(SVnodeMgmt *pMgmt, SVnodeObj *pVnode) {
|
||||||
if (pVnode == NULL) return;
|
if (pVnode == NULL) return;
|
||||||
|
|
||||||
(void)taosThreadRwlockRdlock(&pMgmt->lock);
|
//(void)taosThreadRwlockRdlock(&pMgmt->lock);
|
||||||
int32_t refCount = atomic_sub_fetch_32(&pVnode->refCount, 1);
|
int32_t refCount = atomic_sub_fetch_32(&pVnode->refCount, 1);
|
||||||
// dTrace("vgId:%d, release vnode, ref:%d", pVnode->vgId, refCount);
|
dTrace("vgId:%d, release vnode, vnode:%p, ref:%d", pVnode->vgId, pVnode, refCount);
|
||||||
(void)taosThreadRwlockUnlock(&pMgmt->lock);
|
//(void)taosThreadRwlockUnlock(&pMgmt->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmFreeVnodeObj(SVnodeObj **ppVnode) {
|
static void vmFreeVnodeObj(SVnodeObj **ppVnode) {
|
||||||
if (!ppVnode || !(*ppVnode)) return;
|
if (!ppVnode || !(*ppVnode)) return;
|
||||||
|
|
||||||
SVnodeObj *pVnode = *ppVnode;
|
SVnodeObj *pVnode = *ppVnode;
|
||||||
|
|
||||||
|
int32_t refCount = atomic_load_32(&pVnode->refCount);
|
||||||
|
while (refCount > 0) {
|
||||||
|
dWarn("vgId:%d, vnode is refenced, retry to free in 200ms, vnode:%p, ref:%d", pVnode->vgId, pVnode, refCount);
|
||||||
|
taosMsleep(200);
|
||||||
|
refCount = atomic_load_32(&pVnode->refCount);
|
||||||
|
}
|
||||||
|
|
||||||
taosMemoryFree(pVnode->path);
|
taosMemoryFree(pVnode->path);
|
||||||
taosMemoryFree(pVnode);
|
taosMemoryFree(pVnode);
|
||||||
ppVnode[0] = NULL;
|
ppVnode[0] = NULL;
|
||||||
|
|
Loading…
Reference in New Issue