1. 背景
TDengine 的 taos.cfg 中配置项及使用 SQL 命令 alter 修改的系统变量之间的关系如何,哪些是持久存储项,哪些设置是临时项,这章将详细说明。
本文是技术参考资料,请收藏。
2.定义
1. 全局配置参数
-
全
局
配置参数
:作用于集群内所有 dnode 且在集群内必须保持一致的变量,也称为全局变量
、系统变量
或全局参数
。例如:
timezone/charset/countAlwaysReturnValue
以上配置必须保持一致,不一致则程序返回结果可能会有问题。
2.局部配置参数
-
局部配置参数
:作用于集群内某个 dnode 或客户端(taosc,视为集群的一个节点) 但不要求集群内必须保持一致的变量,也称为局部参数
或局部变量
;根据作用范围,可分为服务端(dnode)局部变量、客户端(taosc)局部变量
,示例如下:
1) 只适用于 dnode 的局部配置参数:
例如:dDebugFlag/vDebugFlag/numOfMnodeReadThreads/numOfVnodeReadThreads 2) 只适用于客户端 taosc 的局部配置参数:
例如,cDebugFlag/minSlidingTime 3) 既适用于 dnode 也适用于 taosc 的局部配置参数: 例如,debugFlag/firstEp/numOfLogLines/logDir/tempDir
-
客户端局部配置参数通过 clientHb 进行同步,默认与服务端保持一致;需要与服务端不一致的配置参数,可手动在客户端所使用的配置文件中配置。
注:在本文中,”变量“ 和 ”配置参数“ 具有相同含义,视为等价。
3.行为说明
-
系统变量
-
查看系统变量
show variables/show cluster variables;
// 查看系统变量, 二者等价
select * from information_schema.ins_configs;
// 查看系统变量,相比较 show variables 缺少 scope 列
目前,show variables 与 select * from ins_configs 输出内容基本一致,但是用了两种完全不同的实现方式。实际上,二者统一使用 ins_configs 的机制即可。
-
增加 category 以区分变量类别,
global
表示系统变量,local
表示局部变量。示例如下,因为show variables
的作用就是展示系统变量,所以以下输出中的category
字段的值均为global
。
taos> show variables; name | value | scope| category| ============================================================================================= statusInterval | 1 | statics | global| timezone | Asia/Shanghai (CST, +0800) | sysconf | global| locale | en_US.UTF-8 | sysconf | global| charset | UTF-8 | sysconf | global| monitor | 1 | monitor | global| monitorInterval | 30 | monitor | global| slowLogThreshold | 10 | slowlog | global| slowLogMaxLen | 4096 | slowlog | global| slowLogScope | QUERY | slowlog | global| ...
Query OK, 9 row(s) in set (0.002328s)
-
系统变量列表
-
以下变量在 3.3.4.0 版本开始被归类为
系统变量
:
变量名称 | 说明 | 取值范围 | 默认值 | 动态修改 | 类别 | 适用范围 | 备注 |
timezone | 时区 | 系统时区 | 是 | sysconf | server | 不建议下发至客户端, | |
locale | 系统区位信息及编码格式 | 系统 local | 是 | sysconf | server | 不建议下发至客户端, | |
字符集编码 | 系统 charset | 是 | sysconf | server | |||
enableWhiteList | 是否打开白名单功能 | [0,1] | 0 | 是 | permission | server | |
statusInterval | dnode 向 mnode 报告状态间隔 | [1,30] | 1 秒 | 是 | statis | server | |
monitor | 是否开启监控 | 0,1 | 1 开启 | 是 | monitor | server | |
monitorInterval | 监控上报间隔 | [1,86400] | 30 秒 | 是 | monitor | server | |
monitorComp | 在上报 monitor 消息时,是否采用压缩方式 | 0: 不压缩, 1:压缩 | 0 | 是/重启生效 | monitor | server | |
monitorForceV2 | 是否使用V2版本监控 | 0/1 | 1 | 是 | monitor | server | |
monitorLogProtocol | 是否打印监控日志 | 0/1 | 0 | 是 | monitor | server | |
monitorMaxLogs | 在每个 montior 上报时间间隔,可以缓存的待上报日志条数 | [1,1000000] | 100 | 是 | monitor | server | |
audit | 是否开启申计功能 | 0:不开启,1:开启 | 1 | 是 | audit | server | |
auditCreateTable | 是否针对建表开启申计功能 | 0:不开启,1:开启 | 1 | 是 | audit | server | |
auditInterval | 申计上报周期 | [500,200000] 毫秒 | 5000 | 是 | audit | server | |
compressMsgSize | 表示是否对RPC消息进行压缩 | -1: 所有消息都不压缩 0: 所有消息都压缩 N: N>0,表示大于N字节的消息进行压缩 | -1 | 是/重启生效 | compress | both | |
compressor | 默认压缩算法 | ZSTD_COMPRESSOR | 是 | compress | server | ||
curRange | current quantization intervals | [0,65536] | 100 | 是 | compress | server | |
dPrecision | double column precision | [0.0,1000000.0] | 1E-16 | 是 | compress | server | |
fPrecision | float column precision | [0.0, 100000.0] | 0.00000001 | 是 | compress | server | |
ifAdtFse | ADT-FSE algorithom or original huffman algorithom | 0,1 | 0 | 是 | compress | server | |
maxRange | max quantization intervals | [0,65536] | 500 | 是/重启生效/暂不支持 | compress | server | |
arbCheckSyncIntervalSec | 双活模块同步间隔时间 | [1,60*24*2] | 10 | 否/暂不支持 | dual replica | server | |
arbHeartBeatIntervalSec | 双活模块心跳间隔时间 | [1,60*24*2] | 5 | 否/暂不支持 | dual replica | server | |
arbSetAssignedTimeoutSec | 双活模块超时时间 | [1,60*24*2] | 30 | 否/暂不支持 | dual replica | server | |
encryptAlgorithm | 加密算法 | 否/暂不支持 | encrypt | server | |||
encryptScope | 加密范围 | 否/暂不支持 | encrypt | server | |||
experimental | 实验开关 | 0/1 | 1 | 是/重启生效 | query | both | |
maxTsmaNum | 集群内一共可创建TSMA个数受参数`maxTsmaNum`限制.注意, 由于TSMA后台计算使用流计算, 因此每创建一条TSMA, 将会创建一条流, 因此能够创建的TSMA条数也受当前已经存在的流条数和最大可创建流条数限制. | [0,3] | 3 | 是 | query | server | |
queryRsmaTolerance | 表示用于判定查询哪一级 rsma 数据时的容忍时间,单位为毫秒 | [0, 900000] | 1000 | 否 | query | server | |
queryRspPolicy | 查询响应策略 | 0: delay 1: quick | 0 | 是 | query | server | |
countAlwaysReturnValue | count/hyperloglog函数在输入数据为空或者NULL的情况下是否返回值 | 0:返回空行1:返回 0 | 1 | 是 | query | both | |
uptimeInterval | dnode 向 mnode 报告启动状态的时间间隔,单位为秒 | [1,100000] | 300 | 是 | statis | server | |
timeseriesThreshold | vnode 测点数变化上报门限值 | [0,2000] | 50 | 是 | statis | server | |
s3Accesskey | s3 密钥 | 是/重启生效 | s3 | server | |||
s3BucketName | s3 桶名 | 是/重启生效 | s3 | server | |||
s3Endpoint | s3 使用的 endpoint | 是/重启生效 | s3 | server | |||
s3PageCacheSize | s3 page cache 缓存页数目,单位:页。最小值:4;最大值:1024*1024*1024。 | [4,1024*1024*1024] | 4096 | 是/重启生效 | s3 | server | |
s3UploadDelaySec | data 文件不再变动后延迟多久上传至 s3,单位:秒 | [1,60 * 60 * 24 * 30] | 60 | 是 | s3 | server | |
mndSdbWriteDelta | 单个文件的日志数目阈值,到达此阈值,mnode元数据会落盘,此时将产生新的wal文件。 | 条 | 200 | 是 | sdb | server | |
checkpointInterval | checkponit 同步间隔 | [60,1800] | 60 | 是 | stream | server | |
concurrentCheckpoint | 当前 checkpoint | [1,10] | 1 | 是 | stream | server | |
disableStream | 是否启用流计算功能 | 0/1 | 0 | 是/重启生效 | stream | server | |
resolveFQDNRetryTime | 启动时,解析FQDN失败会重试,一秒一次,该参数指定重试的次数 | 单位秒 | 100 | 否 | sync | server | |
syncElectInterval | raft定时器在 syncElectInterval 与 2 * syncElectInterval (2.5秒-5秒)之间选择一个随机值,作为下次发起选举的时间。 | 单位:毫秒 | 2500 | 是 | sync | server | |
syncHeartbeatInterval | raft leader 向follwer发送心跳消息的时间间隔,以维持自己的leader状态。 | 单位:毫秒 | 1000 | 是 | sync | server | |
syncHeartbeatTimeout | raft leader 在 指定时间内如果收不到quorum-1个follower 心跳消息的回应,则认为当前集群内没有quorum个节点互通,无法正常工作。对于新来的请求,直接拒绝服务。 | 单位:毫秒 | 20000 | 是 | sync | server | |
syncSnapReplMaxWaitN | [16,4096] | 128 | 是 | sync | server | ||
syncLogBufferMemoryAllowed | [104857600,INT64_MAX] | 0 | sync | server | |||
telemetryInterval | 用来上传 telemetry 的时间间隔,单位为秒,仅用于内部测试 | [0,200000] | 43200 | 是 | telemetry | both | |
telemetryPort | 上传 telemtry 信息的服务所监听的端口,仅用于内部测试 | [1, 65056] | 80 | 否 | telemetry | both | |
telemetryReporting | 是否允许 TDengine 采集和上报 基本使用信息 | 0: 不允许 1:允许 | 1 | 否 | telemetry | both | |
telemetryServer | 上传 telemetry 信息的域名, 仅用于内部测试 | telemetry.taosdata.com | 否 | telemetry | both | ||
mqRebalanceInterval | 检测rebalance的间隔时间 | 2 秒 | 是 | tmq | server | ||
tmqMaxTopicNum | 支持最大的 topic 数量 | 是 | tmq | server | |||
tmqRowSize | 是 | tmq | server | ||||
transPullupInterval | 当有对 mnode 操作因为错误而未执行结束时,mnode 下次发起重试的时间间隔 | [1,10000] | 2 | 是 | transaction | server | |
keepAliveIdle | 空闲连接保持时间 | [1,7200000] | 60 | 是 | transport | both | |
maxRetryWaitTime | 重连最大超时时间 | [0,86400000] | 10000 | 是/重启生效 | transport | both | |
maxShellConns | 一个 dnode 容许的连接数 | [10,50000000] | 5000 | 是/重启生效 | transport | server | |
numOfRpcSessions | 创建的最大连接数 | [1,100000] | 30000 | 是/重启生效 | transport | both | |
numOfRpcThreads | RPC的收发线程数目 | 最大值为 20 | CPU核数的1/2 | 是/重启生效 | transport | both | |
rpcQueueMemoryAllowed | 接收到的 RPC 消息,如果没有被处理,会暂存在 dnode 的待处理队列中;通过这个值控制该队列的大小,避免累积消息过多,导致内存无限上涨直到 OOM | 100M ~ 10G | 系统总内存的 1/10 | 是 | transport | both | |
shellActivityTimer | [1,120] | 3 | 是/重启生效 | transport | both | ||
timeToGetAvailableConn | 获得可用连接的最长等待时间,单位为毫秒 | [10,50000000] | 500000 | 是/重启生效 | transport | both | |
tsReadTimeout | 单个请求最小超时时间,取值范围 64-604800,单位为秒,默认值 900 | ||||||
compactPullupInterval | 是 | tsdb | server | ||||
cacheLazyLoadThreshold | 是 | tsdb | server | ||||
maxCompactConcurrency | 控制 1 个 dnode 上 compact 任务的并发度 | [0, 16],0 表示不限制 | 2 | 是 | tsdb | server | |
retentionSpeedLimitMB | 数据文件多级存储间迁移限速 | [0,1024] | 0 不限速 | 是 | tsdb | server | |
trimVDbIntervalSec | 数据文件迁移触发周期 | [1,100000] | 3600 | 是 | tsdb | server | |
ttlChangeOnWrite | 表的修改操作是否改变表的TTL | 0,1 | 0 不改变 | 是 | ttl | 服务端 | |
ttlBatchDropNum | 是 | ttl | server | ||||
ttlFlushThreshold | 是 | ttl | server | ||||
ttlPushInterval | ttl 检测超时频率 | 是 | ttl | server | |||
ttlUnit | ttl 参数的单位 | 是 | ttl | server | |||
udf | 是否启动 udf 功能 | 是/重启生效 | udf | server | |||
udfdLdLibPath | 是/重启生效 | udf | server | ||||
udfdResFuncs | 是/重启生效 | udf | server | ||||
mndLogRetention | 累积文件的日志数目阈值,到达此阈值会进行清理,清理从最老的日志文件开始。单位条 | [500,10000] | 2000 | 是 | wal | server | |
walFsyncDataSizeLimit | [100*1024*1024,INT64_MAX] | 100*1024*1024 | 是 | wal | server | ||
randErrorChance | [0,10000] | 1 | 否 | catalog | both | ||
randErrorDivisor | telemetryInterval | [1,INT64_MAX] | 10001 | 否 | catalog | both | |
randErrorScope | [0,INT64_MAX] | 否 | catalog | both | |||
numOfCores | CPU 核数 | [1,100000] | 2 | 是/重启生效 | conf | both | |
crashReporting | 是否上报crash | 0/1 | 企业版:0 社区版: 1 | 是 | crash | both | |
enableCoreFile | 是否生成 core 文件 | 0/1 | 1 | 是 | crash | both | |
slowLogThreshold | 慢查询门限值,大于等于为慢查询 | [1, INT32_MAX] | 10 秒 | 是 | slowlog | 客户端 | 服务端配置,下发给客户端 |
slowLogThresholdTest | 慢查询门限值,大于等于为慢查询(仅用于测试) | [0, INT32_MAX] | INT32_MAX | 是 | slowlog | 客户端 | 服务端配置,下发给客户端 |
slowLogMaxLen | 慢查询日志最大长度 | [1,16384] | 4096 | 是 | slowlog | 客户端 | 服务端配置,下发给客户端 |
slowLogScope | 慢查询记录类型 | ALL, QUERY, INSERT, OTHERS, NONE | ALL | 是 | slowlog | 客户端 | 服务端配置,下发给客户端 |
slowLogExceptDb | 指定的 db(目前只支持一个) 不上报慢查询 | 是 | slowlog | 客户端 | 服务端配置,下发给客户端 |
-
修改系统变量
通过任意客户端修改系统变量,该系统变量的修改会被自动传递到集群中的所有 dnode 并被持久化,在集群重启后仍然有效。修改系统变量使用如下命令。
alter all dnodes '${systemVariableName}' '${value}';
-
校验新的系统变量取值是否在取值范围内,如果不在取值范围内则报错,并提示用户正确的取值范围。
-
使用 alter dnode dnode_id 会提示参数不合法。
-
dnode 局部变量
-
查看 dnode 变量
-
增加了类别 catetory 列,以区分不同类型的变量。
-
目前,show dnode {dnodeId} variables 会显示适用于 dnode 的所有变量,包含局部变量和系统变量。
dnode_id | name | value | scope| category| =========================================================================================== 1 | firstEp | u3-31:6030 | cluster | local | 1 | secondEp | u3-31:6030 | cluster | local | 1 | fqdn | u3-31 | cluster | local | 1 | serverPort | 6030 | cluster | local | 1 | tempDir | /tmp/ | conf | local | 1 | minimalTmpDirGB | 1.000000 | query | local | 1 | shellActivityTimer | 3 | transport | local | 1 | compressMsgSize | -1 | compress | local | ... Query OK, 194 row(s) in set (0.010489s)
-
dnode 局部变量列表
该列表包含在 dnode 生效的配置参数(不包含全局配置参数)。
变量名称 | 说明 | 取值范围 | 默认值 | 动态修改 | 类别 | 适用范围 | 备注 |
forceReadConfig | 强制使用配置文件中的参数。 | [0,1] | 0 | 否 | |||
firstEp | taosd 或者 taos 启动时,主动连接的集群中首个 dnode 的 endpoint | localhost:6030 | 否 | cluster | both | ||
fqdn | 数据节点的 FQDN。如果习惯 IP 地址访问,可设置为该节点的 IP 地址。 | 缺省为操作系统配置的第一个 hostname | 否 | cluster | both | ||
secondEp | taosd 或者 taos 启动时,如果 firstEp 连接不上,尝试连接集群中第二个 dnode 的 endpoint | 无 | 否 | cluster | both | ||
serverPort | taosd 启动后,对外服务的端口号 | 6030 | 否 | cluster | both | ||
configDir | 配置文件目录 | /etc/taos/ | 否 | conf | both | ||
logDir | 日志目录 | /var/log/taos/ | 是/重启生效 | conf | both | ||
scriptDir | 配置文件目录 | /etc/taos/ | 否 | conf | both | ||
tempDir | 该参数指定所有系统运行过程中的临时文件生成的目录 | /tmp/ | 是 | conf | both | ||
dataDir | 数据目录 | /var/lib/taos | 否 | conf | server | ||
supportVnodes | 节点支持的最大 vnode 数 | [0,4096] | CPU 核数的 2倍 | 是 | conf | server | |
numOfCommitThreads | 异步落盘模式下的后台落盘线程数目 | [1, 1024] | 4 | 是/重启生效 | tsdb | server | |
debugFlag | 日志级别 | 131 | 是 | debug | both | ||
rpcDebugFlag | 日志级别 | 131 | 是 | debug | both | ||
simDebugFlag | 日志级别 | 131 | 是 | debug | both | ||
tmrDebugFlag | 日志级别 | 131 | 是 | debug | both | ||
uDebugFlag | 日志级别 | 131 | 是 | debug | both | ||
dDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
fsDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
idxDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
mDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
metaDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
sDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
smaDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
sndDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
stDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
tdbDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
tqDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
tsdbDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
udfDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
vDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
wDebugFlag | 日志级别 | 131 | 是 | debug | server | ||
qDebugFlag | 日志级别 | 131 | 是 | debug | both | ||
asyncLog | 异步日志 | 0/1 | 1 | 是 | log | both | |
logKeepDays | 日志保留天数 | [-365000,365000] | 0(1天内) | 是 | log | both | |
minimalLogDirGB | 日志目录最小可用空间 | [0.001, 10000000] | 1GB | 是 | log | both | |
numOfLogLines | 日志文件最大行数 | [1000,2000000000] | 10000000 | 是 | log | both | |
monitorFqdn | taosKeeper 监控服务的 FQDN | 是/重启生效 | monitor | server | |||
monitorPort | taosKeeper 监控服务端口号 | [1,65056] | 6043 | 是/重启生效 | monitor | server | |
tsShareConnLimit | 一个链接可以共享的请求的数目,取值范围 1-512,默认值 10 | 1-512 | 10 | 是/重启生效 | |||
minimalTmpDirGB | 该参数指定临时文件夹所需要保留的最小空间,小于这个空间,taosd 服务启动会失败。 | [0.001, 10000000] | 1 | 是 | query | both | |
tagFilterCache | 0/1 | 0 | 否 | query | both | ||
filterScalarMode | 强制使用标量过滤模式。0:关闭;1:开启。 | 0/1 | 0 | 否 | query | server | |
numOfMnodeReadThreads | mnode 用来处理读请求的线程数目 | [1,4] | CPU核数的1/8 | 是/重启生效 | query | server | |
numOfQnodeQueryThreads | qnode 用来处理请求的线程数 | [1, 1024] | CPU核数的2倍 | 是/重启生效 | query | server | |
numOfVnodeFetchThreads | vnode 用来处理数据请求和控制消息的线程数目 | [4,1024] | CPU核数的1/4 | 是/重启生效 | query | server | |
numOfVnodeQueryThreads | vnode 用来处理查询请求的线程数目 | [1, 1024] | CPU核数的2倍 | 是/重启生效 | query | server | |
numOfVnodeRsmaThreads | vnode 用来处理 rsma 数据生成的线程数 | [1,1024] | max(cpu核数,4) | 是/重启生效 | query | server | |
pqSortMemThreshold | 执行计划中sort Node判断是否使用优先级队列进行纯内存排序的内存估算阈值, 通过Table Scan的行长度以及配置大小估算出内存中能存下的最大行数, 若limit的行数小于此行数, 则会进入该逻辑 | 单位: M 1. 服务端配置, 不能动态调整 2. 取值范围: 1 ~ 10240, 即1MB ~ 10GB | 256 | 否 | query | server | |
queryBufferSize | 现在 3.0 没有应用内存控制策略,该参数暂不起作用 | [-1, 500000000000] | -1 | 是/重启生效 | query | server | |
rsyncPort | rsync 端口号 | [1,65535] | 873 | 是/重启生效 | stream | both | |
checkpointBackupDir | 是/重启生效 | stream | server | ||||
maxStreamBackendCache | 单个vnode上rocksdb的cache限制,到达此阈值之后,会进行write buffer 的 flush, 可能进一步触发rocksdb 内部的compaction. | 单位: M 1. 服务端的配置, 不能动态调整,如果需要调整,需要重启taosd 2. 如果用户配置为M,会向上取整到2^N, 假设用户配置25,那么会去整到32 3. 取值范围: 16~1024 | 128 | 是/重启生效 | stream | server | |
ratioOfVnodeStreamThreads | [0.01,4] | 0.5 | 是/重启生效 | stream | server | ||
snodeAddress | 是/重启生效 | stream | server | ||||
streamAggCnt | [2,INT32_MAX] | INT32_MAX | 是 | stream | server | ||
streamBufferSize | 流计算缓存大小 | [0,INT64_MAX] | 128M | 是/重启生效 | stream | server | |
streamSinkDataRate | [0.1,5] | 2 | 是/重启生效 | stream | server | ||
minDiskFreeSize | 是 | tsdb | server | ||||
minimalDataDirGB | 否 | tsdb | server | ||||
bypassFlag | 是 | both |
-
查看 dnode 只读局部变量
使用以下命令查看 readonly 变量。(readonly 变量大多为系统信息,仅做展示但不可修改)
show dnode {dnodeId} variables readonly
-
dnode 只读局部变量列表
变量名称 | 说明 | 取值范围 | 默认值 | 动态修改 | 类别 | 适用范围 | 备注 |
buildinfo | 版本打包信息 | 否 | build | both | |||
compatible_version | 兼容版本号 | 否 | build | both | |||
gitinfo | 打包使用的 commit id | 否 | build | both | |||
version | taosd 版本号 | 否 | build | both | |||
openMax | <系统信息> | 否 | os | both | |||
os machine | <系统信息> | 否 | os | both | |||
os nodename | <系统信息> | 否 | os | both | |||
os release | <系统信息> | 否 | os | both | |||
os sysname | <系统信息> | 否 | os | both | |||
os version | <系统信息> | 否 | os | both | |||
pageSizeKB | <系统信息> | 否 | os | both | |||
streamMax | <系统信息> | 否 | os | both | |||
totalMemoryKB | <系统信息> | 否 | os | both | |||
avx | <系统信息> | 否 | perf | both | |||
avx2 | <系统信息> | 否 | perf | both | |||
avx512 | <系统信息> | 否 | perf | both | |||
AVX512Enable | 是否开启 AVX512 | 0/1 | 0 | 是 | perf | both | |
fma | <系统信息> | 否 | perf | both | |||
simdEnable | 是否开启simd | 0/1 | 0 | 是 | perf | both | |
ssd42 | <系统信息> | 否 | perf | both |
-
修改 dnode 局部变量
dnode 的局部变量被修改后只对当前 dnode 生效,并被自动持久化,在 dnode 重启后仍然有效。
alter dnode ${dnodeId} '${dnodeVariableName} ${value}' alter all dnodes '${dnodeVariableName} ${value}'
-
检查局部变量是否支持动态修改,如果不支持则报错,提示用户当前局部变量不支持修改。
-
检查新的局部变量取值是否在取值范围内,如果不在取值范围内则报错,并提示用户当前局部变量的取值范围。
-
客户端(taosc)局部变量
-
查看客户端变量
-
增加了类别 catetory 列,以区分不同类型的变量。
-
show local variables 显示应用于当前客户端 (taosc实例)的变量
taos> show local variables; name | value | scope| category| ==================================================================================== firstEp | u3-31:6030 | cluster | local| secondEp | u3-31:6030 | cluster | local| fqdn | u3-31 | cluster | local| serverPort | 6030 | cluster | local| tempDir | /tmp/ | conf | local| minimalTmpDirGB | 1.000000 | query | local| shellActivityTimer | 3 | transport | local| compressMsgSize | -1 | compress | local| queryPolicy | 1 | query | local| enableQueryHb | 1 | query | local| enableScience | 0 | query | local| querySmaOptimize | 0 | query | local| queryPlannerTrace | 0 | query | local| queryNodeChunkSize | 32768 | query | local| ... Query OK, 80 row(s) in set (0.001913s)
-
客户端(taosc)局部变量列表
该列表包含在 taosc 生效的配置参数(不包含全局配置参数)。
变量名称 | 说明 | 取值范围 | 默认值 | 动态修改 | 类别 | 适用范围 | 备注 | |
firstEp | taosd 或者 taos 启动时,主动连接的集群中首个 dnode 的 endpoint | localhost:6030 | 是 | cluster | both | |||
fqdn | 数据节点的 FQDN。如果习惯 IP 地址访问,可设置为该节点的 IP 地址。 | 缺省为操作系统配置的第一个 hostname | 是 | cluster | both | |||
secondEp | taosd 或者 taos 启动时,如果 firstEp 连接不上,尝试连接集群中第二个 dnode 的 endpoint | 无 | 是 | cluster | both | |||
serverPort | taosd 启动后,对外服务的端口号 | 6030 | 是 | cluster | both | |||
configDir | 配置文件目录 | 否 | conf | both | ||||
logDir | 日志目录 | /var/log/taos/ | 是 | conf | both | |||
tempDir | 临时文件路径 | 否 | conf | both | ||||
debugFlag | 日志级别 | 131 | 是 | debug | both | |||
rpcDebugFlag | 日志级别 | 131 | 是 | debug | both | |||
simDebugFlag | 日志级别 | 131 | 是 | debug | both | |||
tmrDebugFlag | 日志级别 | 131 | 是 | debug | both | |||
uDebugFlag | 日志级别 | 131 | 是 | debug | both | |||
qDebugFlag | 日志级别 | 131 | 是 | debug | both | |||
cDebugFlag | 日志级别 | 131 | 是 | debug | client | |||
jniDebugFlag | 日志级别 | 131 | 是 | debug | client | |||
asyncLog | 异步日志 | 0/1 | 1 | 是 | log | both | ||
logKeepDays | 日志保留天数 | [-365000,365000] | 0(1天内) | 是 | log | both | ||
minimalLogDirGB | 日志目录最小可用空间 | [0.001, 10000000] | 1GB | 是 | log | both | ||
numOfLogLines | 日志文件最大行数 | [1000,2000000000] | 10000000 | 是 | log | both | ||
minimalTmpDirGB | 该参数指定临时文件夹所需要保留的最小空间,小于这个空间,taosd 服务启动会失败。 | [0.001, 10000000] | 1 | Y | query | both | ||
tagFilterCache | 0/1 | 0 | 是 | query | both | |||
metaCacheMaxSize | 指定单个客户端元数据缓存大小的最大值,单位 MB | [-1,INT32_MAX] | -1 (无限制) | 是 | catalog | client | ||
useAdapter | 是否使用 adapter | 0/1 | 0 | 是 | insert | client | ||
minIntervalTime | interval窗口的最小允许值 | [1,1000000] 单位:同数据库时间单位 | 1 | 是 | query | client | ||
minSlidingTime | sliding 的最小允许值 | [1,1000000] 单位:同数据库时间单位 | 1 | 是 | query | client | ||
enableQueryHb | 0/1 | 1 | 否 | query | client | |||
enableScience | 是否开启科学计数法显示浮点数 | 0/1 | 0 | 是 | query | client | ||
keepColumnName | Last、First、LastRow 函数查询且未指定别名时,自动设置别名为列名(不含函数名),因此 order by 子句如果引用了该列名将自动引用该列对应的函数 | 1 表示自动设置别名为列名(不包含函数名) 0 表示不自动设置别名。 | 0 | 是 | query | client | ||
maxTsmaCalcDelay | 单位 s,用于控制用户可以接受的 TSMA 计算延迟,若 TSMA 的计算进度与最新时间差距在此范围内, 则该 TSMA 将会被使用, 若超出该范围, 则不使用, | 最小值: 600(10 分钟), 最大值: 86400(1 天) | 默认值: 600(10 分钟) | 是 | query | client | ||
multiResultFunctionStarReturnTags | 查询超级表时,last(\*)/last_row(\*)/first(\*) 是否返回标签列;查询普通表、子表时,不受该参数影响 | 0:不返回标签列,1:返回标签 | 0 | 是 | query | client | ||
numOfTaskQueueThreads | Taos-c-driver 业务callback处理线程数 | 最大值为10 | CPU核数的1/2 | 是/重启生效 | query | client | ||
queryMaxConcurrentTables | [INT64_MIN,INT64_MAX] | 200 | 否 | query | client | |||
queryPlannerTrace | 查询计划是否输出详细日志 | 0/1 | 0 | 是 | query | client | ||
queryNodeChunkSize | [1024,128*1024] | 30*1024 | 是 | query | client | |||
queryPolicy | 查询语句的执行策略 | 1: 只使用 vnode,不使用 qnode; 2: 没有扫描算子的子任务在 qnode 执行,带扫描算子的子任务在 vnode 执行; 3: vnode 只运行扫描算子,其余算子均在 qnode 执行 | 1 | 是 | query | client | ||
queryTableNotExistAsEmpty | 是 | query | clinet | |||||
querySmaOptimize | 用于控制查询时是否使用TSMA | 1为使用, 0为不使用即从原始数据查询. | 0 | 是 | query | client | ||
queryUseNodeAllocator | 0/1 | 1 | 是 | query | client | |||
tsmaDataDeleteMark | 单位毫秒, 与流计算参数`deleteMark`一致, 用于控制流计算中间结果的保存时间, 默认值为: 1d, 最小值为1h. 因此那些距最后一条数据时间大于配置参数的历史数据将不保存流计算中间结果, 因此若修改这些时间窗口内的数据, TSMA的计算结果中将不包含更新的结果. 即与查询原始数据结果将不一致. | [60*60*1000,INT64_MAX] | 1天 | 是 | query | client | ||
smlAutoChildTableNameDelimiter | 是 | schemaless | client | |||||
smlChildTableName | 是 | schemaless | client | |||||
smlDot2Underline | 只在client端起作用,目的是为了兼容 schemaless 写入协议中已有存在点号(.)的逻辑。 | 1: schemaless自动建表的表名如果有点号(.),会自动替换为下划线(_) 0: 不进行替换,保留 "." Note: 如果配置了 smlChildTableName ,手动指定子表名的话,子表名里有点号(.),同样按照上面的配置逻辑处理。 | 1 | 是 | schemaless | client | ||
smlTagName | schemaless tag 为空时默认的 tag 名字 | _tag_null | 是 | schemaless | client | |||
smlTsDefaultName | schemaless自动建表的时间列名字通过该配置设置 | _ts | 是 | schemaless | client | |||
maxInsertBatchRows | ||||||||
bypassFlag | 是 | both |
-
查看客户端 (taosc) 只读局部变量
使用以下命令查看 readonly 变量。(readonly 变量大多为系统信息,仅做展示但不可修改)
show local variables readonly
-
客户端 (taosc) 只读局部变量列表
变量名称 | 说明 | 取值范围 | 默认值 | 动态修改 | 类别 | 适用范围 | 备注 |
buildinfo | 版本打包信息 | 否 | build | both | |||
compatible_version | 兼容版本号 | 否 | build | both | |||
gitinfo | 打包使用的 commit id | 否 | build | both | |||
version | taosd 版本号 | 否 | build | both | |||
openMax | <系统信息> | 否 | os | both | |||
os machine | <系统信息> | 否 | os | both | |||
os nodename | <系统信息> | 否 | os | both | |||
os release | <系统信息> | 否 | os | both | |||
os sysname | <系统信息> | 否 | os | both | |||
os version | <系统信息> | 否 | os | both | |||
pageSizeKB | <系统信息> | 否 | os | both | |||
streamMax | <系统信息> | 否 | os | both | |||
totalMemoryKB | <系统信息> | 否 | os | both | |||
avx | <系统信息> | 否 | perf | both | |||
avx2 | <系统信息> | 否 | perf | both | |||
avx512 | <系统信息> | 否 | perf | both | |||
AVX512Enable | 是否开启 AVX512 | 0/1 | 0 | 是 | perf | both | |
fma | <系统信息> | 否 | perf | both | |||
simdEnable | 是否开启simd | 0/1 | 0 | 是 | perf | both | |
ssd42 | <系统信息> | 否 | perf | both |
-
修改客户端局部变量
通过 taos shell 或 API 修改客户端局部变量后,在该 taos shell 实例或客户端程序的运行期间有效,退出重启后失效,需要重新设置。
alter local '${localVariableName} {value}';
-
检查局部变量是否支持动态修改,如果不支持则报错,提示用户当前局部变量不支持修改。
-
检查新的局部变量取值是否在取值范围内,如果不在取值范围内则报错,并提示用户当前局部变量的取值范围。
-
taosd 行为
-
启动时配置文件中 forceReadConfig 为 1
taosd 成功启动后会自动将所有生效的系统变量和局部变量(无论它们的来源是配置文件还是默认值)自动持久化到内部存储中,该内部存储对用户不可见不可修改。人工修改内部存储的变量会导致不可预测的产品行为,涛思数据不对此行为负责。
集群中每个节点的首次启动无论 forceReadConfig 是否打开均需要读取指定配置文件或者使用默认配置文件。
-
启动时配置文件中 forceReadConfig 为 0
如果启动时关闭 forceReadConfig ,则 taosd 仅会读取 dataDir 参数,然后自动使用系统上次运行时持久化的系统变量和局部变量。如果本次启动为该集群中本节点 taosd 的首次启动,或者集群中不存在内部持久化的系统变量和局部变量,则 taosd 会自动使用默认配置文件启动。如果默认配置文件不存在或存储配置错误,则启动失败。
-
修改系统变量或 dnode 局部变量
在集群首次启动以后,所有的配置参数修改都推荐使用 SQL 命令进行,否则极易造成配置参数的错误、不一致以及过往配置的丢失。
部分参数需要重启后生效,则不改动当前内存中的值,仅做持久化,避免前后参数不一致带来的问题。
-
细分场景
-
集群首次启动:
-
集群中的第一个节点,必须指定配置文件或者使用默认配置文件
-
集群中的第二到第N个节点,同上,如果配置文件中存在系统变量不一致的情况,报错退出
-
-
集群中的某个节点重启(在集群中其它节点仍然存活的情况下):
-
(推荐)指定配置文件并且forceReadConfig配置为0,需保证配置文件中包含 dataDir ,则使用持久化的局部变量;同时校验参数版本号是否落后于集群版本,如果落后于集群,则从集群中重新拉取系统变量,否则使用本地存储的系统变量。
-
(不推荐)指定配置文件并且forceReadConfig配置为1,则全部使用配置文件(配置文件中没有的使用默认值)启动,如果存在与集群中系统变量不一致的情况则报错退出。重启成功后会自动覆盖持久化的局部变量。
-
-
集群停止后,重新启动集群中的第一个节点
-
(推荐)指定配置文件并且forceReadConfig配置为0,需保证配置文件中包含 dataDir ,则使用持久化的系统变量和局部变量。
-
(不推荐)指定配置文件并且forceReadConfig配置为1,则全部使用配置文件(配置文件中没有的使用默认值)启动,重启成功后会自动覆盖持久化的系统变量和局部变量。
-
-
taos shell 行为
-
启动 taos shell
taos shell 启动时如果指定配置文件则使用该配置文件,如果不指定配置文件则使用默认配置文件。如果指定的配置文件或默认配置文件中有配置错误则启动失败。
-
修改 taos shell 所在客户端配置
如果希望对 taos shell 所使用的客户端配置参数进行修改,最佳实践是修改配置文件(以达到持久化目的)并重启 taos shell。如果使用 SQL 命令动态修改,也建议同步修改配置文件,否则下次重启后要重复进行同样的动态修改。
-
如何新增参数 (供研发参考)
如何增加配置参数
-
增加磁盘 disk id 检测功能
背景:
用户在停机后,重启数据库服务前,可能会忘记进行磁盘挂载,在一个空目录下重启数据库服务,并且用户不清楚数据已经丢失,可能运行一段时间才会发现。这样无疑给用户造成了损失,并且增加了运维成本。
功能概述:
基于配置参数的持久化功能,taosd 会在首次启动时,持久化各个数据目录对应的 disk id ,在 taosd 重启时,会校验当前各个数据目录所对应的 disk id 和之前记录的 disk id 是否一致,如果不一致则退出数据库服务,并提示用户检查是否磁盘忘记挂载。如果用户主动切换磁盘,可以通过设置参数diskIDCheckEnabled 跳过检查。
-
taosd 行为
集群初始化启动 | 集群中的节点重新启动 | 集群的升级 | |
全局配置参数 更新立即生效 |
| 校验参数版本号是否落后于集群,如果落后于集群,则从集群中重新拉取系统变量,否则使用本地存储(dataDir中)的全局配置参数。 |
|
全局配置参数 需要重启生效 | 同上 | 同上 |
|
局部配置参数 动态计算 | 集群节点在首次启动时,将配置文件中配置的局部配置参数持久化到本地,如没有设置,则根据机器配置计算得出。 |
|
|
局部配置参数 | 集群节点在首次启动时,将配置文件中配置的局部配置参数持久化到本地,如没有设置,则使用默认参数值。 |
|
|
-
forceReadConfig 行为
如果您不想使用配置参数的持久化功能,可以使用 forceReadConfig ,强制从配置文件读取配置参数覆盖本地持久化的配置参数,但需要注意 forceReadConfig 仅对局部配置参数生效,全局配置参数仍然以集群持久化的值为准。
4. 兼容性
-
新建集群,无兼容性问题
-
旧集群升级
-
首次启动使用指定或默认的配置文件启动,无兼容性问题
-
首次启动后不建议再通过修改配置文件的方式修改配置,如果通过修改配置文件的方式则重启时要指定配置文件
-
首次启动后推荐只使用动态修改系统变量或局部变量的方式,再次启动时不应指定配置文件,则再次启动时会自动使用内部持久化存储的系统变量和局部变量,无兼容性问题
-
-
降级
-
仅可降级到 做完 sdb 处理逻辑之后的版本,具体版本会在发版后补充到这里。
-
如果降级到不支持本特性的版本,则降级后要指定配置文件启动或使用默认配置文件启动,曾经做过的配置修改均会丢失,但无兼容性问题。
-
5. 运维
-
本特性的主要价值在于对运维的帮助:修改系统变量或局部变量立即生效无需重启,并在下次重启后依然有效。
-
最佳实践:集群首次启动成功后不再使用配置文件,通过 SQL 命令修改系统变量或局部变量,重新启动 taosd 时不指定配置文件
-
Linux/Windows 平台的 systemd 脚本有可能需要进行修改,service restart 所对应的命令行参数不能指定配置文件
6. 使用场景
动态修改系统变量或局部变量立即生效无需重启,并在下次重启后依然有效。
7. 约束和限制
-
全局配置参数在出现网络分区之后恢复时,可能会出现各个 dnode 不一致情况。
-
全局配置参数在变更时,可能会存在短时间的不一致。
-
全局配置参数存放在 sdb 中,mnode 重启回放日志时,可能会出现配置参数修改内容丢失,等待 mnode 彻底恢复后,恢复正常。