docs.md 86.7 KB
Newer Older
H
Hui Li 已提交
1
# TDengine的运营与维护
X
Xiaxin Li 已提交
2

3
## <a class="anchor" id="planning"></a>容量规划
X
Xiaxin Li 已提交
4

5
使用 TDengine 来搭建一个物联网大数据平台,计算资源、存储资源需要根据业务场景进行规划。下面分别讨论系统运行所需要的内存、CPU 以及硬盘空间。
X
Xiaxin Li 已提交
6

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
7
### 内存需求
X
Xiaxin Li 已提交
8

9
每个 Database 可以创建固定数目的 vgroup,默认与 CPU 核数相同,可通过 maxVgroupsPerDb 配置;vgroup 中的每个副本会是一个 vnode;每个 vnode 会占用固定大小的内存(大小与数据库的配置参数 blocks 和 cache 有关);每个 Table 会占用与标签总长度有关的内存;此外,系统会有一些固定的内存开销。因此,每个 DB 需要的系统内存可通过如下公式计算:
X
Xiaxin Li 已提交
10 11

```
12
Database Memory Size = maxVgroupsPerDb * (blocks * cache + 10MB) + numOfTables * (tagSizePerTable + 0.5KB)
X
Xiaxin Li 已提交
13 14
```

15
示例:假设是 4 核机器,cache 是缺省大小 16M, blocks 是缺省值 6,并且一个 DB 中有 10 万张表,标签总长度是 256 字节,则这个 DB 总的内存需求为:4 \* (16 \* 6 + 10) + 100000 \* (0.25 + 0.5) / 1000 = 499M。
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
16

17
在实际的系统运维中,我们通常会更关心 TDengine 服务进程(taosd)会占用的内存量。
sangshuduo's avatar
sangshuduo 已提交
18

19 20 21 22 23
```
taosd 内存总量 = vnode 内存 + mnode 内存 + 查询内存
```

其中:
sangshuduo's avatar
sangshuduo 已提交
24

25 26 27
1. “vnode 内存”指的是集群中所有的 Database 存储分摊到当前 taosd 节点上所占用的内存资源。可以按上文“Database Memory Size”计算公式估算每个 DB 的内存占用量进行加总,再按集群中总共的 TDengine 节点数做平均(如果设置为多副本,则还需要乘以对应的副本倍数)。
2. “mnode 内存”指的是集群中管理节点所占用的资源。如果一个 taosd 节点上分布有 mnode 管理节点,则内存消耗还需要增加“0.2KB * 集群中数据表总数”。
3. “查询内存”指的是服务端处理查询请求时所需要占用的内存。单条查询语句至少会占用“0.2KB * 查询涉及的数据表总数”的内存量。
28

29
注意:以上内存估算方法,主要讲解了系统的“必须内存需求”,而不是“内存总数上限”。在实际运行的生产环境中,由于操作系统缓存、资源管理调度等方面的原因,内存规划应当在估算结果的基础上保留一定冗余,以维持系统状态和系统性能的稳定性。并且,生产环境通常会配置系统资源的监控工具,以便及时发现硬件资源的紧缺情况。
X
Xiaxin Li 已提交
30

31
最后,如果内存充裕,可以考虑加大 Blocks 的配置,这样更多数据将保存在内存里,提高查询速度。
X
Xiaxin Li 已提交
32

33 34 35 36 37
#### 客户端内存需求

客户端应用采用 taosc 客户端驱动连接服务端,会有内存需求的开销。

客户端的内存开销主要由写入过程中的 SQL 语句、表的元数据信息缓存、以及结构性开销构成。系统最大容纳的表数量为 N(每个通过超级表创建的表的 meta data 开销约 256 字节),最大并行写入线程数量 T,最大 SQL 语句长度 S(通常是 1 Mbytes)。由此可以进行客户端内存开销的估算(单位 MBytes):
sangshuduo's avatar
sangshuduo 已提交
38

39 40 41 42 43
```
M = (T * S * 3 + (N / 4096) + 100)
```

举例如下:用户最大并发写入线程数 100,子表数总数 10,000,000,那么客户端的内存最低要求是:
sangshuduo's avatar
sangshuduo 已提交
44

45 46 47 48 49 50
```
100 * 3 + (10000000 / 4096) + 100 = 2741 (MBytes)
```

即配置 3 GBytes 内存是最低要求。

51
### CPU 需求
X
Xiaxin Li 已提交
52

53
CPU 的需求取决于如下两方面:
X
Xiaxin Li 已提交
54

55 56
* **数据插入** TDengine 单核每秒能至少处理一万个插入请求。每个插入请求可以带多条记录,一次插入一条记录与插入 10 条记录,消耗的计算资源差别很小。因此每次插入,条数越大,插入效率越高。如果一个插入请求带 200 条以上记录,单核就能达到每秒插入 100 万条记录的速度。但对前端数据采集的要求越高,因为需要缓存记录,然后一批插入。
* **查询需求** TDengine 提供高效的查询,但是每个场景的查询差异很大,查询频次变化也很大,难以给出客观数字。需要用户针对自己的场景,写一些查询语句,才能确定。
X
Xiaxin Li 已提交
57

58
因此仅对数据插入而言,CPU 是可以估算出来的,但查询所耗的计算资源无法估算。在实际运营过程中,不建议 CPU 使用率超过 50%,超过后,需要增加新的节点,以获得更多计算资源。
X
Xiaxin Li 已提交
59

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
60
### 存储需求
X
Xiaxin Li 已提交
61

62
TDengine 相对于通用数据库,有超高的压缩比,在绝大多数场景下,TDengine 的压缩比不会低于 5 倍,有的场合,压缩比可达到 10 倍以上,取决于实际场景的数据特征。压缩前的原始数据大小可通过如下方式计算:
X
Xiaxin Li 已提交
63 64 65 66 67

```
Raw DataSize = numOfTables * rowSizePerTable * rowsPerTable
```

68
示例:1000 万台智能电表,每台电表每 15 分钟采集一次数据,每次采集的数据 128 字节,那么一年的原始数据量是:10000000 \* 128 \* 24 \* 60 / 15 \* 365 = 44.8512T。TDengine大概需要消耗 44.851 / 5 = 8.97024T 空间。
X
Xiaxin Li 已提交
69

70
用户可以通过参数 keep,设置数据在磁盘中的最大保存时长。为进一步减少存储成本,TDengine 还提供多级存储,最冷的数据可以存放在最廉价的存储介质上,应用的访问不用做任何调整,只是读取速度降低了。
X
Xiaxin Li 已提交
71

72
为提高速度,可以配置多块硬盘,这样可以并发写入或读取数据。需要提醒的是,TDengine 采取多副本的方式提供数据的高可靠,因此不再需要采用昂贵的磁盘阵列。
X
Xiaxin Li 已提交
73

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
74 75
### 物理机或虚拟机台数

76
根据上面的内存、CPU、存储的预估,就可以知道整个系统需要多少核、多少内存、多少存储空间。如果数据副本数不为 1,总需求量需要再乘以副本数。
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
77

78
因为 TDengine 具有很好的水平扩展能力,根据总量,再根据单个物理机或虚拟机的资源,就可以轻松决定需要购置多少台物理机或虚拟机了。
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
79

