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 徹底恢復后,恢復正常。