TDengine的运营与维护
容量规划
使用 TDengine 来搭建一个物联网大数据平台,计算资源、存储资源需要根据业务场景进行规划。下面分别讨论系统运行所需要的内存、CPU 以及硬盘空间。
内存需求
每个 Database 可以创建固定数目的 vgroup,默认与 CPU 核数相同,可通过 maxVgroupsPerDb 配置;vgroup 中的每个副本会是一个 vnode;每个 vnode 会占用固定大小的内存(大小与数据库的配置参数 blocks 和 cache 有关);每个 Table 会占用与标签总长度有关的内存;此外,系统会有一些固定的内存开销。因此,每个 DB 需要的系统内存可通过如下公式计算:
Database Memory Size = maxVgroupsPerDb * (blocks * cache + 10MB) + numOfTables * (tagSizePerTable + 0.5KB)
示例:假设是 4 核机器,cache 是缺省大小 16M, blocks 是缺省值 6,并且一个 DB 中有 10 万张表,标签总长度是 256 字节,则这个 DB 总的内存需求为:4 * (16 * 6 + 10) + 100000 * (0.25 + 0.5) / 1000 = 499M。
在实际的系统运维中,我们通常会更关心 TDengine 服务进程(taosd)会占用的内存量。
taosd 内存总量 = vnode 内存 + mnode 内存 + 查询内存
其中:
- “vnode 内存”指的是集群中所有的 Database 存储分摊到当前 taosd 节点上所占用的内存资源。可以按上文“Database Memory Size”计算公式估算每个 DB 的内存占用量进行加总,再按集群中总共的 TDengine 节点数做平均(如果设置为多副本,则还需要乘以对应的副本倍数)。
- “mnode 内存”指的是集群中管理节点所占用的资源。如果一个 taosd 节点上分布有 mnode 管理节点,则内存消耗还需要增加“0.2KB * 集群中数据表总数”。
- “查询内存”指的是服务端处理查询请求时所需要占用的内存。单条查询语句至少会占用“0.2KB * 查询涉及的数据表总数”的内存量。
注意:以上内存估算方法,主要讲解了系统的“必须内存需求”,而不是“内存总数上限”。在实际运行的生产环境中,由于操作系统缓存、资源管理调度等方面的原因,内存规划应当在估算结果的基础上保留一定冗余,以维持系统状态和系统性能的稳定性。并且,生产环境通常会配置系统资源的监控工具,以便及时发现硬件资源的紧缺情况。
最后,如果内存充裕,可以考虑加大 Blocks 的配置,这样更多数据将保存在内存里,提高查询速度。
客户端内存需求
客户端应用采用 taosc 客户端驱动连接服务端,会有内存需求的开销。
客户端的内存开销主要由写入过程中的 SQL 语句、表的元数据信息缓存、以及结构性开销构成。系统最大容纳的表数量为 N(每个通过超级表创建的表的 meta data 开销约 256 字节),最大并行写入线程数量 T,最大 SQL 语句长度 S(通常是 1 Mbytes)。由此可以进行客户端内存开销的估算(单位 MBytes):
M = (T * S * 3 + (N / 4096) + 100)
举例如下:用户最大并发写入线程数 100,子表数总数 10,000,000,那么客户端的内存最低要求是:
100 * 3 + (10000000 / 4096) + 100 = 2741 (MBytes)
即配置 3 GBytes 内存是最低要求。
CPU 需求
CPU 的需求取决于如下两方面:
- 数据插入 TDengine 单核每秒能至少处理一万个插入请求。每个插入请求可以带多条记录,一次插入一条记录与插入 10 条记录,消耗的计算资源差别很小。因此每次插入,条数越大,插入效率越高。如果一个插入请求带 200 条以上记录,单核就能达到每秒插入 100 万条记录的速度。但对前端数据采集的要求越高,因为需要缓存记录,然后一批插入。
- 查询需求 TDengine 提供高效的查询,但是每个场景的查询差异很大,查询频次变化也很大,难以给出客观数字。需要用户针对自己的场景,写一些查询语句,才能确定。
因此仅对数据插入而言,CPU 是可以估算出来的,但查询所耗的计算资源无法估算。在实际运营过程中,不建议 CPU 使用率超过 50%,超过后,需要增加新的节点,以获得更多计算资源。
存储需求
TDengine 相对于通用数据库,有超高的压缩比,在绝大多数场景下,TDengine 的压缩比不会低于 5 倍,有的场合,压缩比可达到 10 倍以上,取决于实际场景的数据特征。压缩前的原始数据大小可通过如下方式计算:
Raw DataSize = numOfTables * rowSizePerTable * rowsPerTable
示例:1000 万台智能电表,每台电表每 15 分钟采集一次数据,每次采集的数据 128 字节,那么一年的原始数据量是:10000000 * 128 * 24 * 60 / 15 * 365 = 44.8512T。TDengine大概需要消耗 44.851 / 5 = 8.97024T 空间。
用户可以通过参数 keep,设置数据在磁盘中的最大保存时长。为进一步减少存储成本,TDengine 还提供多级存储,最冷的数据可以存放在最廉价的存储介质上,应用的访问不用做任何调整,只是读取速度降低了。
为提高速度,可以配置多块硬盘,这样可以并发写入或读取数据。需要提醒的是,TDengine 采取多副本的方式提供数据的高可靠,因此不再需要采用昂贵的磁盘阵列。
物理机或虚拟机台数
根据上面的内存、CPU、存储的预估,就可以知道整个系统需要多少核、多少内存、多少存储空间。如果数据副本数不为 1,总需求量需要再乘以副本数。
因为 TDengine 具有很好的水平扩展能力,根据总量,再根据单个物理机或虚拟机的资源,就可以轻松决定需要购置多少台物理机或虚拟机了。
立即计算 CPU、内存、存储,请参见:资源估算方法。
容错和灾备
容错
TDengine 支持 WAL (Write Ahead Log)机制,实现数据的容错能力,保证数据的高可用。
TDengine 接收到应用的请求数据包时,先将请求的原始数据包写入数据库日志文件,等数据成功写入数据库数据文件后,再删除相应的 WAL 。这样保证了 TDengine 能够在断电等因素导致的服务重启时从数据库日志文件中恢复数据,避免数据的丢失。
涉及的系统配置参数有两个:
- walLevel:WAL 级别,0:不写 WAL ; 1:写 wal, 但不执行 fsync; 2:写 wal, 而且执行 fsync。
- fsync:当 walLevel 设置为 2 时,执行 fsync 的周期。设置为 0,表示每次写入,立即执行 fsync。
如果要100%的保证数据不丢失,需要将 walLevel 设置为 2,fsync 设置为0。这时写入速度将会下降。但如果应用侧启动的写数据的线程数达到一定的数量(超过 50),那么写入数据的性能也会很不错,只会比 fsync 设置为 3000 毫秒下降 30% 左右。
灾备
TDengine 的集群通过多个副本的机制,来提供系统的高可用性,实现灾备能力。
TDengine 集群是由 mnode 负责管理的,为保证 mnode 的高可靠,可以配置多个 mnode 副本,副本数由系统配置参数 numOfMnodes 决定,为了支持高可靠,需要设置大于 1。为保证元数据的强一致性,mnode 副本之间通过同步方式进行数据复制,保证了元数据的强一致性。
TDengine 集群中的时序数据的副本数是与数据库关联的,一个集群里可以有多个数据库,每个数据库可以配置不同的副本数。创建数据库时,通过参数 replica 指定副本数。为了支持高可靠,需要设置副本数大于1。
TDengine 集群的节点数必须大于等于副本数,否则创建表时将报错。
当 TDengine 集群中的节点部署在不同的物理机上,并设置多个副本数时,就实现了系统的高可靠性,无需再使用其他软件或工具。TDengine 企业版还可以将副本部署在不同机房,从而实现异地容灾。
服务端配置
TDengine 系统后台服务由 taosd 提供,可以在配置文件 taos.cfg 里修改配置参数,以满足不同场景的需求。配置文件的缺省位置在 /etc/taos 目录,可以通过 taosd 命令行执行参数-c指定配置文件目录。比如 taosd -c /home/user 来指定配置文件位于 /home/user 这个目录。
另外可以使用 “-C” 显示当前服务器配置参数:
taosd -C
下面仅仅列出一些重要的配置参数,更多的参数请看配置文件里的说明。各个参数的详细介绍及作用请看前述章节,而且这些参数的缺省配置都是可以工作的,一般无需设置。注意:配置文件参数修改后,需要重启taosd服务,或客户端应用才能生效。
-
firstEP
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 taosd 启动时,主动连接的集群中首个 dnode 的 end point 缺省值 localhost:6030 -
secondEP
属性 说明 内部配置 Yes 适用范围 服务端和客户端均适用 含义 taosd 启动时,如果 firstEp 连接不上,尝试连接集群中第二个 dnode 的 end point 缺省值 无 -
fqdn
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 数据节点的 FQDN。如果习惯 IP 地址访问,可设置为该节点的 IP 地址。 缺省值 缺省为操作系统配置的第一个 hostname。 补充说明 这个参数值的长度需要控制在 96 个字符以内。 -
serverPort
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 taosd 启动后,对外服务的端口号 缺省值 6030 补充说明 RESTful 服务使用的端口号是在此基础上+11,即默认值为 6041(注意 2.4 及后续版本使用 taosAdapter 提供 RESTful 接口)。 -
logDir
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 日志文件目录,客户端和服务器的运行日志将写入该目录 缺省值 /var/log/taos -
scriptDir
属性 说明 内部配置 Yes 适用范围 仅服务端适用 含义 缺省值 -
dataDir
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 数据文件目录,所有的数据文件都将写入该目录 缺省值 /var/lib/taos -
arbitrator
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 系统中裁决器的 end point 缺省值 空 -
numOfThreadsPerCore
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 每个 CPU 核生成的队列消费者线程数量 缺省值 1.0 -
ratioOfQueryThreads
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 设置查询线程的最大数量 取值范围 0:表示只有 1 个查询线程
1:表示最大和 CPU 核数相等的查询线程
2:表示最大建立 2 倍 CPU 核数的查询线程。缺省值 1 补充说明 该值可以为小数,即 0.5 表示最大建立 CPU 核数一半的查询线程。 -
numOfMnodes
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 系统中管理节点个数 缺省值 3 -
vnodeBak
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 删除 vnode 时是否备份 vnode 目录 取值范围 0:否,1:是 缺省值 1 -
telemetryRePorting
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 是否允许 TDengine 采集和上报基本使用信息 取值范围 0:不允许
1:允许缺省值 1 -
balance
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 是否启动负载均衡 取值范围 0,1 缺省值 1 -
balanceInterval
属性 说明 内部配置 Yes 适用范围 仅服务端适用 含义 管理节点在正常运行状态下,检查负载均衡的时间间隔 单位 秒 取值范围 1-30000 缺省值 300 -
role
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 dnode 的可选角色 取值范围 0:any(既可作为 mnode,也可分配 vnode)
1:mgmt(只能作为 mnode,不能分配 vnode)
2:dnode(不能作为 mnode,只能分配 vnode)缺省值 0 -
maxTmerCtrl
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 定时器个数 单位 个 取值范围 8-2048 缺省值 512 -
monitorInterval
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 监控数据库记录系统参数(CPU/内存)的时间间隔 单位 秒 取值范围 1-600 缺省值 30 -
offlineThreshold
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 dnode 离线阈值,超过该时间将导致 dnode 离线 单位 秒 取值范围 5-7200000 缺省值 86400*10(10 天) -
rpcTimer
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 rpc 重试时长 单位 毫秒 取值范围 100-3000 缺省值 300 -
rpcMaxTime
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 rpc 等待应答最大时长 单位 秒 取值范围 100-7200 缺省值 600 -
statusInterval
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 dnode 向 mnode 报告状态间隔 单位 秒 取值范围 1-10 缺省值 1 -
shellActivityTimer
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 shell 客户端向 mnode 发送心跳间隔 单位 秒 取值范围 1-120 缺省值 3 -
tableMetaKeepTimer
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 表的元数据 cache 时长 单位 秒 取值范围 1-8640000 缺省值 7200 -
minSlidingTime
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 最小滑动窗口时长 单位 毫秒 取值范围 10-1000000 缺省值 10 补充说明 支持 us 补值后,这个值就是 1us 了。 -
minIntervalTime
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 时间窗口最小值 单位 毫秒 取值范围 1-1000000 缺省值 10 -
stream
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 是否启用连续查询(流计算功能) 取值范围 0:不允许
1:允许缺省值 1 -
maxStreamCompDelay
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 连续查询启动最大延迟 单位 毫秒 取值范围 10-1000000000 缺省值 20000 补充说明 为避免多个 stream 同时执行占用太多系统资源,程序中对 stream 的执行时间人为增加了一些随机的延时。
maxFirstStreamCompDelay 是 stream 第一次执行前最少要等待的时间。
streamCompDelayRatio 是延迟时间的计算系数,它乘以查询的 interval 后为延迟时间基准。
maxStreamCompDelay 是延迟时间基准的上限。
实际延迟时间为一个不超过延迟时间基准的随机值。
stream 某次计算失败后需要重试,retryStreamCompDelay 是重试的等待时间基准。
实际重试等待时间为不超过等待时间基准的随机值。 -
maxFirstStreamCompDelay
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 第一次连续查询启动最大延迟 单位 毫秒 取值范围 10-1000000000 缺省值 10000 -
retryStreamCompDelay
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 连续查询重试等待间隔 单位 毫秒 取值范围 10-1000000000 缺省值 10 -
streamCompDelayRatio
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 连续查询的延迟时间计算系数 取值范围 0.1-0.9 缺省值 0.1 -
maxVgroupsPerDb
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 每个 DB 中 能够使用的最大 vnode 个数 取值范围 0-8192 缺省值 -
maxTablesPerVnode
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 每个 vnode 中能够创建的最大表个数 缺省值 1000000 -
minTablesPerVnode
属性 说明 内部配置 Yes 适用范围 仅服务端适用 含义 每个 vnode 中必须创建的最小表个数 缺省值 1000 -
tableIncStepPerVnode
属性 说明 内部配置 Yes 适用范围 仅服务端适用 含义 每个 vnode 中超过最小表数后递增步长 缺省值 1000 -
cache
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 内存块的大小 单位 MB 缺省值 16 -
blocks
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 每个 vnode(tsdb)中有多少 cache 大小的内存块。因此一个 vnode 的用的内存大小粗略为(cache * blocks) 缺省值 6 -
days
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 数据文件存储数据的时间跨度 单位 天 缺省值 10 -
keep
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 数据保留的天数 单位 天 缺省值 3650 -
minRows
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 文件块中记录的最小条数 缺省值 100 -
maxRows
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 文件块中记录的最大条数 缺省值 4096 -
quorum
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 多副本环境下指令执行的确认数要求 取值范围 1,2 缺省值 1 -
comp
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 文件压缩标志位 取值范围 0:关闭,1:一阶段压缩,2:两阶段压缩 缺省值 2 -
walLevel
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 WAL 级别 取值范围 1:写 wal, 但不执行 fsync
2:写 wal, 而且执行 fsync缺省值 1 -
fsync
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 当 wal 设置为 2 时,执行 fsync 的周期 单位 毫秒 取值范围 最小为 0,表示每次写入,立即执行 fsync
最大为 180000(三分钟)缺省值 3000 -
replica
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 副本个数 取值范围 1-3 缺省值 1 -
compressMsgSize
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 客户端与服务器之间进行消息通讯过程中,对通讯的消息进行压缩的阈值。如果要压缩消息,建议设置为 64330 字节,即大于 64330 字节的消息体才进行压缩。 单位 bytes 取值范围 0
表示对所有的消息均进行压缩 >0: 超过该值的消息才进行压缩 -1: 不压缩缺省值 -1 -
maxSQLLength
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 单条 SQL 语句允许的最长限制 单位 bytes 取值范围 65480-1048576 缺省值 1048576 -
maxNumOfOrderedRes
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 支持超级表时间排序允许的最多记录数限制 缺省值 10 万 -
timezone
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 时区 缺省值 从系统中动态获取当前的时区设置 -
locale
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 系统区位信息及编码格式 缺省值 系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过 API 设置 -
charset
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 字符集编码 缺省值 系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过 API 设置 -
maxShellConns
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 一个 dnode 容许的连接数 取值范围 10-50000000 缺省值 5000 -
maxConnections
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 一个数据库连接所容许的 dnode 连接数 取值范围 1-100000 缺省值 5000 补充说明 实际测试下来,如果默认没有配,选 50 个 worker thread 会产生 Network unavailable -
minimalLogDirGB
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 当日志文件夹的磁盘大小小于该值时,停止写日志 单位 GB 缺省值 1.0 -
minimalTmpDirGB
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 当日志文件夹的磁盘大小小于该值时,停止写临时文件 单位 GB 缺省值 1.0 -
minimalDataDirGB
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 当日志文件夹的磁盘大小小于该值时,停止写时序数据 单位 GB 缺省值 2.0 -
mnodeEqualVnodeNum
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 一个 mnode 等同于 vnode 消耗的个数 缺省值 4 -
http
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 服务器内部的 http 服务开关。 取值范围 0:关闭 http 服务, 1:激活 http 服务。 缺省值 1 -
monitor
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 服务器内部的系统监控开关。监控主要负责收集物理节点的负载状况,包括 CPU、内存、硬盘、网络带宽、HTTP 请求量的监控记录,记录信息存储在 LOG
库中。取值范围 0:关闭监控服务, 1:激活监控服务。 缺省值 0 -
httpEnableRecordSql
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 内部使用,记录通过 RESTFul 接口,产生的 SQL 调用。taosAdapter 配置或有不同,请参考相应文档。 缺省值 0 补充说明 生成的文件(httpnote.0/httpnote.1),与服务端日志所在目录相同。 -
httpMaxThreads
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 RESTFul 接口的线程数。taosAdapter 配置或有不同,请参考相应文档。 缺省值 2 -
telegrafUseFieldNum
属性 说明 内部配置 Yes 适用范围 含义 缺省值 -
restfulRowLimit
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 RESTFul 接口单次返回的记录条数。taosAdapter 配置或有不同,请参考相应文档。 缺省值 10240 补充说明 最大 10,000,000 -
numOfLogLines
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 单个日志文件允许的最大行数。 缺省值 10,000,000 -
asyncLog
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 日志写入模式 取值范围 0:同步、1:异步 缺省值 1 -
logKeepDays
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 日志文件的最长保存时间 单位 天 缺省值 0 补充说明 大于 0 时,日志文件会被重命名为 taosdlog.xxx,其中 xxx 为日志文件最后修改的时间戳。 -
debugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 运行日志开关 取值范围 131(输出错误和警告日志),135(输出错误、警告和调试日志),143(输出错误、警告、调试和跟踪日志) 缺省值 131 或 135(不同模块有不同的默认值) -
mDebugFlag
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 管理模块的日志开关 取值范围 同上 缺省值 135 -
dDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 dnode 模块的日志开关 取值范围 同上 缺省值 135 -
sDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 sync 模块的日志开关 取值范围 同上 缺省值 135 -
wDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 wal 模块的日志开关 取值范围 同上 缺省值 135 -
sdbDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 sdb 模块的日志开关 取值范围 同上 缺省值 135 -
rpcDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 rpc 模块的日志开关 取值范围 同上 缺省值 -
tmrDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 定时器模块的日志开关 取值范围 同上 缺省值 -
cDebugFlag
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 client 模块的日志开关 取值范围 同上 缺省值 -
jniDebugFlag
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 jni 模块的日志开关 取值范围 同上 缺省值 -
odbcDebugFlag
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 odbc 模块的日志开关 取值范围 同上 缺省值 -
uDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 共用功能模块的日志开关 取值范围 同上 缺省值 -
httpDebugFlag
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 http 模块的日志开关 取值范围 同上 缺省值 -
monitorDebugFlag
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 监控模块的日志开关 取值范围 同上 缺省值 -
qDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 查询模块的日志开关 取值范围 同上 缺省值 -
vDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 vnode 模块的日志开关 取值范围 同上 缺省值 -
tsdbDebugFlag
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 TSDB 模块的日志开关 取值范围 同上 缺省值 -
cqDebugFlag
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 连续查询模块的日志开关 取值范围 同上 缺省值 -
tscEnableRecordSql
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 是否记录客户端 sql 语句到文件 取值范围 0:否,1:是 缺省值 0 补充说明 生成的文件(tscnote-xxxx.0/tscnote-xxx.1,xxxx 是 pid),与客户端日志所在目录相同。 -
enableCoreFile
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 是否开启服务 crash 时生成 core 文件 取值范围 0:否,1:是 缺省值 1 补充说明 不同的启动方式,生成 core 文件的目录如下:1、systemctl start taosd 启动:生成的 core 在根目录下
2、手动启动,就在 taosd 执行目录下。 -
gitinfo
属性 说明 内部配置 Yes 适用范围 服务端和客户端均适用 含义 取值范围 1 缺省值 -
gitinfoofInternal
属性 说明 内部配置 Yes 适用范围 服务端和客户端均适用 含义 取值范围 2 缺省值 -
Buildinfo
属性 说明 内部配置 Yes 适用范围 服务端和客户端均适用 含义 取值范围 3 缺省值 -
version
属性 说明 内部配置 Yes 适用范围 服务端和客户端均适用 含义 取值范围 4 缺省值 -
maxBinaryDisplayWidth
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 Taos shell 中 binary 和 nchar 字段的显示宽度上限,超过此限制的部分将被隐藏 取值范围 5 - 缺省值 30 补充说明 实际上限按以下规则计算:如果字段值的长度大于 maxBinaryDisplayWidth,则显示上限为 字段名长度 和 maxBinaryDisplayWidth 的较大者。
否则,上限为 字段名长度 和 字段值长度 的较大者。
可在 shell 中通过命令 set max_binary_display_width nn 动态修改此选项 -
queryBufferSize
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 为所有并发查询占用保留的内存大小。 单位 MB 缺省值 补充说明 计算规则可以根据实际应用可能的最大并发数和表的数字相乘,再乘 170 。
(2.0.15 以前的版本中,此参数的单位是字节) -
ratioOfQueryCores
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 设置查询线程的最大数量。 缺省值 补充说明 最小值 0 表示只有 1 个查询线程
最大值 2 表示最大建立 2 倍 CPU 核数的查询线程。
默认为 1,表示最大和 CPU 核数相等的查询线程。
该值可以为小数,即 0.5 表示最大建立 CPU 核数一半的查询线程。 -
update
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 允许更新已存在的数据行 取值范围 0:不允许更新
1:允许整行更新
2:允许部分列更新。(2.1.7.0 版本开始此参数支持设为 2,在此之前取值只能是 [0, 1])缺省值 0 补充说明 2.0.8.0 版本之前,不支持此参数。 -
cacheLast
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 是否在内存中缓存子表的最近数据 取值范围 0:关闭
1:缓存子表最近一行数据
2:缓存子表每一列的最近的非 NULL 值
3:同时打开缓存最近行和列功能。(2.1.2.0 版本开始此参数支持 0 ~ 3 的取值范围,在此之前取值只能是 [0, 1])缺省值 0 补充说明 2.1.2.0 版本之前、2.0.20.7 版本之前在 taos.cfg 文件中不支持此参数。 -
numOfCommitThreads
属性 说明 内部配置 Yes 适用范围 仅服务端适用 含义 设置写入线程的最大数量 缺省值 -
maxWildCardsLength
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 设定 LIKE 算子的通配符字符串允许的最大长度 单位 bytes 取值范围 0-16384 缺省值 100 补充说明 2.1.6.1 版本新增。 -
compressColData
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 客户端与服务器之间进行消息通讯过程中,对服务器端查询结果进行列压缩的阈值。 单位 bytes 取值范围 0: 对所有查询结果均进行压缩 >0: 查询结果中任意列大小超过该值的消息才进行压缩 -1: 不压缩 缺省值 -1 补充说明 2.3.0.0 版本新增。 -
tsdbMetaCompactRatio
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 tsdb meta 文件中冗余数据超过多少阈值,开启 meta 文件的压缩功能 取值范围 0:不开启,[1-100]:冗余数据比例 缺省值 0 -
rpcForceTcp
属性 说明 内部配置 No 适用范围 服务端和客户端均适用 含义 强制使用 TCP 传输 取值范围 0: 不开启 1: 开启 缺省值 0 补充说明 在网络比较差的环境中,建议开启。
2.0 版本新增。 -
maxNumOfDistinctRes
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 允许返回的 distinct 结果最大行数 取值范围 默认值为 10 万,最大值 1 亿 缺省值 10 万 补充说明 2.3 版本新增。 -
clientMerge
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 是否允许客户端对写入数据去重 取值范围 0:不开启,1:开启 缺省值 0 补充说明 2.3 版本新增。 -
httpDBNameMandatory
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 是否在 URL 中输入 数据库名称 取值范围 0:不开启,1:开启 缺省值 0 补充说明 2.3 版本新增。 -
maxRegexStringLen
属性 说明 内部配置 No 适用范围 仅客户端适用 含义 正则表达式最大允许长度 取值范围 默认值 128,最大长度 16384 缺省值 128 补充说明 2.3 版本新增。 -
lossyColumns
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 配置要进行有损压缩的浮点数据类型 取值范围 float:只对float类型进行有损压缩
double:只对double类型进行有损压缩
float|double:float double都进行有损压缩缺省值 默认为空字符串,关闭有损压缩 补充说明 2.4.0.10版本新增。 -
fPrecision
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 设置float类型浮点数压缩精度 取值范围 0.1 ~ 0.00000001 缺省值 0.00000001(1E-8) 补充说明 2.4.0.10版本新增。 -
dPrecision
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 设置double类型浮点数压缩精度 取值范围 0.1 ~ 0.0000000000000001 缺省值 0.0000000000000001(1E-16) 补充说明 2.4.0.10版本新增。 -
maxRange
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 要压缩数据可能的最大波动范围 取值范围 无限制 缺省值 自动预测 补充说明 2.4.0.10版本新增。 -
Range
属性 说明 内部配置 No 适用范围 仅服务端适用 含义 要压缩数据可能的平均波动范围 取值范围 无限制 缺省值 自动预测 补充说明 2.4.0.10版本新增。
注意: 对于端口,TDengine会使用从serverPort起13个连续的TCP和UDP端口号,请务必在防火墙打开。因此如果是缺省配置,需要打开从6030到6042共13个端口,而且必须TCP和UDP都打开。(详细的端口情况请参见 TDengine 2.0 端口说明)
不同应用场景的数据往往具有不同的数据特征,比如保留天数、副本数、采集频次、记录大小、采集点的数量、压缩等都可完全不同。为获得在存储上的最高效率,TDengine 提供如下存储相关的系统配置参数(既可以作为 create database 指令的参数,也可以写在 taos.cfg 配置文件中用来设定创建新数据库时所采用的默认值):
# | 配置参数名称 | 单位 | 含义 | 取值范围 | 缺省值 |
---|---|---|---|---|---|
1 | days | 天 | 一个数据文件存储数据的时间跨度 | 10 | |
2 | keep | 天 | (可通过 alter database 修改)数据库中数据保留的天数。 | 3650 | |
3 | cache | MB | 内存块的大小 | 16 | |
4 | blocks | (可通过 alter database 修改)每个 VNODE(TSDB)中有多少个 cache 大小的内存块。因此一个 VNODE 使用的内存大小粗略为(cache * blocks)。 | 6 | ||
5 | quorum | (可通过 alter database 修改)多副本环境下指令执行的确认数要求 | 1-2 | 1 | |
6 | minRows | 文件块中记录的最小条数 | 100 | ||
7 | maxRows | 文件块中记录的最大条数 | 4096 | ||
8 | comp | (可通过 alter database 修改)文件压缩标志位 | 0:关闭,1:一阶段压缩,2:两阶段压缩 | 2 | |
9 | walLevel | (作为 database 的参数时名为 wal;在 taos.cfg 中作为参数时需要写作 walLevel)WAL级别 | 1:写 WAL,但不执行 fsync;2:写 WAL, 而且执行 fsync | 1 | |
10 | fsync | 毫秒 | 当 wal 设置为 2 时,执行 fsync 的周期。设置为 0,表示每次写入,立即执行 fsync。 | 3000 | |
11 | replica | (可通过 alter database 修改)副本个数 | 1-3 | 1 | |
12 | precision | 时间戳精度标识(2.1.2.0 版本之前、2.0.20.7 版本之前在 taos.cfg 文件中不支持此参数。)(从 2.1.5.0 版本开始,新增对纳秒时间精度的支持) | ms 表示毫秒,us 表示微秒,ns 表示纳秒 | ms | |
13 | update | 是否允许数据更新(从 2.1.7.0 版本开始此参数支持 0~2 的取值范围,在此之前取值只能是 [0, 1];而 2.0.8.0 之前的版本在 SQL 指令中不支持此参数。) | 0:不允许;1:允许更新整行;2:允许部分列更新。 | 0 | |
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 |
对于一个应用场景,可能有多种数据特征的数据并存,最佳的设计是将具有相同数据特征的表放在一个库里,这样一个应用有多个库,而每个库可以配置不同的存储参数,从而保证系统有最优的性能。TDengine 允许应用在创建库时指定上述存储参数,如果指定,该参数就将覆盖对应的系统配置参数。举例,有下述 SQL:
CREATE DATABASE demo DAYS 10 CACHE 32 BLOCKS 8 REPLICA 3 UPDATE 1;
该SQL创建了一个库 demo, 每个数据文件存储 10 天数据,内存块为 32 兆字节,每个 VNODE 占用 8 个内存块,副本数为3,允许更新,而其他参数与系统配置完全一致。
一个数据库创建成功后,仅部分参数可以修改并实时生效,其余参数不能修改:
参数名 | 能否修改 | 范围 | 修改语法示例 |
---|---|---|---|
name | |||
create time | |||
ntables | |||
vgroups | |||
replica | YES | 在线 dnode 数目为: 1:1-1; 2:1-2; >=3:1-3 |
ALTER DATABASE |
quorum | YES | 1-2 | ALTER DATABASE |
days | |||
keep | YES | days-365000 | ALTER DATABASE |
cache | |||
blocks | YES | 3-1000 | ALTER DATABASE |
minrows | |||
maxrows | |||
wal | |||
fsync | |||
comp | YES | 0-2 | ALTER DATABASE |
precision | |||
status | |||
update | |||
cachelast | YES | 0 | 1 | 2 | 3 | ALTER DATABASE |
说明:在 2.1.3.0 版本之前,通过 ALTER DATABASE 语句修改这些参数后,需要重启服务器才能生效。
TDengine 集群中加入一个新的 dnode 时,涉及集群相关的一些参数必须与已有集群的配置相同,否则不能成功加入到集群中。会进行校验的参数如下:
- numOfMnodes:系统中管理节点个数。默认值:3。(2.0 版本从 2.0.20.11 开始、2.1 及以上版本从 2.1.6.0 开始,numOfMnodes 默认值改为 1。)
- mnodeEqualVnodeNum: 一个 mnode 等同于 vnode 消耗的个数。默认值:4。
- offlineThreshold: dnode 离线阈值,超过该时间将导致该 dnode 从集群中删除。单位为秒,默认值:86400*10(即10天)。
- statusInterval: dnode 向 mnode 报告状态时长。单位为秒,默认值:1。
- maxTablesPerVnode: 每个 vnode 中能够创建的最大表个数。默认值:1000000。
- maxVgroupsPerDb: 每个数据库中能够使用的最大 vgroup 个数。
- arbitrator: 系统中裁决器的 end point,缺省为空。
- timezone、locale、charset 的配置见客户端配置。(2.0.20.0 及以上的版本里,集群中加入新节点已不要求 locale 和 charset 参数取值一致)
- balance:是否启用负载均衡。0:否,1:是。默认值:1。
- flowctrl:是否启用非阻塞流控。0:否,1:是。默认值:1。
- slaveQuery:是否启用 slave vnode 参与查询。0:否,1:是。默认值:1。
- adjustMaster:是否启用 vnode master 负载均衡。0:否,1:是。默认值:1。
为方便调试,可通过 SQL 语句临时调整每个 dnode 的日志配置,系统重启后会失效:
ALTER DNODE <dnode_id> <config>
- dnode_id: 可以通过 SQL 语句"SHOW DNODES"命令获取
- config: 要调整的日志参数,在如下列表中取值
resetlog 截断旧日志文件,创建一个新日志文件 debugFlag < 131 | 135 | 143 > 设置 debugFlag 为 131、135 或者 143
例如:
alter dnode 1 debugFlag 135;
客户端及应用驱动配置
TDengine 系统的前台交互客户端应用程序为 taos,以及应用驱动,它与 taosd 共享同一个配置文件 taos.cfg。运行 taos 时,使用参数 -c 指定配置文件目录,如 taos -c /home/cfg,表示使用/home/cfg/目录下的 taos.cfg 配置文件中的参数,缺省目录是 /etc/taos。更多 taos 的使用方法请见帮助信息 taos --help
。本节主要说明 taos 客户端应用在配置文件 taos.cfg 文件中使用到的参数。
2.0.10.0 之后版本支持命令行以下参数显示当前客户端参数的配置
taos -C 或 taos --dump-config
客户端及应用驱动配置参数列表及解释
-
firstEp: taos 启动时,主动连接的集群中第一个 taosd 实例的 end point, 缺省值为 localhost:6030。
-
secondEp: taos 启动时,如果 firstEp 连不上,将尝试连接 secondEp。
-
locale:系统区位信息及编码格式。
默认值:系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过API设置。
TDengine 为存储中文、日文、韩文等非 ASCII 编码的宽字符,提供一种专门的字段类型 nchar。写入 nchar 字段的数据将统一采用 UCS4-LE 格式进行编码并发送到服务器。需要注意的是,编码正确性是客户端来保证。因此,如果用户想要正常使用 nchar 字段来存储诸如中文、日文、韩文等非 ASCII 字符,需要正确设置客户端的编码格式。
客户端的输入的字符均采用操作系统当前默认的编码格式,在 Linux 系统上多为 UTF-8,部分中文系统编码则可能是 GB18030 或 GBK 等。在 docker 环境中默认的编码是 POSIX。在中文版 Windows 系统中,编码则是 CP936。客户端需要确保正确设置自己所使用的字符集,即客户端运行的操作系统当前编码字符集,才能保证 nchar 中的数据正确转换为 UCS4-LE 编码格式。
在 Linux 中 locale 的命名规则为: <语言>_<地区>.<字符集编码> 如:zh_CN.UTF-8,zh 代表中文,CN 代表大陆地区,UTF-8 表示字符集。字符集编码为客户端正确解析本地字符串提供编码转换的说明。Linux 系统与 macOS 系统可以通过设置 locale 来确定系统的字符编码,由于 Windows 使用的 locale 中不是 POSIX 标准的 locale 格式,因此在 Windows 下需要采用另一个配置参数 charset 来指定字符编码。在 Linux 系统中也可以使用charset来指定字符编码。
-
charset:字符集编码。
默认值:系统中动态获取,如果自动获取失败,需要用户在配置文件设置或通过 API 设置。
如果配置文件中不设置 charset,在 Linux 系统中,taos 在启动时候,自动读取系统当前的 locale 信息,并从 locale 信息中解析提取 charset 编码格式。如果自动读取 locale 信息失败,则尝试读取 charset 配置,如果读取 charset 配置也失败,则中断启动过程。
在 Linux 系统中,locale 信息包含了字符编码信息,因此正确设置了 Linux 系统 locale 以后可以不用再单独设置 charset。例如:
locale zh_CN.UTF-8
在 Windows 系统中,无法从 locale 获取系统当前编码。如果无法从配置文件中读取字符串编码信息,taos 默认设置为字符编码为 CP936。其等效在配置文件中添加如下配置:
charset CP936
如果需要调整字符编码,请查阅当前操作系统使用的编码,并在配置文件中正确设置。
在 Linux 系统中,如果用户同时设置了 locale 和字符集编码 charset,并且 locale 和 charset 的不一致,后设置的值将覆盖前面设置的值。
locale zh_CN.UTF-8 charset GBK
则 charset 的有效值是 GBK。
charset GBK locale zh_CN.UTF-8
charset 的有效值是 UTF-8。
日志的配置参数,与 server 的配置参数完全一样。
-
timezone
默认值:动态获取当前客户端运行系统所在的时区。
为应对多时区的数据写入和查询问题,TDengine 采用 Unix 时间戳(Unix Timestamp)来记录和存储时间戳。Unix 时间戳的特点决定了任一时刻不论在任何时区,产生的时间戳均一致。需要注意的是,Unix时间戳是在客户端完成转换和记录。为了确保客户端其他形式的时间转换为正确的 Unix 时间戳,需要设置正确的时区。
在Linux系统中,客户端会自动读取系统设置的时区信息。用户也可以采用多种方式在配置文件设置时区。例如:
timezone UTC-8 timezone GMT-8 timezone Asia/Shanghai
均是合法的设置东八区时区的格式。但需注意,Windows 下并不支持
timezone Asia/Shanghai
这样的写法,而必须写成timezone UTC-8
。时区的设置对于查询和写入SQL语句中非 Unix 时间戳的内容(时间戳字符串、关键词 now 的解析)产生影响。例如:
SELECT count(*) FROM table_name WHERE TS<'2019-04-11 12:01:08';
在东八区,SQL 语句等效于
SELECT count(*) FROM table_name WHERE TS<1554955268000;
在 UTC 时区,SQL 语句等效于
SELECT count(*) FROM table_name WHERE TS<1554984068000;
为了避免使用字符串时间格式带来的不确定性,也可以直接使用 Unix 时间戳。此外,还可以在 SQL 语句中使用带有时区的时间戳字符串,例如:RFC3339 格式的时间戳字符串,2013-04-12T15:52:01.123+08:00 或者 ISO-8601 格式时间戳字符串 2013-04-12T15:52:01.123+0800。上述两个字符串转化为 Unix 时间戳不受系统所在时区的影响。
启动 taos 时,也可以从命令行指定一个 taosd 实例的 end point,否则就从 taos.cfg 读取。
-
maxBinaryDisplayWidth
Shell 中 binary 和 nchar 字段的显示宽度上限,超过此限制的部分将被隐藏。默认值:30。可在 taos shell 中通过命令 set max_binary_display_width nn 动态修改此选项。
用户管理
系统管理员可以在 CLI 界面里添加、删除用户,也可以修改密码。CLI 里 SQL 语法如下:
CREATE USER <user_name> PASS <'password'>;
创建用户,并指定用户名和密码,密码需要用单引号引起来,单引号为英文半角
DROP USER <user_name>;
删除用户,限 root 用户使用
ALTER USER <user_name> PASS <'password'>;
修改用户密码,为避免被转换为小写,密码需要用单引号引用,单引号为英文半角
ALTER USER <user_name> PRIVILEGE <write|read>;
修改用户权限为:write 或 read,不需要添加单引号
说明:系统内共有 super/write/read 三种权限级别,但目前不允许通过 alter 指令把 super 权限赋予用户。
SHOW USERS;
显示所有用户
注意:SQL 语法中,< >表示需要用户输入的部分,但请不要输入< >本身。
数据导入
TDengine 提供多种方便的数据导入功能,一种按脚本文件导入,一种按数据文件导入,一种是 taosdump 工具导入本身导出的文件。
按脚本文件导入
TDengine 的 shell 支持 source filename 命令,用于批量运行文件中的 SQL 语句。用户可将建库、建表、写数据等 SQL 命令写在同一个文件中,每条命令单独一行,在 shell 中运行 source 命令,即可按顺序批量运行文件中的SQL语句。以‘#’开头的 SQL 语句被认为是注释,shell 将自动忽略。
按数据文件导入
TDengine 也支持在 shell 对已存在的表从 CSV 文件中进行数据导入。CSV 文件只属于一张表且 CSV 文件中的数据格式需与要导入表的结构相同,在导入的时候,其语法如下:
insert into tb1 file 'path/data.csv';
注意:如果 CSV 文件首行存在描述信息,请手动删除后再导入。如某列为空,填NULL,无引号。
例如,现在存在一个子表 d1001, 其表结构如下:
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 |
要导入的 data.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
那么可以用如下命令导入数据:
taos> insert into d1001 file '~/data.csv';
Query OK, 9 row(s) affected (0.004763s)
taosdump工具导入
TDengine 提供了方便的数据库导入导出工具 taosdump。用户可以将 taosdump 从一个系统导出的数据,导入到其他系统中。具体使用方法,请参见:TDengine 数据备份工具: taosdump。
数据导出
为方便数据导出,TDengine 提供了两种导出方式,分别是按表导出和用 taosdump 导出。
按表导出CSV文件
如果用户需要导出一个表或一个 STable 中的数据,可在 taos shell 中运行:
select * from <tb_name> >> data.csv;
这样,表 tb_name 中的数据就会按照 CSV 格式导出到文件 data.csv 中。
用taosdump导出数据
利用 taosdump,用户可以根据需要选择导出所有数据库、一个数据库或者数据库中的一张表,所有数据或一时间段的数据,甚至仅仅表的定义。
具体使用方法,请参见博客:TDengine DUMP 工具使用指南。
系统连接、任务查询管理
系统管理员可以从 CLI 查询系统的连接、正在进行的查询、流式计算,并且可以关闭连接、停止正在进行的查询和流式计算。CLI 里 SQL 语法如下:
SHOW CONNECTIONS;
显示数据库的连接,其中一列显示 ip:port, 为连接的 IP 地址和端口号。
KILL CONNECTION <connection-id>;
强制关闭数据库连接,其中的 connection-id 是 SHOW CONNECTIONS 中显示的第一列的数字。
SHOW QUERIES;
显示数据查询,其中第一列显示的以冒号隔开的两个数字为 query-id,为发起该 query 应用连接的 connection-id 和查询次数。
KILL QUERY <query-id>;
强制关闭数据查询,其中query-id是SHOW QUERIES中显示的 connection-id:query-no字串,如“105:2”,拷贝粘贴即可。
SHOW STREAMS;
显示流式计算,其中第一列显示的以冒号隔开的两个数字为 stream-id, 为启动该 stream 应用连接的 connection-id 和发起 stream 的次数。
KILL STREAM <stream-id>;
强制关闭流式计算,其中的中 stream-id 是 SHOW STREAMS 中显示的 connection-id:stream-no 字串,如 103:2,拷贝粘贴即可。
系统监控
TDengine 启动后,会自动创建一个监测数据库 log,并自动将服务器的 CPU、内存、硬盘空间、带宽、请求数、磁盘读写速度、慢查询等信息定时写入该数据库。TDengine 还将重要的系统操作(比如登录、创建、删除数据库等)日志以及各种错误报警信息记录下来存放在 log 库里。系统管理员可以从 CLI 直接查看这个数据库,也可以在 WEB 通过图形化界面查看这些监测信息。
这些监测信息的采集缺省是打开的,但可以修改配置文件里的选项 monitor 将其关闭或打开。
TDinsight - 使用监控数据库 + Grafana 对 TDengine 进行监控的解决方案
从 2.3.3.0 开始,监控数据库将提供更多的监控项,您可以从 TDinsight Grafana Dashboard 了解如何使用 TDinsight 方案对 TDengine 进行监控。
我们提供了一个自动化脚本 TDinsight.sh
对TDinsight进行部署。
下载 TDinsight.sh
:
wget https://github.com/taosdata/grafanaplugin/raw/master/dashboards/TDinsight.sh
chmod +x TDinsight.sh
准备:
-
TDengine Server 信息:
- TDengine RESTful 服务:对本地而言,可以是
http://localhost:6041
,使用参数-a
。 - TDengine 用户名和密码,使用
-u
-p
参数设置。
- TDengine RESTful 服务:对本地而言,可以是
-
Grafana 告警通知
-
使用已经存在的Grafana Notification Channel
uid
,参数-E
。该参数可以使用curl -u admin:admin localhost:3000/api/alert-notifications |jq
来获取。sudo ./TDinsight.sh -a http://localhost:6041 -u root -p taosdata -E <notifier uid>
-
使用 TDengine 数据源插件内置的阿里云短信告警通知,使用
-s
启用之,并设置如下参数:- 阿里云短信服务Key ID,参数
-I
- 阿里云短信服务Key Secret,参数
K
- 阿里云短信服务签名,参数
-S
- 短信通知模板号,参数
-C
- 短信通知模板输入参数,JSON格式,参数
-T
,如{"alarm_level":"%s","time":"%s","name":"%s","content":"%s"}
- 逗号分隔的通知手机列表,参数
-B
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"}'
- 阿里云短信服务Key ID,参数
-
运行程序并重启 Grafana 服务,打开面板:http://localhost:3000/d/tdinsight
。
更多使用场景和限制请参考TDinsight 文档。
性能优化
注意:碎片重整操作会产生大量磁盘 I/O。因此在重整进行期间,有可能会影响节点的写入和查询性能,甚至在极端情况下导致短时间的应用写入阻塞。
因数据行 update、表删除、数据过期等原因,TDengine 的磁盘存储文件有可能出现数据碎片,影响查询操作的性能表现。从 2.1.3.0 版本开始,新增 SQL 指令 COMPACT 来启动碎片重整过程:
COMPACT VNODES IN (vg_id1, vg_id2, ...)
COMPACT 命令对指定的一个或多个 VGroup 启动碎片重整,系统会通过任务队列尽快安排重整操作的具体执行。COMPACT 指令所需的 VGroup id,可以通过 SHOW VGROUPS;
指令的输出结果获取;而且在 SHOW VGROUPS;
中会有一个 compacting 列,值为 2 时表示对应的 VGroup 处于排队等待进行重整的状态,值为 1 时表示正在进行碎片重整,为 0 时则表示并没有处于重整状态(未要求进行重整或已经完成重整)。
TSZ 压缩算法
TSZ 压缩算法简介
TSZ 压缩算法是 TDengine 为浮点数据类型提供更加丰富的压缩功能,可以实现浮点数的有损至无损全状态压缩,相比原来在 TDengine 中原有压缩算法,TSZ 压缩算法压缩选项更丰富,压缩率更高,即使切到无损状态下对浮点数压缩,压缩率也会比原来的压缩算法高一倍。
适合场景
TSZ 压缩算法压缩率比原来的要高,但压缩时间会更长,即开启 TSZ 压缩算法写入速度会有一些下降,通常情况下会有 20% 左右的下降。影响写入速度是因为需要更多的 CPU 计算,所以从原始数据到压缩好数据的交付时间变长,导致写入速度变慢。如果您的服务器 CPU 配置很高的话,这个影响会变小甚至没有。
另外如果设备产生了大量的高精度浮点数,存储占用的空间非常庞大,但实际使用并不需要那么高的精度时,可以通过 TSZ 压缩的有损压缩功能,把精度压缩至指定的长度,节约存储空间。
总结:采集到了大量浮点数,存储时占用空间过大或出有存储空间不足,需要超高压缩率的场景。
使用步骤
-
检查版本支持,2.4.0.10 及之后 TDengine 的版本都支持此功能
-
配置选项开启功能,在 TDengine 的配置文件 taos.cfg 增加一行以下内容,打开 TSZ 功能
lossyColumns float|double
-
根据自己需要配置其它选项,如果不配置都会按默认值处理。
-
重启服务,配置生效。
-
确认功能已开启,在服务启动过程中输出的信息如果有前面配置的内容,表明功能已生效:
02/22 10:49:27.607990 00002933 UTL lossyColumns float|double
注意事项
-
确认版本是否支持
-
除了服务器启动时的输出的配置成功信息外,不再会有其它的信息输出是使用的哪种压缩算法,可以通过配置前后数据库文件大小来比较效果
-
如果浮点数类型列较少,看整体数据文件大小效果会不太明显
-
此压缩产生的数据文件中浮点数据部分将不能被 2.4.0.10 以下的版本解析,即不向下兼容,使用时避免更换回旧版本,以免数据不能被读取出来。
-
在使用过程中允许反复开启和关闭 TSZ 压缩选项的操作,前后两种压缩算法产生的数据都能正常读取。
文件目录结构
安装 TDengine 后,默认会在操作系统中生成下列目录或文件:
目录/文件 | 说明 |
---|---|
/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 默认日志文件目录。可通过[配置文件]修改位置。 |
可执行文件
TDengine 的所有可执行文件默认存放在 /usr/local/taos/bin 目录下。其中包括:
- taosd:TDengine 服务端可执行文件
- taos:TDengine Shell 可执行文件
- taosdump:数据导入导出工具
- taosBenchmark:TDengine 测试工具
- remove.sh:卸载 TDengine 的脚本,请谨慎执行,链接到 /usr/bin 目录下的 rmtaos 命令。会删除 TDengine 的安装目录 /usr/local/taos,但会保留 /etc/taos、/var/lib/taos、/var/log/taos。
注意:2.4.0.0 版本之后的 taosBenchmark 和 taosdump 需要安装独立安装包 taosTools。
您可以通过修改系统配置文件 taos.cfg 来配置不同的数据目录和日志目录。
TDengine 的启动、停止、卸载
TDengine 使用 Linux 系统的 systemd/systemctl/service 来管理系统的启动和、停止、重启操作。TDengine 的服务进程是 taosd,默认情况下 TDengine 在系统启动后将自动启动。DBA 可以通过 systemd/systemctl/service 手动操作停止、启动、重新启动服务。
以 systemctl 为例,命令如下:
-
启动服务进程:
systemctl start taosd
-
停止服务进程:
systemctl stop taosd
-
重启服务进程:
systemctl restart taosd
-
查看服务状态:
systemctl status taosd
如果服务进程处于活动状态,则 status 指令会显示如下的相关信息:
......
Active: active (running)
......
如果后台服务进程处于停止状态,则 status 指令会显示如下的相关信息:
......
Active: inactive (dead)
......
卸载 TDengine,只需要执行如下命令:
rmtaos
警告:执行该命令后,TDengine 程序将被完全删除,务必谨慎使用。
TDengine参数限制与保留关键字
名称命名规则
- 合法字符:英文字符、数字和下划线
- 允许英文字符或下划线开头,不允许以数字开头
- 不区分大小写
-
转义后表(列)名规则: 为了兼容支持更多形式的表(列)名,TDengine 引入新的转义符 "`"。可用让表名与关键词不冲突,同时不受限于上述表名称合法性约束检查。 转义后的表(列)名同样受到长度限制要求,且长度计算的时候不计算转义符。使用转义字符以后,不再对转义字符中的内容进行大小写统一。
例如:`aBc` 和 `abc` 是不同的表(列)名,但是 abc 和 aBc 是相同的表(列)名。 需要注意的是转义字符中的内容必须是可打印字符。 支持转义符的功能从 2.3.0.1 版本开始。
密码合法字符集
[a-zA-Z0-9!?$%^&*()_–+={[}]:;@~#|<,>.?/]
去掉了 ‘“`\
(单双引号、撇号、反斜杠、空格)
- 数据库名:不能包含“.”以及特殊字符,不能超过 32 个字符
- 表名:不能包含“.”以及特殊字符,与所属数据库名一起,不能超过 192 个字符。每行数据最大长度 48K 个字符(2.1.7.0 之前的版本为 16K,每个 BINARY/NCHAR 类型的列还会额外占用 2 个 byte 的存储位置)
- 表的列名:不能包含特殊字符,不能超过 64 个字符
- 数据库名、表名、列名,都不能以数字开头,合法的可用字符集是“英文字符、数字和下划线”
- 表的列数:不能超过 1024 列,最少需要 2 列,第一列必须是时间戳(从 2.1.7.0 版本开始,改为最多支持 4096 列)
- 记录的最大长度:包括时间戳 8 byte,不能超过 48KB(2.1.7.0 之前的版本为 16K,每个 BINARY/NCHAR 类型的列还会额外占用 2 个 byte 的存储位置)
- 单条 SQL 语句默认最大字符串长度:1048576 byte,但可通过系统配置参数 maxSQLLength 修改,取值范围 65480 ~ 1048576 byte
- 数据库副本数:不能超过 3
- 用户名:不能超过 23 个 byte
- 用户密码:不能超过 15 个 byte
- 标签(Tags)数量:不能超过 128 个,可以 0 个
- 标签的总长度:不能超过 16K byte
- 记录条数:仅受存储空间限制
- 表的个数:仅受节点个数限制
- 库的个数:仅受节点个数限制
- 单个库上虚拟节点个数:不能超过 64 个
- 库的数目,超级表的数目、表的数目,系统不做限制,仅受系统资源限制
- SELECT 语句的查询结果,最多允许返回 1024 列(语句中的函数调用可能也会占用一些列空间),超限时需要显式指定较少的返回数据列,以避免语句执行报错。(从 2.1.7.0 版本开始,改为最多允许 4096 列)
目前 TDengine 有将近 200 个内部保留关键字,这些关键字无论大小写均不可以用作库名、表名、STable 名、数据列名及标签列名等。这些关键字列表如下:
关键字列表 | ||||
---|---|---|---|---|
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 |
转义字符说明
-
转义字符表(转义符的功能从 2.4.0.4 版本开始)
字符序列 代表的字符 \'
单引号' \"
双引号" \n 换行符 \r 回车符 \t tab符 \\
斜杠\ \%
% 规则见下 \_
_ 规则见下 -
转义字符使用规则
- 标识符里有转义字符(数据库名、表名、列名)
- 普通标识符: 直接提示错误的标识符,因为标识符规定必须是数字、字母和下划线,并且不能以数字开头。
- 反引号 `` 标识符: 保持原样,不转义
- 数据里有转义字符
- 遇到上面定义的转义字符会转义(%和_见下面说明),如果没有匹配的转义字符会忽略掉转义符\。
- 对于 % 和 ,因为在 like 里这两个字符是通配符,所以在模式匹配 like 里用
\%
%和\_
表示字符里本身的 % 和 ,如果在 like 模式匹配上下文之外使用\%
或\_
,则它们的计算结果为字符串\%
和\_
,而不是 % 和 _。
- 标识符里有转义字符(数据库名、表名、列名)
诊断及其他
网络连接诊断
当出现客户端应用无法访问服务端时,需要确认客户端与服务端之间网络的各端口连通情况,以便有针对性地排除故障。
目前网络连接诊断支持在:Linux 与 Linux,Linux 与 Windows 之间进行诊断测试。
诊断步骤:
- 如拟诊断的端口范围与服务器 taosd 实例的端口范围相同,须先停掉 taosd 实例
- 服务端命令行输入:
taos -n server -P <port>
以服务端身份启动对端口 port 为基准端口的监听 - 客户端命令行输入:
taos -n client -h <fqdn of server> -P <port>
以客户端身份启动对指定的服务器、指定的端口发送测试包
服务端运行正常的话会输出以下信息:
# 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
客户端运行正常会输出以下信息:
# 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 实例的启动状态,以准确定位问题。
taos -n rpc -h <fqdn of server>
该命令用来诊断已经启动的 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 是否能正常工作。
网络速度诊断
taos -n speed -h <fqdn of server> -P 6030 -N 10 -l 10000000 -S TCP
从 2.2.0.0 版本开始,taos 工具新提供了一个网络速度诊断的模式,可以对一个正在运行中的 taosd 实例或者 taos -n server
方式模拟的一个服务端实例,以非压缩传输的方式进行网络测速。这个模式下可供调整的参数如下:
-n:设为“speed”时,表示对网络速度进行诊断。 -h:所要连接的服务端的 FQDN 或 ip 地址。如果不设置这一项,会使用本机 taos.cfg 文件中 FQDN 参数的设置作为默认值。 -P:所连接服务端的网络端口。默认值为 6030。 -N:诊断过程中使用的网络包总数。最小值是 1、最大值是 10000,默认值为 100。 -l:单个网络包的大小(单位:字节)。最小值是 1024、最大值是 1024 1024 1024,默认值为 1000。 -S:网络封包的类型。可以是 TCP 或 UDP,默认值为 TCP。
FQDN 解析速度诊断
taos -n fqdn -h <fqdn of server>
从 2.2.0.0 版本开始,taos 工具新提供了一个 FQDN 解析速度的诊断模式,可以对一个目标 FQDN 地址尝试解析,并记录解析过程中所消耗的时间。这个模式下可供调整的参数如下:
-n:设为“fqdn”时,表示对 FQDN 解析进行诊断。 -h:所要解析的目标 FQDN 地址。如果不设置这一项,会使用本机 taos.cfg 文件中 FQDN 参数的设置作为默认值。
服务端日志
taosd 服务端日志文件标志位 debugflag 默认为 131,在 debug 时往往需要将其提升到 135 或 143 。
一旦设定为 135 或 143,日志文件增长很快,特别是写入、查询请求量较大时,增长速度惊人。如合并保存日志,很容易把日志内的关键信息(如配置信息、错误信息等)冲掉。为此,服务端将重要信息日志与其他日志分开存放:
- taosinfo 存放重要信息日志, 包括:INFO/ERROR/WARNING 级别的日志信息。不记录DEBUG、TRACE级别的日志。
- taosdlog 服务器端生成的日志,记录taosinfo中全部信息外,还根据设置的日志输出级别,记录DEBUG(日志级别135)、TRACE(日志级别是 143)。
客户端日志
每个独立运行的客户端(一个进程)生成一个独立的客户端日志,其命名方式采用 taoslog+<序号> 的方式命名。文件标志位 debugflag 默认为 131,在 debug 时往往需要将其提升到 135 或 143 。
- taoslog 客户端(driver)生成的日志,默认记录客户端INFO/ERROR/WARNING 级别日志,还根据设置的日志输出级别,记录DEBUG(日志级别135)、TRACE(日志级别是 143)。
其中,日志文件最大长度由 numOfLogLines 来进行配置,一个 taosd 实例最多保留两个文件。
taosd 服务端日志采用异步落盘写入机制,优点是可以避免硬盘写入压力太大,对性能造成很大影响。缺点是,在极端情况下,存在少量日志行数丢失的可能。