80
**立即计算 CPU、内存、存储,请参见:[资源估算方法](https://www.taosdata.com/config/config.html)。**
S
Shengliang Guan 已提交
81

82
## <a class="anchor" id="tolerance"></a>容错和灾备
X
Xiaxin Li 已提交
83 84 85

### 容错

86
TDengine 支持 **WAL** (Write Ahead Log)机制,实现数据的容错能力,保证数据的高可用。
X
Xiaxin Li 已提交
87

88
TDengine 接收到应用的请求数据包时,先将请求的原始数据包写入数据库日志文件,等数据成功写入数据库数据文件后,再删除相应的 WAL 。这样保证了 TDengine 能够在断电等因素导致的服务重启时从数据库日志文件中恢复数据,避免数据的丢失。
X
Xiaxin Li 已提交
89

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
90
涉及的系统配置参数有两个:
X
Xiaxin Li 已提交
91

92 93
- walLevel:WAL 级别,0:不写 WAL ; 1:写 wal, 但不执行 fsync; 2:写 wal, 而且执行 fsync。
- fsync:当 walLevel 设置为 2 时,执行 fsync 的周期。设置为 0,表示每次写入,立即执行 fsync。
X
Xiaxin Li 已提交
94

95
如果要100%的保证数据不丢失,需要将 walLevel 设置为 2,fsync 设置为0。这时写入速度将会下降。但如果应用侧启动的写数据的线程数达到一定的数量(超过 50),那么写入数据的性能也会很不错,只会比 fsync 设置为 3000 毫秒下降 30% 左右。
X
Xiaxin Li 已提交
96

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
97
### 灾备
X
Xiaxin Li 已提交
98

99
TDengine 的集群通过多个副本的机制,来提供系统的高可用性,实现灾备能力。
X
Xiaxin Li 已提交
100

101
TDengine 集群是由 mnode 负责管理的,为保证 mnode 的高可靠,可以配置多个 mnode 副本,副本数由系统配置参数 numOfMnodes 决定,为了支持高可靠,需要设置大于 1。为保证元数据的强一致性,mnode 副本之间通过同步方式进行数据复制,保证了元数据的强一致性。
X
Xiaxin Li 已提交
102

103
TDengine 集群中的时序数据的副本数是与数据库关联的,一个集群里可以有多个数据库,每个数据库可以配置不同的副本数。创建数据库时,通过参数 replica 指定副本数。为了支持高可靠,需要设置副本数大于1。
X
Xiaxin Li 已提交
104

105
TDengine 集群的节点数必须大于等于副本数,否则创建表时将报错。
X
Xiaxin Li 已提交
106

107
当 TDengine 集群中的节点部署在不同的物理机上,并设置多个副本数时,就实现了系统的高可靠性,无需再使用其他软件或工具。TDengine 企业版还可以将副本部署在不同机房,从而实现异地容灾。
X
Xiaxin Li 已提交
108

109
## <a class="anchor" id="config"></a>服务端配置
X
Xiaxin Li 已提交
110

111
TDengine 系统后台服务由 taosd 提供,可以在配置文件 taos.cfg 里修改配置参数,以满足不同场景的需求。配置文件的缺省位置在 /etc/taos 目录,可以通过 taosd 命令行执行参数-c指定配置文件目录。比如 taosd -c /home/user 来指定配置文件位于 /home/user 这个目录。
X
Xiaxin Li 已提交
112

113 114 115 116 117 118
另外可以使用 “-C” 显示当前服务器配置参数:

```
taosd -C
```

119 120
下面仅仅列出一些重要的配置参数,更多的参数请看配置文件里的说明。各个参数的详细介绍及作用请看前述章节,而且这些参数的缺省配置都是可以工作的,一般无需设置。**注意:配置文件参数修改后,需要重启*taosd*服务,或客户端应用才能生效。**

121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234
1. **firstEP**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | taosd 启动时,主动连接的集群中首个 dnode 的 end point |
   | 缺省值 | localhost:6030 |

2. **secondEP**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | taosd 启动时,如果 firstEp 连接不上,尝试连接集群中第二个 dnode 的 end point |
   | 缺省值 | 无 |

3. **fqdn**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 数据节点的 FQDN。如果习惯 IP 地址访问,可设置为该节点的 IP 地址。 |
   | 缺省值 | 缺省为操作系统配置的第一个 hostname。 |
   | 补充说明 | 这个参数值的长度需要控制在 96 个字符以内。 |

4. **serverPort**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | taosd 启动后,对外服务的端口号 |
   | 缺省值 | 6030 |
   | 补充说明 | RESTful 服务使用的端口号是在此基础上+11,即默认值为 6041(注意 2.4 及后续版本使用 taosAdapter 提供 RESTful 接口)。 |

5. **logDir**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 日志文件目录,客户端和服务器的运行日志将写入该目录 |
   | 缺省值 | /var/log/taos |

6. **scriptDir**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 仅服务端适用 |
   | 含义 |  |
   | 缺省值 |  |

7. **dataDir**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 数据文件目录,所有的数据文件都将写入该目录 |
   | 缺省值 | /var/lib/taos |

8. **arbitrator**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 系统中裁决器的 end point |
   | 缺省值 | 空 |

9. **numOfThreadsPerCore**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 每个 CPU 核生成的队列消费者线程数量 |
   | 缺省值 | 1.0 |

10. **ratioOfQueryThreads**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 设置查询线程的最大数量 |
   | 取值范围 | 0:表示只有 1 个查询线程 <br/> 1:表示最大和 CPU 核数相等的查询线程 <br/> 2:表示最大建立 2 倍 CPU 核数的查询线程。 |
   | 缺省值 | 1 |
   | 补充说明 | 该值可以为小数,即 0.5 表示最大建立 CPU 核数一半的查询线程。 |

11. **numOfMnodes**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 系统中管理节点个数 |
   | 缺省值 | 3 |

12. **vnodeBak**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 删除 vnode 时是否备份 vnode 目录 |
   | 取值范围 | 0:否,1:是 |
   | 缺省值 | 1 |

13. **telemetryRePorting**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 是否允许 TDengine 采集和上报基本使用信息 |
   | 取值范围 | 0:不允许 <br/> 1:允许 |
   | 缺省值 | 1 |

14. **balance**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 是否启动负载均衡 |
   | 取值范围 | 0,1 |
   | 缺省值 | 1 |

15. **balanceInterval**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 管理节点在正常运行状态下,检查负载均衡的时间间隔 |
   | 单位| 秒 |
   | 取值范围 | 1-30000 |
   | 缺省值 | 300 |

16. **role**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | dnode 的可选角色 |
   | 取值范围 | 0:any(既可作为 mnode,也可分配 vnode) <br/> 1:mgmt(只能作为 mnode,不能分配 vnode) <br/> 2:dnode(不能作为 mnode,只能分配 vnode) |
   | 缺省值 | 0 |

17. **maxTmerCtrl**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 定时器个数 |
   | 单位| 个 |
   | 取值范围 | 8-2048 |
   | 缺省值 | 512 |

18. **monitorInterval**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 监控数据库记录系统参数(CPU/内存)的时间间隔 |
   | 单位| 秒 |
   | 取值范围 | 1-600 |
   | 缺省值 | 30 |

19. **offlineThreshold**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | dnode 离线阈值,超过该时间将导致 dnode 离线 |
   | 单位| 秒 |
   | 取值范围 | 5-7200000 |
   | 缺省值 | 86400\*10(10 天) |

20. **rpcTimer**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | rpc 重试时长 |
   | 单位| 毫秒 |
   | 取值范围 | 100-3000 |
   | 缺省值 | 300 |

21. **rpcMaxTime**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | rpc 等待应答最大时长 |
   | 单位| 秒 |
   | 取值范围 | 100-7200 |
   | 缺省值 | 600 |

22. **statusInterval**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | dnode 向 mnode 报告状态间隔 |
   | 单位| 秒 |
   | 取值范围 | 1-10 |
   | 缺省值 | 1 |

23. **shellActivityTimer**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | shell 客户端向 mnode 发送心跳间隔 |
   | 单位| 秒 |
   | 取值范围 | 1-120 |
   | 缺省值 | 3 |

24. **tableMetaKeepTimer**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 表的元数据 cache 时长 |
   | 单位| 秒 |
   | 取值范围 | 1-8640000 |
   | 缺省值 | 7200 |

25. **minSlidingTime**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 最小滑动窗口时长 |
   | 单位| 毫秒 |
   | 取值范围 | 10-1000000 |
   | 缺省值 | 10 |
   | 补充说明 | 支持 us 补值后,这个值就是 1us 了。 |

26. **minIntervalTime**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 时间窗口最小值 |
   | 单位| 毫秒 |
   | 取值范围 | 1-1000000 |
   | 缺省值 | 10 |

27. **stream**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 是否启用连续查询(流计算功能) |
   | 取值范围 | 0:不允许 <br/> 1:允许 |
   | 缺省值 | 1 |

28. **maxStreamCompDelay**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 连续查询启动最大延迟 |
   | 单位| 毫秒 |
   | 取值范围 | 10-1000000000 |
   | 缺省值 | 20000 |
   | 补充说明 | 为避免多个 stream 同时执行占用太多系统资源,程序中对 stream 的执行时间人为增加了一些随机的延时。<br/>maxFirstStreamCompDelay 是 stream 第一次执行前最少要等待的时间。<br/>streamCompDelayRatio 是延迟时间的计算系数,它乘以查询的 interval 后为延迟时间基准。<br/>maxStreamCompDelay 是延迟时间基准的上限。<br/>实际延迟时间为一个不超过延迟时间基准的随机值。<br/>stream 某次计算失败后需要重试,retryStreamCompDelay 是重试的等待时间基准。<br/>实际重试等待时间为不超过等待时间基准的随机值。 |

29. **maxFirstStreamCompDelay**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 第一次连续查询启动最大延迟 |
   | 单位| 毫秒 |
   | 取值范围 | 10-1000000000 |
   | 缺省值 | 10000 |

30. **retryStreamCompDelay**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 连续查询重试等待间隔 |
   | 单位| 毫秒 |
   | 取值范围 | 10-1000000000 |
   | 缺省值 | 10 |

31. **streamCompDelayRatio**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 连续查询的延迟时间计算系数 |
   | 取值范围 | 0.1-0.9 |
   | 缺省值 | 0.1 |

32. **maxVgroupsPerDb**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 每个 DB 中 能够使用的最大 vnode 个数 |
   | 取值范围 | 0-8192 |
   | 缺省值 |  |

33. **maxTablesPerVnode**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 每个 vnode 中能够创建的最大表个数 |
   | 缺省值 | 1000000 |

34. **minTablesPerVnode**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 每个 vnode 中必须创建的最小表个数 |
   | 缺省值 | 1000 |

35. **tableIncStepPerVnode**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 每个 vnode 中超过最小表数后递增步长 |
   | 缺省值 | 1000 |

36. **cache**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 内存块的大小 |
   | 单位| MB |
   | 缺省值 | 16 |

37. **blocks**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 每个 vnode(tsdb)中有多少 cache 大小的内存块。因此一个 vnode 的用的内存大小粗略为(cache \* blocks) |
   | 缺省值 | 6 |

38. **days**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 数据文件存储数据的时间跨度 |
   | 单位| 天 |
   | 缺省值 | 10 |

39. **keep**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 数据保留的天数 |
   | 单位| 天 |
   | 缺省值 | 3650 |

40. **minRows**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 文件块中记录的最小条数 |
   | 缺省值 | 100 |

41. **maxRows**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 文件块中记录的最大条数 |
   | 缺省值 | 4096 |

42. **quorum**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 多副本环境下指令执行的确认数要求 |
   | 取值范围 | 1,2 |
   | 缺省值 | 1 |

43. **comp**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 文件压缩标志位 |
   | 取值范围 | 0:关闭,1:一阶段压缩,2:两阶段压缩 |
   | 缺省值 | 2 |

44. **walLevel**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | WAL 级别 |
   | 取值范围 | 1:写 wal, 但不执行 fsync <br/>  2:写 wal, 而且执行 fsync |
   | 缺省值 | 1 |

45. **fsync**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 当 wal 设置为 2 时,执行 fsync 的周期 |
   | 单位| 毫秒 |
   | 取值范围 | 最小为 0,表示每次写入,立即执行 fsync <br/> 最大为 180000(三分钟) |
   | 缺省值 | 3000 |

46. **replica**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 副本个数 |
   | 取值范围 | 1-3 |
   | 缺省值 | 1 |

47. **mqttHostName**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 仅服务端适用 |
   | 含义 | mqtt uri |
   | 缺省值 |  |
   | 补充说明 | mqtt://username:password@hostname:1883/taos/ |

48. **mqttPort**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 仅服务端适用 |
   | 含义 | mqtt client name |
   | 缺省值 |  |
   | 补充说明 | 1883 |

49. **mqttTopic**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 仅服务端适用 |
   | 含义 |  |
   | 缺省值 |  |
   | 补充说明 | /test |

50. **compressMsgSize**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 客户端与服务器之间进行消息通讯过程中,对通讯的消息进行压缩的阈值。如果要压缩消息,建议设置为 64330 字节,即大于 64330 字节的消息体才进行压缩。 |
   | 单位| bytes |
   | 取值范围 | `0 `表示对所有的消息均进行压缩 >0: 超过该值的消息才进行压缩 -1: 不压缩 |
   | 缺省值 | -1 |

51. **maxSQLLength**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | 单条 SQL 语句允许的最长限制 |
   | 单位| bytes |
   | 取值范围 | 65480-1048576 |
   | 缺省值 | 1048576 |

52. **maxNumOfOrderedRes**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 支持超级表时间排序允许的最多记录数限制 |
   | 缺省值 | 10 万 |

53. **timezone**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 时区 |
   | 缺省值 | 从系统中动态获取当前的时区设置 |

54. **locale**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 系统区位信息及编码格式 |
   | 缺省值 | 系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过 API 设置 |

55. **charset**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 字符集编码 |
   | 缺省值 | 系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过 API 设置 |

56. **maxShellConns**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 一个 dnode 容许的连接数 |
   | 取值范围 | 10-50000000 |
   | 缺省值 | 5000 |

57. **maxConnections**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 一个数据库连接所容许的 dnode 连接数 |
   | 取值范围 | 1-100000 |
   | 缺省值 | 5000 |
   | 补充说明 | 实际测试下来,如果默认没有配,选 50 个 worker thread 会产生 Network unavailable |

58. **minimalLogDirGB**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 当日志文件夹的磁盘大小小于该值时,停止写日志 |
   | 单位| GB |
   | 缺省值 | 0.1 |

59. **minimalTmpDirGB**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 当日志文件夹的磁盘大小小于该值时,停止写临时文件 |
   | 单位| GB |
   | 缺省值 | 0.1 |

60. **minimalDataDirGB**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 当日志文件夹的磁盘大小小于该值时,停止写时序数据 |
   | 单位| GB |
   | 缺省值 | 0.1 |

61. **mnodeEqualVnodeNum**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 一个 mnode 等同于 vnode 消耗的个数 |
   | 缺省值 | 4 |

62. **http**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 服务器内部的 http 服务开关。 |
   | 取值范围 | 0:关闭 http 服务, 1:激活 http 服务。 |
   | 缺省值 | 1 |

63. **mqtt**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 服务器内部的 mqtt 服务开关。 |
   | 取值范围 | 0:关闭 mqtt 服务, 1:激活 mqtt 服务。 |
   | 缺省值 | 0 |

64. **monitor**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 服务器内部的系统监控开关。监控主要负责收集物理节点的负载状况,包括 CPU、内存、硬盘、网络带宽、HTTP 请求量的监控记录,记录信息存储在`LOG`库中。 |
   | 取值范围 | 0:关闭监控服务, 1:激活监控服务。 |
   | 缺省值 | 0 |

65. **httpEnableRecordSql**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 内部使用,记录通过 RESTFul 接口,产生的 SQL 调用。taosAdapter 配置或有不同,请参考相应[文档](https://www.taosdata.com/cn/documentation/tools/adapter)。 |
   | 缺省值 | 0 |
   | 补充说明 | 生成的文件(httpnote.0/httpnote.1),与服务端日志所在目录相同。 |

66. **httpMaxThreads**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | RESTFul 接口的线程数。taosAdapter 配置或有不同,请参考相应[文档](https://www.taosdata.com/cn/documentation/tools/adapter)。 |
   | 缺省值 | 2 |

67. **telegrafUseFieldNum**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 |  |
   | 含义 |  |
   | 缺省值 |  |

68. **restfulRowLimit**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | RESTFul 接口单次返回的记录条数。taosAdapter 配置或有不同,请参考相应[文档](https://www.taosdata.com/cn/documentation/tools/adapter)。 |
   | 缺省值 | 10240 |
   | 补充说明 | 最大 10,000,000 |

69. **numOfLogLines**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 单个日志文件允许的最大行数。 |
   | 缺省值 | 10,000,000 |

70. **asyncLog**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 日志写入模式 |
   | 取值范围 | 0:同步、1:异步 |
   | 缺省值 | 1 |

71. **logKeepDays**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 日志文件的最长保存时间 |
   | 单位| 天 |
   | 缺省值 | 0 |
   | 补充说明 | 大于 0 时,日志文件会被重命名为 taosdlog.xxx,其中 xxx 为日志文件最后修改的时间戳。 |

72. **debugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 运行日志开关 |
   | 取值范围 | 131(输出错误和警告日志),135(输出错误、警告和调试日志),143(输出错误、警告、调试和跟踪日志) |
   | 缺省值 | 131 或 135(不同模块有不同的默认值) |

73. **mDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 管理模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 | 135 |

74. **dDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | dnode 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 | 135 |

75. **sDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | sync 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 | 135 |

76. **wDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | wal 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 | 135 |

77. **sdbDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | sdb 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 | 135 |

78. **rpcDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | rpc 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

79. **tmrDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 定时器模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

80. **cDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | client 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

81. **jniDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | jni 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

82. **odbcDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | odbc 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

83. **uDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 共用功能模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

84. **httpDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | http 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

85. **mqttDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | mqtt 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

86. **monitorDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 监控模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

87. **qDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 查询模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

88. **vDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | vnode 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

89. **tsdbDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | TSDB 模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

90. **cqDebugFlag**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 连续查询模块的日志开关 |
   | 取值范围 | 同上 |
   | 缺省值 |  |

91. **tscEnableRecordSql**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | 是否记录客户端 sql 语句到文件 |
   | 取值范围 | 0:否,1:是 |
   | 缺省值 | 0 |
   | 补充说明 | 生成的文件(tscnote-xxxx.0/tscnote-xxx.1,xxxx 是 pid),与客户端日志所在目录相同。 |

92. **enableCoreFile**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 是否开启服务 crash 时生成 core 文件 |
   | 取值范围 | 0:否,1:是 |
   | 缺省值 | 1 |
   | 补充说明 | 不同的启动方式,生成 core 文件的目录如下:1、systemctl start taosd 启动:生成的 core 在根目录下 <br/> 2、手动启动,就在 taosd 执行目录下。 |

93. **gitinfo**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 |  |
   | 取值范围 | 1 |
   | 缺省值 |  |

94. **gitinfoofInternal**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 |  |
   | 取值范围 | 2 |
   | 缺省值 |  |

95. **Buildinfo**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 |  |
   | 取值范围 | 3 |
   | 缺省值 |  |

96. **version**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 |  |
   | 取值范围 | 4 |
   | 缺省值 |  |

97. **maxBinaryDisplayWidth**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | Taos shell 中 binary 和 nchar 字段的显示宽度上限,超过此限制的部分将被隐藏 |
   | 取值范围 | 5 - |
   | 缺省值 | 30 |
   | 补充说明 | 实际上限按以下规则计算:如果字段值的长度大于 maxBinaryDisplayWidth,则显示上限为 **字段名长度****maxBinaryDisplayWidth** 的较大者。<br/>否则,上限为 **字段名长度****字段值长度** 的较大者。<br/>可在 shell 中通过命令 set max_binary_display_width nn 动态修改此选项 |

98. **queryBufferSize**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 为所有并发查询占用保留的内存大小。 |
   | 单位| MB |
   | 缺省值 |  |
   | 补充说明 | 计算规则可以根据实际应用可能的最大并发数和表的数字相乘,再乘 170 。<br/>(2.0.15 以前的版本中,此参数的单位是字节) |

99. **ratioOfQueryCores**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 设置查询线程的最大数量。 |
   | 缺省值 |  |
   | 补充说明 | 最小值 0 表示只有 1 个查询线程 <br/> 最大值 2 表示最大建立 2 倍 CPU 核数的查询线程。<br/>默认为 1,表示最大和 CPU 核数相等的查询线程。<br/>该值可以为小数,即 0.5 表示最大建立 CPU 核数一半的查询线程。 |

100. **update**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 允许更新已存在的数据行 |
   | 取值范围 | 0:不允许更新 <br/> 1:允许整行更新 <br/> 2:允许部分列更新。(2.1.7.0 版本开始此参数支持设为 2,在此之前取值只能是 [0, 1]) |
   | 缺省值 | 0 |
   | 补充说明 | 2.0.8.0 版本之前,不支持此参数。 |

101. **cacheLast**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 是否在内存中缓存子表的最近数据 |
   | 取值范围 | 0:关闭 <br/> 1:缓存子表最近一行数据 <br/> 2:缓存子表每一列的最近的非 NULL 值 <br/> 3:同时打开缓存最近行和列功能。(2.1.2.0 版本开始此参数支持 0 ~ 3 的取值范围,在此之前取值只能是 [0, 1]) |
   | 缺省值 | 0 |
   | 补充说明 | 2.1.2.0 版本之前、2.0.20.7 版本之前在 taos.cfg 文件中不支持此参数。 |

102. **numOfCommitThreads**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | Yes |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 设置写入线程的最大数量 |
   | 缺省值 |  |

103. **maxWildCardsLength**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | 设定 LIKE 算子的通配符字符串允许的最大长度 |
   | 单位| bytes |
   | 取值范围 | 0-16384 |
   | 缺省值 | 100 |
   | 补充说明 | 2.1.6.1 版本新增。 |

104. **compressColData**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 客户端与服务器之间进行消息通讯过程中,对服务器端查询结果进行列压缩的阈值。 |
   | 单位| bytes |
   | 取值范围 | 0: 对所有查询结果均进行压缩 >0: 查询结果中任意列大小超过该值的消息才进行压缩 -1: 不压缩 |
   | 缺省值 | -1 |
   | 补充说明 | 2.3.0.0 版本新增。 |

105. **tsdbMetaCompactRatio**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | tsdb meta 文件中冗余数据超过多少阈值,开启 meta 文件的压缩功能 |
   | 取值范围 | 0:不开启,[1-100]:冗余数据比例 |
   | 缺省值 | 0 |

106. **rpcForceTcp**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 服务端和客户端均适用 |
   | 含义 | 强制使用 TCP 传输 |
   | 取值范围 | 0: 不开启 1: 开启 |
   | 缺省值 | 0 |
   | 补充说明 | 在网络比较差的环境中,建议开启。<br/>2.0 版本新增。 |

107. **maxNumOfDistinctRes**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 允许返回的 distinct 结果最大行数 |
   | 取值范围 | 默认值为 10 万,最大值 1 亿 |
   | 缺省值 | 10 万 |
   | 补充说明 | 2.3 版本新增。 |

108. **clientMerge**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | 是否允许客户端对写入数据去重 |
   | 取值范围 | 0:不开启,1:开启 |
   | 缺省值 | 0 |
   | 补充说明 | 2.3 版本新增。 |

109. **httpDBNameMandatory**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 是否在 URL 中输入 数据库名称 |
   | 取值范围 | 0:不开启,1:开启 |
   | 缺省值 | 0 |
   | 补充说明 | 2.3 版本新增。 |

110. **maxRegexStringLen**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅客户端适用 |
   | 含义 | 正则表达式最大允许长度 |
   | 取值范围 | 默认值 128,最大长度 16384 |
   | 缺省值 | 128 |
   | 补充说明 | 2.3 版本新增。 |

1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288
111. **lossyColumns**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 配置要进行有损压缩的浮点数据类型 |
   | 取值范围 | float:只对float类型进行有损压缩<br/>double:只对double类型进行有损压缩<br/>float|double:float double都进行有损压缩  |
   | 缺省值 | 默认为空字符串,关闭有损压缩 |
   | 补充说明 | 2.4.0.10版本新增。|

112. **fPrecision**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 设置float类型浮点数压缩精度 |
   | 取值范围 | 0.1 ~ 0.00000001 |
   | 缺省值 | 0.00000001(1E-8)|
   | 补充说明 | 2.4.0.10版本新增。|

113. **dPrecision**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 设置double类型浮点数压缩精度 |
   | 取值范围 | 0.1 ~ 0.0000000000000001 |
   | 缺省值 | 0.0000000000000001(1E-16)|
   | 补充说明 | 2.4.0.10版本新增。|

114. **maxRange**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 要压缩数据可能的最大波动范围 |
   | 取值范围 | 无限制 |
   | 缺省值 | 自动预测 |
   | 补充说明 | 2.4.0.10版本新增。|

115. **Range**

   | 属性 | 说明 |
   |---|---|
   | 内部配置 | No |
   | 适用范围 | 仅服务端适用 |
   | 含义 | 要压缩数据可能的平均波动范围 |
   | 取值范围 | 无限制 |
   | 缺省值 | 自动预测 |
   | 补充说明 | 2.4.0.10版本新增。|
1289 1290

**注意:** 对于端口,TDengine会使用从serverPort起13个连续的TCP和UDP端口号,请务必在防火墙打开。因此如果是缺省配置,需要打开从6030到6042共13个端口,而且必须TCP和UDP都打开。(详细的端口情况请参见 [TDengine 2.0 端口说明](https://www.taosdata.com/cn/documentation/faq#port)
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1291

1292
不同应用场景的数据往往具有不同的数据特征,比如保留天数、副本数、采集频次、记录大小、采集点的数量、压缩等都可完全不同。为获得在存储上的最高效率,TDengine 提供如下存储相关的系统配置参数(既可以作为 create database 指令的参数,也可以写在 taos.cfg 配置文件中用来设定创建新数据库时所采用的默认值):
1293

1294 1295 1296 1297 1298
| **#** | **配置参数名称** | **单位** | **含义**                                                     | **取值范围**                                     | **缺省值** |
| ----- | ---------------- | -------- | ------------------------------------------------------------ | ------------------------------------------------ | ---------- |
| 1     | days             | 天       | 一个数据文件存储数据的时间跨度                               |                                                  | 10         |
| 2     | keep             | 天       | (可通过 alter database 修改<!-- REPLACE_OPEN_TO_ENTERPRISE__KEEP_PARAM_DESCRIPTION_IN_PARAM_LIST -->)数据库中数据保留的天数。                            | 3650       |
| 3     | cache            | MB       | 内存块的大小                                                 |                                                  | 16         |
1299
| 4     | blocks           |          | (可通过 alter database 修改)每个 VNODE(TSDB)中有多少个 cache 大小的内存块。因此一个 VNODE 使用的内存大小粗略为(cache * blocks)。                  |                                                  | 6          |
1300 1301 1302 1303
| 5     | quorum           |          | (可通过 alter database 修改)多副本环境下指令执行的确认数要求   | 1-2                                              | 1          |
| 6     | minRows          |          | 文件块中记录的最小条数                                       |                                                  | 100        |
| 7     | maxRows          |          | 文件块中记录的最大条数                                       |                                                  | 4096       |
| 8     | comp             |          | (可通过 alter database 修改)文件压缩标志位                                               | 0:关闭,1:一阶段压缩,2:两阶段压缩              | 2          |
1304 1305
| 9     | walLevel         |          | (作为 database 的参数时名为 wal;在 taos.cfg 中作为参数时需要写作 walLevel)WAL级别          | 1:写 WAL,但不执行 fsync;2:写 WAL, 而且执行 fsync | 1          |
| 10    | fsync            | 毫秒     | 当 wal 设置为 2 时,执行 fsync 的周期。设置为 0,表示每次写入,立即执行 fsync。                         |                                                  | 3000       |
1306
| 11    | replica          |          | (可通过 alter database 修改)副本个数                                                     | 1-3                                            | 1          |
1307
| 12    | precision        |          | 时间戳精度标识(2.1.2.0 版本之前、2.0.20.7 版本之前在 taos.cfg 文件中不支持此参数。)(从 2.1.5.0 版本开始,新增对纳秒时间精度的支持)           | ms 表示毫秒,us 表示微秒,ns 表示纳秒                 | ms         |
1308
| 13    | update           |          | 是否允许数据更新(从 2.1.7.0 版本开始此参数支持 0~2 的取值范围,在此之前取值只能是 [0, 1];而 2.0.8.0 之前的版本在 SQL 指令中不支持此参数。)                                                  | 0:不允许;1:允许更新整行;2:允许部分列更新。                                           | 0          |
1309
| 14    | cacheLast        |          | (可通过 alter database 修改)是否在内存中缓存子表的最近数据(从 2.1.2.0 版本开始此参数支持 0~3 的取值范围,在此之前取值只能是 [0, 1];而 2.0.11.0 之前的版本在 SQL 指令中不支持此参数。)(2.1.2.0 版本之前、2.0.20.7 版本之前在 taos.cfg 文件中不支持此参数。)                         | 0:关闭;1:缓存子表最近一行数据;2:缓存子表每一列的最近的非 NULL 值;3:同时打开缓存最近行和列功能               | 0          |
X
Xiaxin Li 已提交
1310

1311
对于一个应用场景,可能有多种数据特征的数据并存,最佳的设计是将具有相同数据特征的表放在一个库里,这样一个应用有多个库,而每个库可以配置不同的存储参数,从而保证系统有最优的性能。TDengine 允许应用在创建库时指定上述存储参数,如果指定,该参数就将覆盖对应的系统配置参数。举例,有下述 SQL:
X
Xiaxin Li 已提交
1312

1313 1314
```mysql
 CREATE DATABASE demo DAYS 10 CACHE 32 BLOCKS 8 REPLICA 3 UPDATE 1;
X
Xiaxin Li 已提交
1315 1316
```

1317
该SQL创建了一个库 demo, 每个数据文件存储 10 天数据,内存块为 32 兆字节,每个 VNODE 占用 8 个内存块,副本数为3,允许更新,而其他参数与系统配置完全一致。
X
Xiaxin Li 已提交
1318

1319 1320 1321 1322 1323 1324 1325 1326
一个数据库创建成功后,仅部分参数可以修改并实时生效,其余参数不能修改:

| **参数名**  | **能否修改** | **范围**                                                     | **修改语法示例**                      |
| ----------- | ------------ | ------------------------------------------------------------ | ------------------------------------- |
| name        |              |                                                              |                                       |
| create time |              |                                                              |                                       |
| ntables     |              |                                                              |                                       |
| vgroups     |              |                                                              |                                       |
1327
| replica     | **YES**      | 在线 dnode 数目为 1:1-1;2:1-2;>=3:1-3                         | ALTER DATABASE <dbname> REPLICA *n*   |
1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344
| quorum      | **YES**      | 1-2                                                          | ALTER DATABASE <dbname> QUORUM *n*    |
| days        |              |                                                              |                                       |
| keep        | **YES**      | days-365000                                                  | ALTER DATABASE <dbname> KEEP *n*      |
| cache       |              |                                                              |                                       |
| blocks      | **YES**      | 3-1000                                                       | ALTER DATABASE <dbname> BLOCKS *n*    |
| minrows     |              |                                                              |                                       |
| maxrows     |              |                                                              |                                       |
| wal         |              |                                                              |                                       |
| fsync       |              |                                                              |                                       |
| comp        | **YES**      | 0-2                                                          | ALTER DATABASE <dbname> COMP *n*      |
| precision   |              |                                                              |                                       |
| status      |              |                                                              |                                       |
| update      |              |                                                              |                                       |
| cachelast   | **YES**      | 0 \| 1 \| 2 \| 3                                             | ALTER DATABASE <dbname> CACHELAST *n* |

**说明:**在 2.1.3.0 版本之前,通过 ALTER DATABASE 语句修改这些参数后,需要重启服务器才能生效。

1345
TDengine 集群中加入一个新的 dnode 时,涉及集群相关的一些参数必须与已有集群的配置相同,否则不能成功加入到集群中。会进行校验的参数如下:
X
Xiaxin Li 已提交
1346

1347
- numOfMnodes:系统中管理节点个数。默认值:3。(2.0 版本从 2.0.20.11 开始、2.1 及以上版本从 2.1.6.0 开始,numOfMnodes 默认值改为 1。)
1348 1349 1350 1351 1352 1353
- mnodeEqualVnodeNum: 一个 mnode 等同于 vnode 消耗的个数。默认值:4。
- offlineThreshold: dnode 离线阈值,超过该时间将导致该 dnode 从集群中删除。单位为秒,默认值:86400*10(即10天)。
- statusInterval: dnode 向 mnode 报告状态时长。单位为秒,默认值:1。
- maxTablesPerVnode: 每个 vnode 中能够创建的最大表个数。默认值:1000000。
- maxVgroupsPerDb: 每个数据库中能够使用的最大 vgroup 个数。
- arbitrator: 系统中裁决器的 end point,缺省为空。
1354
- timezone、locale、charset 的配置见客户端配置。(2.0.20.0 及以上的版本里,集群中加入新节点已不要求 locale 和 charset 参数取值一致)
1355 1356 1357 1358
- balance:是否启用负载均衡。0:否,1:是。默认值:1。
- flowctrl:是否启用非阻塞流控。0:否,1:是。默认值:1。
- slaveQuery:是否启用 slave vnode 参与查询。0:否,1:是。默认值:1。
- adjustMaster:是否启用 vnode master 负载均衡。0:否,1:是。默认值:1。
X
Xiaxin Li 已提交
1359

1360
为方便调试,可通过 SQL 语句临时调整每个 dnode 的日志配置,系统重启后会失效:
S
Shengliang Guan 已提交
1361 1362 1363 1364 1365

```mysql
ALTER DNODE <dnode_id> <config>
```

1366
- dnode_id: 可以通过 SQL 语句"SHOW DNODES"命令获取
1367 1368
- config: 要调整的日志参数,在如下列表中取值
    > resetlog 截断旧日志文件,创建一个新日志文件
1369
    > debugFlag  < 131 | 135 | 143 > 设置 debugFlag 为 131、135 或者 143
S
Shengliang Guan 已提交
1370

S
Shengliang Guan 已提交
1371
例如:
sangshuduo's avatar
sangshuduo 已提交
1372

S
Shengliang Guan 已提交
1373 1374 1375
```
    alter dnode 1 debugFlag 135;
```
S
Shengliang Guan 已提交
1376

1377
## <a class="anchor" id="client"></a>客户端及应用驱动配置
X
Xiaxin Li 已提交
1378

1379
TDengine 系统的前台交互客户端应用程序为 taos,以及应用驱动,它与 taosd 共享同一个配置文件 taos.cfg。运行 taos 时,使用参数 -c 指定配置文件目录,如 taos -c /home/cfg,表示使用/home/cfg/目录下的 taos.cfg 配置文件中的参数,缺省目录是 /etc/taos。更多 taos 的使用方法请见帮助信息 `taos --help`。本节主要说明 taos 客户端应用在配置文件 taos.cfg 文件中使用到的参数。
1380 1381 1382 1383 1384 1385

**2.0.10.0 之后版本支持命令行以下参数显示当前客户端参数的配置**

```bash
taos -C  或  taos --dump-config
```
X
Xiaxin Li 已提交
1386

1387
客户端及应用驱动配置参数列表及解释
X
Xiaxin Li 已提交
1388

1389
- firstEp: taos 启动时,主动连接的集群中第一个 taosd 实例的 end point, 缺省值为 localhost:6030。
1390 1391 1392

- secondEp: taos 启动时,如果 firstEp 连不上,将尝试连接 secondEp。

1393
- locale:系统区位信息及编码格式。
X
Xiaxin Li 已提交
1394

1395
    默认值:系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过API设置。
1396

1397
    TDengine 为存储中文、日文、韩文等非 ASCII 编码的宽字符,提供一种专门的字段类型 nchar。写入 nchar 字段的数据将统一采用 UCS4-LE 格式进行编码并发送到服务器。需要注意的是,编码正确性是客户端来保证。因此,如果用户想要正常使用 nchar 字段来存储诸如中文、日文、韩文等非 ASCII 字符,需要正确设置客户端的编码格式。
H
haojun Liao 已提交
1398

1399
    客户端的输入的字符均采用操作系统当前默认的编码格式,在 Linux 系统上多为 UTF-8,部分中文系统编码则可能是 GB18030 或 GBK 等。在 docker 环境中默认的编码是 POSIX。在中文版 Windows 系统中,编码则是 CP936。客户端需要确保正确设置自己所使用的字符集,即客户端运行的操作系统当前编码字符集,才能保证 nchar 中的数据正确转换为 UCS4-LE 编码格式。
H
haojun Liao 已提交
1400

1401
    在 Linux 中 locale 的命名规则为: <语言>\_<地区>.<字符集编码> 如:zh_CN.UTF-8,zh 代表中文,CN 代表大陆地区,UTF-8 表示字符集。字符集编码为客户端正确解析本地字符串提供编码转换的说明。Linux 系统与 macOS 系统可以通过设置 locale 来确定系统的字符编码,由于 Windows 使用的 locale 中不是 POSIX 标准的 locale 格式,因此在 Windows 下需要采用另一个配置参数 charset 来指定字符编码。在 Linux 系统中也可以使用charset来指定字符编码。
H
haojun Liao 已提交
1402

1403
- charset:字符集编码。
H
haojun Liao 已提交
1404

1405
    默认值:系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过 API 设置。
1406

1407
    如果配置文件中不设置 charset,在 Linux 系统中,taos 在启动时候,自动读取系统当前的 locale 信息,并从 locale 信息中解析提取 charset 编码格式。如果自动读取 locale 信息失败,则尝试读取 charset 配置,如果读取 charset 配置也失败,则中断启动过程。
H
haojun Liao 已提交
1408

1409
    在 Linux 系统中,locale 信息包含了字符编码信息,因此正确设置了 Linux 系统 locale 以后可以不用再单独设置 charset。例如:
sangshuduo's avatar
sangshuduo 已提交
1410

B
Bo Xiao 已提交
1411
    ```
H
haojun Liao 已提交
1412
    locale zh_CN.UTF-8
B
Bo Xiao 已提交
1413
    ```
sangshuduo's avatar
sangshuduo 已提交
1414

1415
    在 Windows 系统中,无法从 locale 获取系统当前编码。如果无法从配置文件中读取字符串编码信息,taos 默认设置为字符编码为 CP936。其等效在配置文件中添加如下配置:
sangshuduo's avatar
sangshuduo 已提交
1416

B
Bo Xiao 已提交
1417
    ```
H
haojun Liao 已提交
1418
    charset CP936
B
Bo Xiao 已提交
1419
    ```
sangshuduo's avatar
sangshuduo 已提交
1420

B
Bo Xiao 已提交
1421
    如果需要调整字符编码,请查阅当前操作系统使用的编码,并在配置文件中正确设置。
H
haojun Liao 已提交
1422

1423
    在 Linux 系统中,如果用户同时设置了 locale 和字符集编码 charset,并且 locale 和 charset 的不一致,后设置的值将覆盖前面设置的值。
sangshuduo's avatar
sangshuduo 已提交
1424

B
Bo Xiao 已提交
1425
    ```
H
haojun Liao 已提交
1426 1427
    locale zh_CN.UTF-8
    charset GBK
B
Bo Xiao 已提交
1428
    ```
sangshuduo's avatar
sangshuduo 已提交
1429

1430
    则 charset 的有效值是 GBK。
sangshuduo's avatar
sangshuduo 已提交
1431

B
Bo Xiao 已提交
1432
    ```
H
haojun Liao 已提交
1433 1434
    charset GBK
    locale zh_CN.UTF-8
B
Bo Xiao 已提交
1435
    ```
sangshuduo's avatar
sangshuduo 已提交
1436

1437
    charset 的有效值是 UTF-8。
H
haojun Liao 已提交
1438

1439
    日志的配置参数,与 server 的配置参数完全一样。
H
haojun Liao 已提交
1440 1441 1442

- timezone

S
Shenpeng.Cui 已提交
1443
    默认值:动态获取当前客户端运行系统所在的时区。
sangshuduo's avatar
sangshuduo 已提交
1444

1445
    为应对多时区的数据写入和查询问题,TDengine 采用 Unix 时间戳(Unix Timestamp)来记录和存储时间戳。Unix 时间戳的特点决定了任一时刻不论在任何时区,产生的时间戳均一致。需要注意的是,Unix时间戳是在客户端完成转换和记录。为了确保客户端其他形式的时间转换为正确的 Unix 时间戳,需要设置正确的时区。
H
haojun Liao 已提交
1446

1447
    在Linux系统中,客户端会自动读取系统设置的时区信息。用户也可以采用多种方式在配置文件设置时区。例如:
sangshuduo's avatar
sangshuduo 已提交
1448

B
Bo Xiao 已提交
1449
    ```
H
haojun Liao 已提交
1450 1451 1452
    timezone UTC-8
    timezone GMT-8
    timezone Asia/Shanghai
B
Bo Xiao 已提交
1453
    ```
sangshuduo's avatar
sangshuduo 已提交
1454

1455
    均是合法的设置东八区时区的格式。但需注意,Windows 下并不支持 `timezone Asia/Shanghai` 这样的写法,而必须写成 `timezone UTC-8`。
H
haojun Liao 已提交
1456

1457
    时区的设置对于查询和写入SQL语句中非 Unix 时间戳的内容(时间戳字符串、关键词 now 的解析)产生影响。例如:
sangshuduo's avatar
sangshuduo 已提交
1458

1459
    ```sql
H
haojun Liao 已提交
1460
    SELECT count(*) FROM table_name WHERE TS<'2019-04-11 12:01:08';
B
Bo Xiao 已提交
1461
    ```
sangshuduo's avatar
sangshuduo 已提交
1462

1463
    在东八区,SQL 语句等效于
sangshuduo's avatar
sangshuduo 已提交
1464

1465
    ```sql
H
haojun Liao 已提交
1466
    SELECT count(*) FROM table_name WHERE TS<1554955268000;
B
Bo Xiao 已提交
1467
    ```
sangshuduo's avatar
sangshuduo 已提交
1468

1469
    在 UTC 时区,SQL 语句等效于
sangshuduo's avatar
sangshuduo 已提交
1470

1471
    ```sql
H
haojun Liao 已提交
1472
    SELECT count(*) FROM table_name WHERE TS<1554984068000;
B
Bo Xiao 已提交
1473
    ```
sangshuduo's avatar
sangshuduo 已提交
1474

1475
    为了避免使用字符串时间格式带来的不确定性,也可以直接使用 Unix 时间戳。此外,还可以在 SQL 语句中使用带有时区的时间戳字符串,例如:RFC3339 格式的时间戳字符串,2013-04-12T15:52:01.123+08:00 或者 ISO-8601 格式时间戳字符串 2013-04-12T15:52:01.123+0800。上述两个字符串转化为 Unix 时间戳不受系统所在时区的影响。
X
Xiaxin Li 已提交
1476

1477
    启动 taos 时,也可以从命令行指定一个 taosd 实例的 end point,否则就从 taos.cfg 读取。
1478

1479 1480
- maxBinaryDisplayWidth

1481
    Shell 中 binary 和 nchar 字段的显示宽度上限,超过此限制的部分将被隐藏。默认值:30。可在 taos shell 中通过命令 set max_binary_display_width nn 动态修改此选项。
1482

1483
## <a class="anchor" id="user"></a>用户管理
X
Xiaxin Li 已提交
1484

1485
系统管理员可以在 CLI 界面里添加、删除用户,也可以修改密码。CLI 里 SQL 语法如下:
X
Xiaxin Li 已提交
1486

1487
```sql
Z
zwllxs 已提交
1488
CREATE USER <user_name> PASS <'password'>;
X
Xiaxin Li 已提交
1489 1490
```

1491
创建用户,并指定用户名和密码,密码需要用单引号引起来,单引号为英文半角
X
Xiaxin Li 已提交
1492

1493
```sql
Y
Yiqing Liu 已提交
1494
DROP USER <user_name>;
X
Xiaxin Li 已提交
1495 1496
```

1497
删除用户,限 root 用户使用
X
Xiaxin Li 已提交
1498

1499
```sql
Z
zwllxs 已提交
1500
ALTER USER <user_name> PASS <'password'>;
X
Xiaxin Li 已提交
1501 1502
```

1503
修改用户密码,为避免被转换为小写,密码需要用单引号引用,单引号为英文半角
X
Xiaxin Li 已提交
1504

1505
```sql
1506
ALTER USER <user_name> PRIVILEGE <write|read>;
B
Bo Xiao 已提交
1507 1508
```

1509 1510 1511
修改用户权限为:write 或 read,不需要添加单引号

说明:系统内共有 super/write/read 三种权限级别,但目前不允许通过 alter 指令把 super 权限赋予用户。
B
Bo Xiao 已提交
1512

1513
```mysql
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1514
SHOW USERS;
X
Xiaxin Li 已提交
1515 1516
```

1517
显示所有用户
1518

1519
**注意:**SQL 语法中,< >表示需要用户输入的部分,但请不要输入< >本身。
X
Xiaxin Li 已提交
1520

1521
## <a class="anchor" id="import"></a>数据导入
X
Xiaxin Li 已提交
1522

1523
TDengine 提供多种方便的数据导入功能,一种按脚本文件导入,一种按数据文件导入,一种是 taosdump 工具导入本身导出的文件。
X
Xiaxin Li 已提交
1524 1525 1526

**按脚本文件导入**

1527
TDengine 的 shell 支持 source filename 命令,用于批量运行文件中的 SQL 语句。用户可将建库、建表、写数据等 SQL 命令写在同一个文件中,每条命令单独一行,在 shell 中运行 source 命令,即可按顺序批量运行文件中的SQL语句。以‘#’开头的 SQL 语句被认为是注释,shell 将自动忽略。
X
Xiaxin Li 已提交
1528 1529 1530

**按数据文件导入**

1531
TDengine 也支持在 shell 对已存在的表从 CSV 文件中进行数据导入。CSV 文件只属于一张表且 CSV 文件中的数据格式需与要导入表的结构相同,在导入的时候,其语法如下:
X
Xiaxin Li 已提交
1532 1533

```mysql
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1534
insert into tb1 file 'path/data.csv';
X
Xiaxin Li 已提交
1535
```
sangshuduo's avatar
sangshuduo 已提交
1536

1537
**注意:如果 CSV 文件首行存在描述信息,请手动删除后再导入。如某列为空,填NULL,无引号。**
X
Xiaxin Li 已提交
1538

1539
例如,现在存在一个子表 d1001, 其表结构如下:
X
Xiaxin Li 已提交
1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551

```mysql
taos> DESCRIBE d1001
             Field              |        Type        |   Length    |    Note    |
=================================================================================
 ts                             | TIMESTAMP          |           8 |            |
 current                        | FLOAT              |           4 |            |
 voltage                        | INT                |           4 |            |
 phase                          | FLOAT              |           4 |            |
 location                       | BINARY             |          64 | TAG        |
 groupid                        | INT                |           4 | TAG        |
```
sangshuduo's avatar
sangshuduo 已提交
1552

1553
要导入的 data.csv 的格式如下:
X
Xiaxin Li 已提交
1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565

```csv
'2018-10-04 06:38:05.000',10.30000,219,0.31000
'2018-10-05 06:38:15.000',12.60000,218,0.33000
'2018-10-06 06:38:16.800',13.30000,221,0.32000
'2018-10-07 06:38:05.000',13.30000,219,0.33000
'2018-10-08 06:38:05.000',14.30000,219,0.34000
'2018-10-09 06:38:05.000',15.30000,219,0.35000
'2018-10-10 06:38:05.000',16.30000,219,0.31000
'2018-10-11 06:38:05.000',17.30000,219,0.32000
'2018-10-12 06:38:05.000',18.30000,219,0.31000
```
sangshuduo's avatar
sangshuduo 已提交
1566

1567
那么可以用如下命令导入数据:
X
Xiaxin Li 已提交
1568

1569
```mysql
X
Xiaxin Li 已提交
1570 1571 1572 1573 1574 1575
taos> insert into d1001 file '~/data.csv';
Query OK, 9 row(s) affected (0.004763s)
```

**taosdump工具导入**

1576
TDengine 提供了方便的数据库导入导出工具 taosdump。用户可以将 taosdump 从一个系统导出的数据,导入到其他系统中。具体使用方法,请参见:[TDengine 数据备份工具: taosdump](/tools/taosdump)
X
Xiaxin Li 已提交
1577

1578
## <a class="anchor" id="export"></a>数据导出
X
Xiaxin Li 已提交
1579

1580
为方便数据导出,TDengine 提供了两种导出方式,分别是按表导出和用 taosdump 导出。
X
Xiaxin Li 已提交
1581 1582 1583

**按表导出CSV文件**

1584
如果用户需要导出一个表或一个 STable 中的数据,可在 taos shell 中运行:
X
Xiaxin Li 已提交
1585

1586
```mysql
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1587
select * from <tb_name> >> data.csv;
X
Xiaxin Li 已提交
1588 1589
```

1590
这样,表 tb_name 中的数据就会按照 CSV 格式导出到文件 data.csv 中。
X
Xiaxin Li 已提交
1591 1592 1593

**用taosdump导出数据**

1594 1595 1596
利用 taosdump,用户可以根据需要选择导出所有数据库、一个数据库或者数据库中的一张表,所有数据或一时间段的数据,甚至仅仅表的定义。

具体使用方法,请参见博客:[TDengine DUMP 工具使用指南](https://www.taosdata.com/blog/2020/03/09/1334.html)
X
Xiaxin Li 已提交
1597

1598
## <a class="anchor" id="status"></a>系统连接、任务查询管理
X
Xiaxin Li 已提交
1599

1600
系统管理员可以从 CLI 查询系统的连接、正在进行的查询、流式计算,并且可以关闭连接、停止正在进行的查询和流式计算。CLI 里 SQL 语法如下:
X
Xiaxin Li 已提交
1601

1602
```mysql
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1603
SHOW CONNECTIONS;
X
Xiaxin Li 已提交
1604 1605
```

1606
显示数据库的连接,其中一列显示 ip:port, 为连接的 IP 地址和端口号。
X
Xiaxin Li 已提交
1607

1608
```mysql
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1609
KILL CONNECTION <connection-id>;
X
Xiaxin Li 已提交
1610 1611
```

1612
强制关闭数据库连接,其中的 connection-id 是 SHOW CONNECTIONS 中显示的第一列的数字。
X
Xiaxin Li 已提交
1613

1614
```mysql
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1615
SHOW QUERIES;
X
Xiaxin Li 已提交
1616 1617
```

1618
显示数据查询,其中第一列显示的以冒号隔开的两个数字为 query-id,为发起该 query 应用连接的 connection-id 和查询次数。
X
Xiaxin Li 已提交
1619

1620
```mysql
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1621
KILL QUERY <query-id>;
X
Xiaxin Li 已提交
1622 1623 1624 1625
```

强制关闭数据查询,其中query-id是SHOW QUERIES中显示的 connection-id:query-no字串,如“105:2”,拷贝粘贴即可。

1626
```mysql
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1627
SHOW STREAMS;
X
Xiaxin Li 已提交
1628 1629
```

1630
显示流式计算,其中第一列显示的以冒号隔开的两个数字为 stream-id, 为启动该 stream 应用连接的 connection-id 和发起 stream 的次数。
X
Xiaxin Li 已提交
1631

1632
```mysql
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1633
KILL STREAM <stream-id>;
X
Xiaxin Li 已提交
1634 1635
```

1636
强制关闭流式计算,其中的中 stream-id 是 SHOW STREAMS 中显示的 connection-id:stream-no 字串,如 103:2,拷贝粘贴即可。
X
Xiaxin Li 已提交
1637

1638
## <a class="anchor" id="monitoring"></a>系统监控
X
Xiaxin Li 已提交
1639

1640
TDengine 启动后,会自动创建一个监测数据库 log,并自动将服务器的 CPU、内存、硬盘空间、带宽、请求数、磁盘读写速度、慢查询等信息定时写入该数据库。TDengine 还将重要的系统操作(比如登录、创建、删除数据库等)日志以及各种错误报警信息记录下来存放在 log 库里。系统管理员可以从 CLI 直接查看这个数据库,也可以在 WEB 通过图形化界面查看这些监测信息。
X
Xiaxin Li 已提交
1641

1642
这些监测信息的采集缺省是打开的,但可以修改配置文件里的选项 monitor 将其关闭或打开。
1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659

### TDinsight - 使用监控数据库 + Grafana 对 TDengine 进行监控的解决方案

从 2.3.3.0 开始,监控数据库将提供更多的监控项,您可以从 [TDinsight Grafana Dashboard](https://grafana.com/grafana/dashboards/15167) 了解如何使用 TDinsight 方案对 TDengine 进行监控。

我们提供了一个自动化脚本 `TDinsight.sh` 对TDinsight进行部署。

下载 `TDinsight.sh`

```bash
wget https://github.com/taosdata/grafanaplugin/raw/master/dashboards/TDinsight.sh
chmod +x TDinsight.sh
```

准备:

1. TDengine Server 信息:
sangshuduo's avatar
sangshuduo 已提交
1660 1661

    * TDengine RESTful 服务:对本地而言,可以是 `http://localhost:6041`,使用参数 `-a`。
1662 1663 1664
    * TDengine 用户名和密码,使用 `-u` `-p` 参数设置。

2. Grafana 告警通知
sangshuduo's avatar
sangshuduo 已提交
1665

1666
   * 使用已经存在的Grafana Notification Channel `uid`,参数 `-E`。该参数可以使用 `curl -u admin:admin localhost:3000/api/alert-notifications |jq` 来获取。
sangshuduo's avatar
sangshuduo 已提交
1667

1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685
        ```bash
        sudo ./TDinsight.sh -a http://localhost:6041 -u root -p taosdata -E <notifier uid>
        ```

   * 使用 TDengine 数据源插件内置的阿里云短信告警通知,使用 `-s` 启用之,并设置如下参数:
        1. 阿里云短信服务Key ID,参数 `-I`
        2. 阿里云短信服务Key Secret,参数 `K`
        3. 阿里云短信服务签名,参数 `-S`
        4. 短信通知模板号,参数 `-C`
        5. 短信通知模板输入参数,JSON格式,参数 `-T`,如 `{"alarm_level":"%s","time":"%s","name":"%s","content":"%s"}`
        6. 逗号分隔的通知手机列表,参数 `-B`

        ```bash
        sudo ./TDinsight.sh -a http://localhost:6041 -u root -p taosdata -s \
          -I XXXXXXX -K XXXXXXXX -S taosdata -C SMS_1111111 -B 18900000000 \
          -T '{"alarm_level":"%s","time":"%s","name":"%s","content":"%s"}'
        ```

sangshuduo's avatar
sangshuduo 已提交
1686
运行程序并重启 Grafana 服务,打开面板:`http://localhost:3000/d/tdinsight`
1687 1688

更多使用场景和限制请参考[TDinsight](https://github.com/taosdata/grafanaplugin/blob/master/dashboards/TDinsight.md) 文档。
X
Xiaxin Li 已提交
1689

1690 1691 1692 1693 1694 1695 1696 1697 1698
<a class="anchor" id="optimize"></a>
## 性能优化

因数据行 [update](https://www.taosdata.com/cn/documentation/faq#update)、表删除、数据过期等原因,TDengine 的磁盘存储文件有可能出现数据碎片,影响查询操作的性能表现。从 2.1.3.0 版本开始,新增 SQL 指令 COMPACT 来启动碎片重整过程:

```mysql
COMPACT VNODES IN (vg_id1, vg_id2, ...)
```

1699
COMPACT 命令对指定的一个或多个 VGroup 启动碎片重整,系统会通过任务队列尽快安排重整操作的具体执行。COMPACT 指令所需的 VGroup id,可以通过 `SHOW VGROUPS;` 指令的输出结果获取;而且在 `SHOW VGROUPS;` 中会有一个 compacting 列,值为 2 时表示对应的 VGroup 处于排队等待进行重整的状态,值为 1 时表示正在进行碎片重整,为 0 时则表示并没有处于重整状态(未要求进行重整或已经完成重整)。
1700 1701

需要注意的是,碎片重整操作会大幅消耗磁盘 I/O。因此在重整进行期间,有可能会影响节点的写入和查询性能,甚至在极端情况下导致短时间的阻写。
1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747
   
## <a class="anchor" id="status"></a>TSZ 压缩算法
   
 **TSZ 压缩算法简介**

 TSZ 压缩算法是 TDengine 为浮点数据类型提供更加丰富的压缩功能,可以实现浮点数的有损至无损全状态压缩,相比原来在 TDengine 中原有压缩算法,TSZ 压缩算法压缩选项更丰富,压缩率更高,即使切到无损状态下对浮点数压缩,压缩率也会比原来的压缩算法高一倍。

 **适合场景**

 TSZ 压缩算法压缩率比原来的要高,但压缩时间会更长,即开启 TSZ 压缩算法写入速度会有一些下降,通常情况下会有 20% 左右的下降。影响写入速度是因为需要更多的 CPU 计算,所以从原始数据到压缩好数据的交付时间变长,导致写入速度变慢。如果您的服务器 CPU 配置很高的话,这个影响会变小甚至没有。

 另外如果设备产生了大量的高精度浮点数,存储占用的空间非常庞大,但实际使用并不需要那么高的精度时,可以通过 TSZ 压缩的有损压缩功能,把精度压缩至指定的长度,节约存储空间。

 总结:采集到了大量浮点数,存储时占用空间过大或出有存储空间不足,需要超高压缩率的场景。

 **使用步骤**

 - 检查版本支持,2.4.0.10 及之后 TDengine 的版本都支持此功能

 - 配置选项开启功能,在 TDengine 的配置文件 taos.cfg 增加一行以下内容,打开 TSZ 功能

  ```TSZ
 lossyColumns     float|double
 ```

  - 根据自己需要配置其它选项,如果不配置都会按默认值处理。

  - 重启服务,配置生效。

  - 确认功能已开启,在服务启动过程中输出的信息如果有前面配置的内容,表明功能已生效:

   ```TSZ Test
 02/22 10:49:27.607990 00002933 UTL  lossyColumns     float|double
 ```

  **注意事项**

  - 确认版本是否支持

  - 除了服务器启动时的输出的配置成功信息外,不再会有其它的信息输出是使用的哪种压缩算法,可以通过配置前后数据库文件大小来比较效果

  - 如果浮点数类型列较少,看整体数据文件大小效果会不太明显

  - 此压缩产生的数据文件中浮点数据部分将不能被 2.4.0.10 以下的版本解析,即不向下兼容,使用时避免更换回旧版本,以免数据不能被读取出来。

  - 在使用过程中允许反复开启和关闭 TSZ 压缩选项的操作,前后两种压缩算法产生的数据都能正常读取。
1748

1749
## <a class="anchor" id="directories"></a>文件目录结构
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1750

1751
安装 TDengine 后,默认会在操作系统中生成下列目录或文件:
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1752

1753 1754
| **目录/文件**             | **说明**                                                     |
| ------------------------- | ------------------------------------------------------------ |
1755 1756 1757 1758 1759 1760 1761 1762
| /usr/local/taos/bin       | TDengine 可执行文件目录。其中的执行文件都会软链接到 /usr/bin 目录下。 |
| /usr/local/taos/connector | TDengine 各种连接器目录。                                     |
| /usr/local/taos/driver    | TDengine 动态链接库目录。会软链接到 /usr/lib 目录下。           |
| /usr/local/taos/examples  | TDengine 各种语言应用示例目录。                               |
| /usr/local/taos/include   | TDengine 对外提供的 C 语言接口的头文件。                        |
| /etc/taos/taos.cfg        | TDengine 默认[配置文件]                                       |
| /var/lib/taos             | TDengine 默认数据文件目录。可通过[配置文件]修改位置。         |
| /var/log/taos             | TDengine 默认日志文件目录。可通过[配置文件]修改位置。         |
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1763 1764 1765

**可执行文件**

1766
TDengine 的所有可执行文件默认存放在 _/usr/local/taos/bin_ 目录下。其中包括:
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1767

1768 1769
- *taosd*:TDengine 服务端可执行文件
- *taos*:TDengine Shell 可执行文件
1770
- *taosdump*:数据导入导出工具
1771 1772
- *taosBenchmark*:TDengine 测试工具
- remove.sh:卸载 TDengine 的脚本,请谨慎执行,链接到 /usr/bin 目录下的 **rmtaos** 命令。会删除 TDengine 的安装目录 /usr/local/taos,但会保留 /etc/taos、/var/lib/taos、/var/log/taos。
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1773

1774 1775
注意:2.4.0.0 版本之后的 taosBenchmark 和 taosdump 需要安装独立安装包 taosTools。

1776
您可以通过修改系统配置文件 taos.cfg 来配置不同的数据目录和日志目录。
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
1777

1778 1779 1780 1781 1782 1783
## TDengine 的启动、停止、卸载

TDengine 使用 Linux 系统的 systemd/systemctl/service 来管理系统的启动和、停止、重启操作。TDengine 的服务进程是 taosd,默认情况下 TDengine 在系统启动后将自动启动。DBA 可以通过 systemd/systemctl/service 手动操作停止、启动、重新启动服务。

以 systemctl 为例,命令如下:

sangshuduo's avatar
sangshuduo 已提交
1784
-    启动服务进程:`systemctl start taosd`
1785 1786 1787 1788 1789 1790 1791 1792

-    停止服务进程:`systemctl stop taosd`

-    重启服务进程:`systemctl restart taosd`

-    查看服务状态:`systemctl status taosd`

如果服务进程处于活动状态,则 status 指令会显示如下的相关信息:
sangshuduo's avatar
sangshuduo 已提交
1793

1794 1795 1796
```
......

sangshuduo's avatar
sangshuduo 已提交
1797
Active: active (running)
1798 1799 1800 1801 1802

......
```

如果后台服务进程处于停止状态,则 status 指令会显示如下的相关信息:
sangshuduo's avatar
sangshuduo 已提交
1803

1804 1805 1806 1807 1808 1809 1810 1811
```
......

Active: inactive (dead)

......
```

1812
卸载 TDengine,只需要执行如下命令:
sangshuduo's avatar
sangshuduo 已提交
1813

1814 1815 1816 1817 1818 1819
```
rmtaos
```

**警告:执行该命令后,TDengine 程序将被完全删除,务必谨慎使用。**

1820
## <a class="anchor" id="keywords"></a>TDengine参数限制与保留关键字
1821

1822 1823 1824 1825 1826
**名称命名规则**

1. 合法字符:英文字符、数字和下划线
2. 允许英文字符或下划线开头,不允许以数字开头
3. 不区分大小写
1827 1828 1829 1830 1831 1832 1833
4. 转义后表(列)名规则:
   为了兼容支持更多形式的表(列)名,TDengine 引入新的转义符  "`"。可用让表名与关键词不冲突,同时不受限于上述表名称合法性约束检查。
   转义后的表(列)名同样受到长度限制要求,且长度计算的时候不计算转义符。使用转义字符以后,不再对转义字符中的内容进行大小写统一。

   例如:\`aBc\` 和 \`abc\` 是不同的表(列)名,但是 abc 和 aBc 是相同的表(列)名。
   需要注意的是转义字符中的内容必须是可打印字符。
   支持转义符的功能从 2.3.0.1 版本开始。
1834 1835 1836 1837 1838 1839 1840

**密码合法字符集**

`[a-zA-Z0-9!?$%^&*()_–+={[}]:;@~#|<,>.?/]`

去掉了 ```‘“`\```  (单双引号、撇号、反斜杠、空格)

1841
- 数据库名:不能包含“.”以及特殊字符,不能超过 32 个字符
1842
- 表名:不能包含“.”以及特殊字符,与所属数据库名一起,不能超过 192 个字符,每行数据最大长度 16k 个字符
1843
- 表的列名:不能包含特殊字符,不能超过 64 个字符
1844
- 数据库名、表名、列名,都不能以数字开头,合法的可用字符集是“英文字符、数字和下划线”
1845
- 表的列数:不能超过 1024 列,最少需要 2 列,第一列必须是时间戳(从 2.1.7.0 版本开始,改为最多支持 4096 列)
1846
- 记录的最大长度:包括时间戳 8 byte,不能超过 16KB(每个 BINARY/NCHAR 类型的列还会额外占用 2 个 byte 的存储位置)
1847
- 单条 SQL 语句默认最大字符串长度:1048576 byte,但可通过系统配置参数 maxSQLLength 修改,取值范围 65480 ~ 1048576 byte
1848 1849 1850
- 数据库副本数:不能超过 3
- 用户名:不能超过 23 个 byte
- 用户密码:不能超过 15 个 byte
1851
- 标签(Tags)数量:不能超过 128 个,可以 0 个
1852
- 标签的总长度:不能超过 16K byte
1853 1854 1855
- 记录条数:仅受存储空间限制
- 表的个数:仅受节点个数限制
- 库的个数:仅受节点个数限制
1856
- 单个库上虚拟节点个数:不能超过 64 个
1857
- 库的数目,超级表的数目、表的数目,系统不做限制,仅受系统资源限制
1858
- SELECT 语句的查询结果,最多允许返回 1024 列(语句中的函数调用可能也会占用一些列空间),超限时需要显式指定较少的返回数据列,以避免语句执行报错。(从 2.1.7.0 版本开始,改为最多允许 4096 列)
1859

1860
目前 TDengine 有将近 200 个内部保留关键字,这些关键字无论大小写均不可以用作库名、表名、STable 名、数据列名及标签列名等。这些关键字列表如下:
1861

1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901
|  关键字列表  |              |              |              |              |
| ------------ | ------------ | ------------ | ------------ | ------------ |
| ABORT        | CREATE       | IGNORE       | NULL         | STAR         |
| ACCOUNT      | CTIME        | IMMEDIATE    | OF           | STATE        |
| ACCOUNTS     | DATABASE     | IMPORT       | OFFSET       | STATEMENT    |
| ADD          | DATABASES    | IN           | OR           | STATE_WINDOW |
| AFTER        | DAYS         | INITIALLY    | ORDER        | STORAGE      |
| ALL          | DBS          | INSERT       | PARTITIONS   | STREAM       |
| ALTER        | DEFERRED     | INSTEAD      | PASS         | STREAMS      |
| AND          | DELIMITERS   | INT          | PLUS         | STRING       |
| AS           | DESC         | INTEGER      | PPS          | SYNCDB       |
| ASC          | DESCRIBE     | INTERVAL     | PRECISION    | TABLE        |
| ATTACH       | DETACH       | INTO         | PREV         | TABLES       |
| BEFORE       | DISTINCT     | IS           | PRIVILEGE    | TAG          |
| BEGIN        | DIVIDE       | ISNULL       | QTIME        | TAGS         |
| BETWEEN      | DNODE        | JOIN         | QUERIES      | TBNAME       |
| BIGINT       | DNODES       | KEEP         | QUERY        | TIMES        |
| BINARY       | DOT          | KEY          | QUORUM       | TIMESTAMP    |
| BITAND       | DOUBLE       | KILL         | RAISE        | TINYINT      |
| BITNOT       | DROP         | LE           | REM          | TOPIC        |
| BITOR        | EACH         | LIKE         | REPLACE      | TOPICS       |
| BLOCKS       | END          | LIMIT        | REPLICA      | TRIGGER      |
| BOOL         | EQ           | LINEAR       | RESET        | TSERIES      |
| BY           | EXISTS       | LOCAL        | RESTRICT     | UMINUS       |
| CACHE        | EXPLAIN      | LP           | ROW          | UNION        |
| CACHELAST    | FAIL         | LSHIFT       | RP           | UNSIGNED     |
| CASCADE      | FILE         | LT           | RSHIFT       | UPDATE       |
| CHANGE       | FILL         | MATCH        | SCORES       | UPLUS        |
| CLUSTER      | FLOAT        | MAXROWS      | SELECT       | USE          |
| COLON        | FOR          | MINROWS      | SEMI         | USER         |
| COLUMN       | FROM         | MINUS        | SESSION      | USERS        |
| COMMA        | FSYNC        | MNODES       | SET          | USING        |
| COMP         | GE           | MODIFY       | SHOW         | VALUES       |
| COMPACT      | GLOB         | MODULES      | SLASH        | VARIABLE     |
| CONCAT       | GRANTS       | NCHAR        | SLIDING      | VARIABLES    |
| CONFLICT     | GROUP        | NE           | SLIMIT       | VGROUPS      |
| CONNECTION   | GT           | NONE         | SMALLINT     | VIEW         |
| CONNECTIONS  | HAVING       | NOT          | SOFFSET      | VNODES       |
| CONNS        | ID           | NOTNULL      | STABLE       | WAL          |
| COPY         | IF           | NOW          | STABLES      | WHERE        |
1902

1903
## 转义字符说明
sangshuduo's avatar
sangshuduo 已提交
1904

1905 1906 1907 1908
- 转义字符表(转义符的功能从 2.4.0.4 版本开始)

  | 字符序列    | **代表的字符**  |
      | :--------:     |   -------    |
sangshuduo's avatar
sangshuduo 已提交
1909
  | `\'`             |  单引号'      |
1910 1911 1912 1913 1914 1915
  | `\"`             |  双引号"      |
  | \n             |  换行符       |
  | \r             |  回车符       |
  | \t             |  tab符       |
  | `\\`             |  斜杠\        |
  | `\%`             |  % 规则见下    |
1916
  | `\_`             |  _ 规则见下    |
1917 1918 1919 1920

- 转义字符使用规则
  1. 标识符里有转义字符(数据库名、表名、列名)
     1. 普通标识符:    直接提示错误的标识符,因为标识符规定必须是数字、字母和下划线,并且不能以数字开头。
1921
     2. 反引号 `` 标识符: 保持原样,不转义
1922 1923
  2. 数据里有转义字符
     1. 遇到上面定义的转义字符会转义(%和_见下面说明),如果没有匹配的转义字符会忽略掉转义符\。
1924
     2. 对于 % 和 _,因为在 like 里这两个字符是通配符,所以在模式匹配 like 里用`\%`%和`\_`表示字符里本身的 % 和 _,如果在 like 模式匹配上下文之外使用 `\%` 或 `\_`,则它们的计算结果为字符串 `\%`和 `\_`,而不是 % 和 _。
S
Shuaiqiang Chang 已提交
1925

1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939
## 诊断及其他

#### 网络连接诊断

当出现客户端应用无法访问服务端时,需要确认客户端与服务端之间网络的各端口连通情况,以便有针对性地排除故障。

目前网络连接诊断支持在:Linux 与 Linux,Linux 与 Windows 之间进行诊断测试。

诊断步骤:

1. 如拟诊断的端口范围与服务器 taosd 实例的端口范围相同,须先停掉 taosd 实例
2. 服务端命令行输入:`taos -n server -P <port>`  以服务端身份启动对端口 port 为基准端口的监听
3. 客户端命令行输入:`taos -n client -h <fqdn of server> -P <port>`  以客户端身份启动对指定的服务器、指定的端口发送测试包

1940
服务端运行正常的话会输出以下信息:
1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998

```bash
# taos -n server -P 6000
12/21 14:50:13.522509 0x7f536f455200 UTL work as server, host:172.27.0.7 startPort:6000 endPort:6011 pkgLen:1000

12/21 14:50:13.522659 0x7f5352242700 UTL TCP server at port:6000 is listening
12/21 14:50:13.522727 0x7f5351240700 UTL TCP server at port:6001 is listening
...
...
...
12/21 14:50:13.523954 0x7f5342fed700 UTL TCP server at port:6011 is listening
12/21 14:50:13.523989 0x7f53437ee700 UTL UDP server at port:6010 is listening
12/21 14:50:13.524019 0x7f53427ec700 UTL UDP server at port:6011 is listening
12/21 14:50:22.192849 0x7f5352242700 UTL TCP: read:1000 bytes from 172.27.0.8 at 6000
12/21 14:50:22.192993 0x7f5352242700 UTL TCP: write:1000 bytes to 172.27.0.8 at 6000
12/21 14:50:22.237082 0x7f5351a41700 UTL UDP: recv:1000 bytes from 172.27.0.8 at 6000
12/21 14:50:22.237203 0x7f5351a41700 UTL UDP: send:1000 bytes to 172.27.0.8 at 6000
12/21 14:50:22.237450 0x7f5351240700 UTL TCP: read:1000 bytes from 172.27.0.8 at 6001
12/21 14:50:22.237576 0x7f5351240700 UTL TCP: write:1000 bytes to 172.27.0.8 at 6001
12/21 14:50:22.281038 0x7f5350a3f700 UTL UDP: recv:1000 bytes from 172.27.0.8 at 6001
12/21 14:50:22.281141 0x7f5350a3f700 UTL UDP: send:1000 bytes to 172.27.0.8 at 6001
...
...
...
12/21 14:50:22.677443 0x7f5342fed700 UTL TCP: read:1000 bytes from 172.27.0.8 at 6011
12/21 14:50:22.677576 0x7f5342fed700 UTL TCP: write:1000 bytes to 172.27.0.8 at 6011
12/21 14:50:22.721144 0x7f53427ec700 UTL UDP: recv:1000 bytes from 172.27.0.8 at 6011
12/21 14:50:22.721261 0x7f53427ec700 UTL UDP: send:1000 bytes to 172.27.0.8 at 6011
```

客户端运行正常会输出以下信息:

```bash
# taos -n client -h 172.27.0.7 -P 6000
12/21 14:50:22.192434 0x7fc95d859200 UTL work as client, host:172.27.0.7 startPort:6000 endPort:6011 pkgLen:1000

12/21 14:50:22.192472 0x7fc95d859200 UTL server ip:172.27.0.7 is resolved from host:172.27.0.7
12/21 14:50:22.236869 0x7fc95d859200 UTL successed to test TCP port:6000
12/21 14:50:22.237215 0x7fc95d859200 UTL successed to test UDP port:6000
...
...
...
12/21 14:50:22.676891 0x7fc95d859200 UTL successed to test TCP port:6010
12/21 14:50:22.677240 0x7fc95d859200 UTL successed to test UDP port:6010
12/21 14:50:22.720893 0x7fc95d859200 UTL successed to test TCP port:6011
12/21 14:50:22.721274 0x7fc95d859200 UTL successed to test UDP port:6011
```

仔细阅读打印出来的错误信息,可以帮助管理员找到原因,以解决问题。

#### 启动状态及RPC诊断

`taos -n startup -h <fqdn of server>`

判断 taosd 服务端是否成功启动,是数据库管理员经常遇到的一种情形。特别当若干台服务器组成集群时,判断每个服务端实例是否成功启动就会是一个重要问题。除检索 taosd 服务端日志文件进行问题定位、分析外,还可以通过 `taos -n startup -h <fqdn of server>` 来诊断一个 taosd 进程的启动状态。

针对多台服务器组成的集群,当服务启动过程耗时较长时,可通过该命令行来诊断每台服务器的 taosd 实例的启动状态,以准确定位问题。

sangshuduo's avatar
sangshuduo 已提交
1999
`taos -n rpc -h <fqdn of server>`
2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011

该命令用来诊断已经启动的 taosd 实例的端口是否可正常访问。如果 taosd 程序异常或者失去响应,可以通过 `taos -n rpc -h <fqdn of server>` 来发起一个与指定 fqdn 的 rpc 通信,看看 taosd 是否能收到,以此来判定是网络问题还是 taosd 程序异常问题。

#### sync 及 arbitrator 诊断

```
taos -n sync -P 6040 -h <fqdn of server>
taos -n sync -P 6042 -h <fqdn of server>
```

用来诊断 sync 端口是否工作正常,判断服务端 sync 模块是否成功工作。另外,-P 6042 用来诊断 arbitrator 是否配置正常,判断指定服务器的 arbitrator 是否能正常工作。

2012 2013 2014 2015
#### 网络速度诊断

`taos -n speed -h <fqdn of server> -P 6030 -N 10 -l 10000000 -S TCP`

2016
从 2.2.0.0 版本开始,taos 工具新提供了一个网络速度诊断的模式,可以对一个正在运行中的 taosd 实例或者 `taos -n server` 方式模拟的一个服务端实例,以非压缩传输的方式进行网络测速。这个模式下可供调整的参数如下:
2017 2018 2019 2020 2021

-n:设为“speed”时,表示对网络速度进行诊断。
-h:所要连接的服务端的 FQDN 或 ip 地址。如果不设置这一项,会使用本机 taos.cfg 文件中 FQDN 参数的设置作为默认值。
-P:所连接服务端的网络端口。默认值为 6030。
-N:诊断过程中使用的网络包总数。最小值是 1、最大值是 10000,默认值为 100。
S
Shenpeng.Cui 已提交
2022
-l:单个网络包的大小(单位:字节)。最小值是 1024、最大值是 1024 * 1024 * 1024,默认值为 1000。
2023 2024
-S:网络封包的类型。可以是 TCP 或 UDP,默认值为 TCP。

2025 2026 2027 2028
#### FQDN 解析速度诊断

`taos -n fqdn -h <fqdn of server>`

2029
从 2.2.0.0 版本开始,taos 工具新提供了一个 FQDN 解析速度的诊断模式,可以对一个目标 FQDN 地址尝试解析,并记录解析过程中所消耗的时间。这个模式下可供调整的参数如下:
2030 2031 2032 2033

-n:设为“fqdn”时,表示对 FQDN 解析进行诊断。
-h:所要解析的目标 FQDN 地址。如果不设置这一项,会使用本机 taos.cfg 文件中 FQDN 参数的设置作为默认值。

2034 2035 2036 2037 2038 2039
#### 服务端日志

taosd 服务端日志文件标志位 debugflag 默认为 131,在 debug 时往往需要将其提升到 135 或 143 。

一旦设定为 135 或 143,日志文件增长很快,特别是写入、查询请求量较大时,增长速度惊人。如合并保存日志,很容易把日志内的关键信息(如配置信息、错误信息等)冲掉。为此,服务端将重要信息日志与其他日志分开存放:

H
Haojun Liao 已提交
2040 2041
- taosinfo    存放重要信息日志, 包括:INFO/ERROR/WARNING 级别的日志信息。不记录DEBUG、TRACE级别的日志。
- taosdlog    服务器端生成的日志,记录taosinfo中全部信息外,还根据设置的日志输出级别,记录DEBUG(日志级别135)、TRACE(日志级别是 143)。
2042

H
Haojun Liao 已提交
2043
### 客户端日志
sangshuduo's avatar
sangshuduo 已提交
2044

H
Haojun Liao 已提交
2045
每个独立运行的客户端(一个进程)生成一个独立的客户端日志,其命名方式采用 taoslog+<序号> 的方式命名。文件标志位 debugflag 默认为 131,在 debug 时往往需要将其提升到 135 或 143 。
sangshuduo's avatar
sangshuduo 已提交
2046

H
Haojun Liao 已提交
2047
- taoslog     客户端(driver)生成的日志,默认记录客户端INFO/ERROR/WARNING 级别日志,还根据设置的日志输出级别,记录DEBUG(日志级别135)、TRACE(日志级别是 143)。
2048

H
Haojun Liao 已提交
2049
其中,日志文件最大长度由 numOfLogLines 来进行配置,一个 taosd 实例最多保留两个文件。
2050 2051 2052

taosd 服务端日志采用异步落盘写入机制,优点是可以避免硬盘写入压力太大,对性能造成很大影响。缺点是,在极端情况下,存在少量日志行数丢失的可能。