TDengine的運營與維護
容量規(guī)劃
使用 TDengine 來搭建一個物聯(lián)網(wǎng)大數(shù)據(jù)平臺,計算資源、存儲資源需要根據(jù)業(yè)務(wù)場景進行規(guī)劃。下面分別討論系統(tǒng)運行所需要的內(nèi)存、CPU 以及硬盤空間。
內(nèi)存需求
每個 Database 可以創(chuàng)建固定數(shù)目的 vgroup,默認與 CPU 核數(shù)相同,可通過 maxVgroupsPerDb 配置;vgroup 中的每個副本會是一個 vnode;每個 vnode 會占用固定大小的內(nèi)存(大小與數(shù)據(jù)庫的配置參數(shù) blocks 和 cache 有關(guān));每個 Table 會占用與標簽總長度有關(guān)的內(nèi)存;此外,系統(tǒng)會有一些固定的內(nèi)存開銷。因此,每個 DB 需要的系統(tǒng)內(nèi)存可通過如下公式計算:
Database Memory Size = maxVgroupsPerDb * (blocks * cache + 10MB) + numOfTables * (tagSizePerTable + 0.5KB)
示例:假設(shè)是 4 核機器,cache 是缺省大小 16M, blocks 是缺省值 6,并且一個 DB 中有 10 萬張表,標簽總長度是 256 字節(jié),則這個 DB 總的內(nèi)存需求為:4 * (16 * 6 + 10) + 100000 * (0.25 + 0.5) / 1000 = 499M。
在實際的系統(tǒng)運維中,我們通常會更關(guān)心 TDengine 服務(wù)進程(taosd)會占用的內(nèi)存量。
taosd 內(nèi)存總量 = vnode 內(nèi)存 + mnode 內(nèi)存 + 查詢內(nèi)存
其中:
- “vnode 內(nèi)存”指的是集群中所有的 Database 存儲分攤到當前 taosd 節(jié)點上所占用的內(nèi)存資源。可以按上文“Database Memory Size”計算公式估算每個 DB 的內(nèi)存占用量進行加總,再按集群中總共的 TDengine 節(jié)點數(shù)做平均(如果設(shè)置為多副本,則還需要乘以對應(yīng)的副本倍數(shù))。
- “mnode 內(nèi)存”指的是集群中管理節(jié)點所占用的資源。如果一個 taosd 節(jié)點上分布有 mnode 管理節(jié)點,則內(nèi)存消耗還需要增加“0.2KB * 集群中數(shù)據(jù)表總數(shù)”。
- “查詢內(nèi)存”指的是服務(wù)端處理查詢請求時所需要占用的內(nèi)存。單條查詢語句至少會占用“0.2KB * 查詢涉及的數(shù)據(jù)表總數(shù)”的內(nèi)存量。
注意:以上內(nèi)存估算方法,主要講解了系統(tǒng)的“必須內(nèi)存需求”,而不是“內(nèi)存總數(shù)上限”。在實際運行的生產(chǎn)環(huán)境中,由于操作系統(tǒng)緩存、資源管理調(diào)度等方面的原因,內(nèi)存規(guī)劃應(yīng)當在估算結(jié)果的基礎(chǔ)上保留一定冗余,以維持系統(tǒng)狀態(tài)和系統(tǒng)性能的穩(wěn)定性。并且,生產(chǎn)環(huán)境通常會配置系統(tǒng)資源的監(jiān)控工具,以便及時發(fā)現(xiàn)硬件資源的緊缺情況。
最后,如果內(nèi)存充裕,可以考慮加大 Blocks 的配置,這樣更多數(shù)據(jù)將保存在內(nèi)存里,提高查詢速度。
客戶端內(nèi)存需求
客戶端應(yīng)用采用 taosc 客戶端驅(qū)動連接服務(wù)端,會有內(nèi)存需求的開銷。
客戶端的內(nèi)存開銷主要由寫入過程中的 SQL 語句、表的元數(shù)據(jù)信息緩存、以及結(jié)構(gòu)性開銷構(gòu)成。系統(tǒng)最大容納的表數(shù)量為 N(每個通過超級表創(chuàng)建的表的 meta data 開銷約 256 字節(jié)),最大并行寫入線程數(shù)量 T,最大 SQL 語句長度 S(通常是 1 Mbytes)。由此可以進行客戶端內(nèi)存開銷的估算(單位 MBytes):
M = (T * S * 3 + (N / 4096) + 100)
舉例如下:用戶最大并發(fā)寫入線程數(shù) 100,子表數(shù)總數(shù) 10,000,000,那么客戶端的內(nèi)存最低要求是:
100 * 3 + (10000000 / 4096) + 100 = 2741 (MBytes)
即配置 3 GBytes 內(nèi)存是最低要求。
CPU 需求
CPU 的需求取決于如下兩方面:
- 數(shù)據(jù)插入 TDengine 單核每秒能至少處理一萬個插入請求。每個插入請求可以帶多條記錄,一次插入一條記錄與插入 10 條記錄,消耗的計算資源差別很小。因此每次插入,條數(shù)越大,插入效率越高。如果一個插入請求帶 200 條以上記錄,單核就能達到每秒插入 100 萬條記錄的速度。但對前端數(shù)據(jù)采集的要求越高,因為需要緩存記錄,然后一批插入。
- 查詢需求 TDengine 提供高效的查詢,但是每個場景的查詢差異很大,查詢頻次變化也很大,難以給出客觀數(shù)字。需要用戶針對自己的場景,寫一些查詢語句,才能確定。
因此僅對數(shù)據(jù)插入而言,CPU 是可以估算出來的,但查詢所耗的計算資源無法估算。在實際運營過程中,不建議 CPU 使用率超過 50%,超過后,需要增加新的節(jié)點,以獲得更多計算資源。
存儲需求
TDengine 相對于通用數(shù)據(jù)庫,有超高的壓縮比,在絕大多數(shù)場景下,TDengine 的壓縮比不會低于 5 倍,有的場合,壓縮比可達到 10 倍以上,取決于實際場景的數(shù)據(jù)特征。壓縮前的原始數(shù)據(jù)大小可通過如下方式計算:
Raw DataSize = numOfTables * rowSizePerTable * rowsPerTable
示例:1000 萬臺智能電表,每臺電表每 15 分鐘采集一次數(shù)據(jù),每次采集的數(shù)據(jù) 128 字節(jié),那么一年的原始數(shù)據(jù)量是:10000000 * 128 * 24 * 60 / 15 * 365 = 44.8512T。TDengine大概需要消耗 44.851 / 5 = 8.97024T 空間。
用戶可以通過參數(shù) keep,設(shè)置數(shù)據(jù)在磁盤中的最大保存時長。為進一步減少存儲成本,TDengine 還提供多級存儲,最冷的數(shù)據(jù)可以存放在最廉價的存儲介質(zhì)上,應(yīng)用的訪問不用做任何調(diào)整,只是讀取速度降低了。
為提高速度,可以配置多塊硬盤,這樣可以并發(fā)寫入或讀取數(shù)據(jù)。需要提醒的是,TDengine 采取多副本的方式提供數(shù)據(jù)的高可靠,因此不再需要采用昂貴的磁盤陣列。
物理機或虛擬機臺數(shù)
根據(jù)上面的內(nèi)存、CPU、存儲的預(yù)估,就可以知道整個系統(tǒng)需要多少核、多少內(nèi)存、多少存儲空間。如果數(shù)據(jù)副本數(shù)不為 1,總需求量需要再乘以副本數(shù)。
因為 TDengine 具有很好的水平擴展能力,根據(jù)總量,再根據(jù)單個物理機或虛擬機的資源,就可以輕松決定需要購置多少臺物理機或虛擬機了。
立即計算 CPU、內(nèi)存、存儲,請參見:資源估算方法。
容錯和災(zāi)備
容錯
TDengine 支持 WAL (Write Ahead Log)機制,實現(xiàn)數(shù)據(jù)的容錯能力,保證數(shù)據(jù)的高可用。
TDengine 接收到應(yīng)用的請求數(shù)據(jù)包時,先將請求的原始數(shù)據(jù)包寫入數(shù)據(jù)庫日志文件,等數(shù)據(jù)成功寫入數(shù)據(jù)庫數(shù)據(jù)文件后,再刪除相應(yīng)的 WAL 。這樣保證了 TDengine 能夠在斷電等因素導(dǎo)致的服務(wù)重啟時從數(shù)據(jù)庫日志文件中恢復(fù)數(shù)據(jù),避免數(shù)據(jù)的丟失。
涉及的系統(tǒng)配置參數(shù)有兩個:
- walLevel:WAL 級別,0:不寫 WAL ; 1:寫 wal, 但不執(zhí)行 fsync; 2:寫 wal, 而且執(zhí)行 fsync。
- fsync:當 walLevel 設(shè)置為 2 時,執(zhí)行 fsync 的周期。設(shè)置為 0,表示每次寫入,立即執(zhí)行 fsync。
如果要100%的保證數(shù)據(jù)不丟失,需要將 walLevel 設(shè)置為 2,fsync 設(shè)置為0。這時寫入速度將會下降。但如果應(yīng)用側(cè)啟動的寫數(shù)據(jù)的線程數(shù)達到一定的數(shù)量(超過 50),那么寫入數(shù)據(jù)的性能也會很不錯,只會比 fsync 設(shè)置為 3000 毫秒下降 30% 左右。
災(zāi)備
TDengine 的集群通過多個副本的機制,來提供系統(tǒng)的高可用性,實現(xiàn)災(zāi)備能力。
TDengine 集群是由 mnode 負責管理的,為保證 mnode 的高可靠,可以配置多個 mnode 副本,副本數(shù)由系統(tǒng)配置參數(shù) numOfMnodes 決定,為了支持高可靠,需要設(shè)置大于 1。為保證元數(shù)據(jù)的強一致性,mnode 副本之間通過同步方式進行數(shù)據(jù)復(fù)制,保證了元數(shù)據(jù)的強一致性。
TDengine 集群中的時序數(shù)據(jù)的副本數(shù)是與數(shù)據(jù)庫關(guān)聯(lián)的,一個集群里可以有多個數(shù)據(jù)庫,每個數(shù)據(jù)庫可以配置不同的副本數(shù)。創(chuàng)建數(shù)據(jù)庫時,通過參數(shù) replica 指定副本數(shù)。為了支持高可靠,需要設(shè)置副本數(shù)大于1。
TDengine 集群的節(jié)點數(shù)必須大于等于副本數(shù),否則創(chuàng)建表時將報錯。
當 TDengine 集群中的節(jié)點部署在不同的物理機上,并設(shè)置多個副本數(shù)時,就實現(xiàn)了系統(tǒng)的高可靠性,無需再使用其他軟件或工具。TDengine 企業(yè)版還可以將副本部署在不同機房,從而實現(xiàn)異地容災(zāi)。
服務(wù)端配置
TDengine 系統(tǒng)后臺服務(wù)由 taosd 提供,可以在配置文件 taos.cfg 里修改配置參數(shù),以滿足不同場景的需求。配置文件的缺省位置在 /etc/taos 目錄,可以通過 taosd 命令行執(zhí)行參數(shù)-c指定配置文件目錄。比如 taosd -c /home/user 來指定配置文件位于 /home/user 這個目錄。
另外可以使用 “-C” 顯示當前服務(wù)器配置參數(shù):
taosd -C
下面僅僅列出一些重要的配置參數(shù),更多的參數(shù)請看配置文件里的說明。各個參數(shù)的詳細介紹及作用請看前述章節(jié),而且這些參數(shù)的缺省配置都是可以工作的,一般無需設(shè)置。注意:配置文件參數(shù)修改后,需要重啟taosd服務(wù),或客戶端應(yīng)用才能生效。
-
firstEP
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 taosd 啟動時,主動連接的集群中首個 dnode 的 end point 缺省值 localhost:6030 -
secondEP
屬性 說明 內(nèi)部配置 Yes 適用范圍 服務(wù)端和客戶端均適用 含義 taosd 啟動時,如果 firstEp 連接不上,嘗試連接集群中第二個 dnode 的 end point 缺省值 無 -
fqdn
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 數(shù)據(jù)節(jié)點的 FQDN。如果習慣 IP 地址訪問,可設(shè)置為該節(jié)點的 IP 地址。 缺省值 缺省為操作系統(tǒng)配置的第一個 hostname。 補充說明 這個參數(shù)值的長度需要控制在 96 個字符以內(nèi)。 -
serverPort
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 taosd 啟動后,對外服務(wù)的端口號 缺省值 6030 補充說明 RESTful 服務(wù)使用的端口號是在此基礎(chǔ)上+11,即默認值為 6041(注意 2.4 及后續(xù)版本使用 taosAdapter 提供 RESTful 接口)。 -
logDir
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 日志文件目錄,客戶端和服務(wù)器的運行日志將寫入該目錄 缺省值 /var/log/taos -
scriptDir
屬性 說明 內(nèi)部配置 Yes 適用范圍 僅服務(wù)端適用 含義 缺省值 -
dataDir
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 數(shù)據(jù)文件目錄,所有的數(shù)據(jù)文件都將寫入該目錄 缺省值 /var/lib/taos -
arbitrator
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 系統(tǒng)中裁決器的 end point 缺省值 空 -
numOfThreadsPerCore
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 每個 CPU 核生成的隊列消費者線程數(shù)量 缺省值 1.0 -
ratioOfQueryThreads
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 設(shè)置查詢線程的最大數(shù)量 取值范圍 0:表示只有 1 個查詢線程
1:表示最大和 CPU 核數(shù)相等的查詢線程
2:表示最大建立 2 倍 CPU 核數(shù)的查詢線程。缺省值 1 補充說明 該值可以為小數(shù),即 0.5 表示最大建立 CPU 核數(shù)一半的查詢線程。 -
numOfMnodes
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 系統(tǒng)中管理節(jié)點個數(shù) 缺省值 3 -
vnodeBak
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 刪除 vnode 時是否備份 vnode 目錄 取值范圍 0:否,1:是 缺省值 1 -
telemetryRePorting
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 是否允許 TDengine 采集和上報基本使用信息 取值范圍 0:不允許
1:允許缺省值 1 -
balance
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 是否啟動負載均衡 取值范圍 0,1 缺省值 1 -
balanceInterval
屬性 說明 內(nèi)部配置 Yes 適用范圍 僅服務(wù)端適用 含義 管理節(jié)點在正常運行狀態(tài)下,檢查負載均衡的時間間隔 單位 秒 取值范圍 1-30000 缺省值 300 -
role
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 dnode 的可選角色 取值范圍 0:any(既可作為 mnode,也可分配 vnode)
1:mgmt(只能作為 mnode,不能分配 vnode)
2:dnode(不能作為 mnode,只能分配 vnode)缺省值 0 -
maxTmerCtrl
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 定時器個數(shù) 單位 個 取值范圍 8-2048 缺省值 512 -
monitorInterval
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 監(jiān)控數(shù)據(jù)庫記錄系統(tǒng)參數(shù)(CPU/內(nèi)存)的時間間隔 單位 秒 取值范圍 1-600 缺省值 30 -
offlineThreshold
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 dnode 離線閾值,超過該時間將導(dǎo)致 dnode 離線 單位 秒 取值范圍 5-7200000 缺省值 86400*10(10 天) -
rpcTimer
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 rpc 重試時長 單位 毫秒 取值范圍 100-3000 缺省值 300 -
rpcMaxTime
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 rpc 等待應(yīng)答最大時長 單位 秒 取值范圍 100-7200 缺省值 600 -
statusInterval
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 dnode 向 mnode 報告狀態(tài)間隔 單位 秒 取值范圍 1-10 缺省值 1 -
shellActivityTimer
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 shell 客戶端向 mnode 發(fā)送心跳間隔 單位 秒 取值范圍 1-120 缺省值 3 -
tableMetaKeepTimer
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 表的元數(shù)據(jù) cache 時長 單位 秒 取值范圍 1-8640000 缺省值 7200 -
minSlidingTime
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 最小滑動窗口時長 單位 毫秒 取值范圍 10-1000000 缺省值 10 補充說明 支持 us 補值后,這個值就是 1us 了。 -
minIntervalTime
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 時間窗口最小值 單位 毫秒 取值范圍 1-1000000 缺省值 10 -
stream
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 是否啟用連續(xù)查詢(流計算功能) 取值范圍 0:不允許
1:允許缺省值 1 -
maxStreamCompDelay
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 連續(xù)查詢啟動最大延遲 單位 毫秒 取值范圍 10-1000000000 缺省值 20000 補充說明 為避免多個 stream 同時執(zhí)行占用太多系統(tǒng)資源,程序中對 stream 的執(zhí)行時間人為增加了一些隨機的延時。
maxFirstStreamCompDelay 是 stream 第一次執(zhí)行前最少要等待的時間。
streamCompDelayRatio 是延遲時間的計算系數(shù),它乘以查詢的 interval 后為延遲時間基準。
maxStreamCompDelay 是延遲時間基準的上限。
實際延遲時間為一個不超過延遲時間基準的隨機值。
stream 某次計算失敗后需要重試,retryStreamCompDelay 是重試的等待時間基準。
實際重試等待時間為不超過等待時間基準的隨機值。 -
maxFirstStreamCompDelay
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 第一次連續(xù)查詢啟動最大延遲 單位 毫秒 取值范圍 10-1000000000 缺省值 10000 -
retryStreamCompDelay
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 連續(xù)查詢重試等待間隔 單位 毫秒 取值范圍 10-1000000000 缺省值 10 -
streamCompDelayRatio
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 連續(xù)查詢的延遲時間計算系數(shù) 取值范圍 0.1-0.9 缺省值 0.1 -
maxVgroupsPerDb
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 每個 DB 中 能夠使用的最大 vnode 個數(shù) 取值范圍 0-8192 缺省值 -
maxTablesPerVnode
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 每個 vnode 中能夠創(chuàng)建的最大表個數(shù) 缺省值 1000000 -
minTablesPerVnode
屬性 說明 內(nèi)部配置 Yes 適用范圍 僅服務(wù)端適用 含義 每個 vnode 中必須創(chuàng)建的最小表個數(shù) 缺省值 1000 -
tableIncStepPerVnode
屬性 說明 內(nèi)部配置 Yes 適用范圍 僅服務(wù)端適用 含義 每個 vnode 中超過最小表數(shù)后遞增步長 缺省值 1000 -
cache
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 內(nèi)存塊的大小 單位 MB 缺省值 16 -
blocks
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 每個 vnode(tsdb)中有多少 cache 大小的內(nèi)存塊。因此一個 vnode 的用的內(nèi)存大小粗略為(cache * blocks) 缺省值 6 -
days
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 數(shù)據(jù)文件存儲數(shù)據(jù)的時間跨度 單位 天 缺省值 10 -
keep
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 數(shù)據(jù)保留的天數(shù) 單位 天 缺省值 3650 -
minRows
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 文件塊中記錄的最小條數(shù) 缺省值 100 -
maxRows
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 文件塊中記錄的最大條數(shù) 缺省值 4096 -
quorum
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 多副本環(huán)境下指令執(zhí)行的確認數(shù)要求 取值范圍 1,2 缺省值 1 -
comp
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 文件壓縮標志位 取值范圍 0:關(guān)閉,1:一階段壓縮,2:兩階段壓縮 缺省值 2 -
walLevel
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 WAL 級別 取值范圍 1:寫 wal, 但不執(zhí)行 fsync
2:寫 wal, 而且執(zhí)行 fsync缺省值 1 -
fsync
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 當 wal 設(shè)置為 2 時,執(zhí)行 fsync 的周期 單位 毫秒 取值范圍 最小為 0,表示每次寫入,立即執(zhí)行 fsync
最大為 180000(三分鐘)缺省值 3000 -
replica
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 副本個數(shù) 取值范圍 1-3 缺省值 1 -
compressMsgSize
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 客戶端與服務(wù)器之間進行消息通訊過程中,對通訊的消息進行壓縮的閾值。如果要壓縮消息,建議設(shè)置為 64330 字節(jié),即大于 64330 字節(jié)的消息體才進行壓縮。 單位 bytes 取值范圍 0表示對所有的消息均進行壓縮 >0: 超過該值的消息才進行壓縮 -1: 不壓縮缺省值 -1 -
maxSQLLength
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 單條 SQL 語句允許的最長限制 單位 bytes 取值范圍 65480-1048576 缺省值 1048576 -
maxNumOfOrderedRes
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 支持超級表時間排序允許的最多記錄數(shù)限制 缺省值 10 萬 -
timezone
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 時區(qū) 缺省值 從系統(tǒng)中動態(tài)獲取當前的時區(qū)設(shè)置 -
locale
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 系統(tǒng)區(qū)位信息及編碼格式 缺省值 系統(tǒng)中動態(tài)獲取,如果自動獲取失敗,需要用戶在配置文件設(shè)置或通過 API 設(shè)置 -
charset
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 字符集編碼 缺省值 系統(tǒng)中動態(tài)獲取,如果自動獲取失敗,需要用戶在配置文件設(shè)置或通過 API 設(shè)置 -
maxShellConns
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 一個 dnode 容許的連接數(shù) 取值范圍 10-50000000 缺省值 5000 -
maxConnections
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 一個數(shù)據(jù)庫連接所容許的 dnode 連接數(shù) 取值范圍 1-100000 缺省值 5000 補充說明 實際測試下來,如果默認沒有配,選 50 個 worker thread 會產(chǎn)生 Network unavailable -
minimalLogDirGB
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 當日志文件夾的磁盤大小小于該值時,停止寫日志 單位 GB 缺省值 1.0 -
minimalTmpDirGB
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 當日志文件夾的磁盤大小小于該值時,停止寫臨時文件 單位 GB 缺省值 1.0 -
minimalDataDirGB
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 當日志文件夾的磁盤大小小于該值時,停止寫時序數(shù)據(jù) 單位 GB 缺省值 2.0 -
mnodeEqualVnodeNum
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 一個 mnode 等同于 vnode 消耗的個數(shù) 缺省值 4 -
http
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 服務(wù)器內(nèi)部的 http 服務(wù)開關(guān)。 取值范圍 0:關(guān)閉 http 服務(wù), 1:激活 http 服務(wù)。 缺省值 1 -
monitor
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 服務(wù)器內(nèi)部的系統(tǒng)監(jiān)控開關(guān)。監(jiān)控主要負責收集物理節(jié)點的負載狀況,包括 CPU、內(nèi)存、硬盤、網(wǎng)絡(luò)帶寬、HTTP 請求量的監(jiān)控記錄,記錄信息存儲在 LOG庫中。取值范圍 0:關(guān)閉監(jiān)控服務(wù), 1:激活監(jiān)控服務(wù)。 缺省值 0 -
httpEnableRecordSql
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 內(nèi)部使用,記錄通過 RESTFul 接口,產(chǎn)生的 SQL 調(diào)用。taosAdapter 配置或有不同,請參考相應(yīng)文檔。 缺省值 0 補充說明 生成的文件(httpnote.0/httpnote.1),與服務(wù)端日志所在目錄相同。 -
httpMaxThreads
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 RESTFul 接口的線程數(shù)。taosAdapter 配置或有不同,請參考相應(yīng)文檔。 缺省值 2 -
telegrafUseFieldNum
屬性 說明 內(nèi)部配置 Yes 適用范圍 含義 缺省值 -
restfulRowLimit
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 RESTFul 接口單次返回的記錄條數(shù)。taosAdapter 配置或有不同,請參考相應(yīng)文檔。 缺省值 10240 補充說明 最大 10,000,000 -
numOfLogLines
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 單個日志文件允許的最大行數(shù)。 缺省值 10,000,000 -
asyncLog
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 日志寫入模式 取值范圍 0:同步、1:異步 缺省值 1 -
logKeepDays
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 日志文件的最長保存時間 單位 天 缺省值 0 補充說明 大于 0 時,日志文件會被重命名為 taosdlog.xxx,其中 xxx 為日志文件最后修改的時間戳。 -
debugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 運行日志開關(guān) 取值范圍 131(輸出錯誤和警告日志),135(輸出錯誤、警告和調(diào)試日志),143(輸出錯誤、警告、調(diào)試和跟蹤日志) 缺省值 131 或 135(不同模塊有不同的默認值) -
mDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 管理模塊的日志開關(guān) 取值范圍 同上 缺省值 135 -
dDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 dnode 模塊的日志開關(guān) 取值范圍 同上 缺省值 135 -
sDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 sync 模塊的日志開關(guān) 取值范圍 同上 缺省值 135 -
wDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 wal 模塊的日志開關(guān) 取值范圍 同上 缺省值 135 -
sdbDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 sdb 模塊的日志開關(guān) 取值范圍 同上 缺省值 135 -
rpcDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 rpc 模塊的日志開關(guān) 取值范圍 同上 缺省值 -
tmrDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 定時器模塊的日志開關(guān) 取值范圍 同上 缺省值 -
cDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 client 模塊的日志開關(guān) 取值范圍 同上 缺省值 -
jniDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 jni 模塊的日志開關(guān) 取值范圍 同上 缺省值 -
odbcDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 odbc 模塊的日志開關(guān) 取值范圍 同上 缺省值 -
uDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 共用功能模塊的日志開關(guān) 取值范圍 同上 缺省值 -
httpDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 http 模塊的日志開關(guān) 取值范圍 同上 缺省值 -
monitorDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 監(jiān)控模塊的日志開關(guān) 取值范圍 同上 缺省值 -
qDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 查詢模塊的日志開關(guān) 取值范圍 同上 缺省值 -
vDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 vnode 模塊的日志開關(guān) 取值范圍 同上 缺省值 -
tsdbDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 TSDB 模塊的日志開關(guān) 取值范圍 同上 缺省值 -
cqDebugFlag
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 連續(xù)查詢模塊的日志開關(guān) 取值范圍 同上 缺省值 -
tscEnableRecordSql
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 是否記錄客戶端 sql 語句到文件 取值范圍 0:否,1:是 缺省值 0 補充說明 生成的文件(tscnote-xxxx.0/tscnote-xxx.1,xxxx 是 pid),與客戶端日志所在目錄相同。 -
enableCoreFile
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 是否開啟服務(wù) crash 時生成 core 文件 取值范圍 0:否,1:是 缺省值 1 補充說明 不同的啟動方式,生成 core 文件的目錄如下:1、systemctl start taosd 啟動:生成的 core 在根目錄下
2、手動啟動,就在 taosd 執(zhí)行目錄下。 -
gitinfo
屬性 說明 內(nèi)部配置 Yes 適用范圍 服務(wù)端和客戶端均適用 含義 取值范圍 1 缺省值 -
gitinfoofInternal
屬性 說明 內(nèi)部配置 Yes 適用范圍 服務(wù)端和客戶端均適用 含義 取值范圍 2 缺省值 -
Buildinfo
屬性 說明 內(nèi)部配置 Yes 適用范圍 服務(wù)端和客戶端均適用 含義 取值范圍 3 缺省值 -
version
屬性 說明 內(nèi)部配置 Yes 適用范圍 服務(wù)端和客戶端均適用 含義 取值范圍 4 缺省值 -
maxBinaryDisplayWidth
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 Taos shell 中 binary 和 nchar 字段的顯示寬度上限,超過此限制的部分將被隱藏 取值范圍 5 - 缺省值 30 補充說明 實際上限按以下規(guī)則計算:如果字段值的長度大于 maxBinaryDisplayWidth,則顯示上限為 字段名長度 和 maxBinaryDisplayWidth 的較大者。
否則,上限為 字段名長度 和 字段值長度 的較大者。
可在 shell 中通過命令 set max_binary_display_width nn 動態(tài)修改此選項 -
queryBufferSize
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 為所有并發(fā)查詢占用保留的內(nèi)存大小。 單位 MB 缺省值 補充說明 計算規(guī)則可以根據(jù)實際應(yīng)用可能的最大并發(fā)數(shù)和表的數(shù)字相乘,再乘 170 。
(2.0.15 以前的版本中,此參數(shù)的單位是字節(jié)) -
ratioOfQueryCores
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 設(shè)置查詢線程的最大數(shù)量。 缺省值 補充說明 最小值 0 表示只有 1 個查詢線程
最大值 2 表示最大建立 2 倍 CPU 核數(shù)的查詢線程。
默認為 1,表示最大和 CPU 核數(shù)相等的查詢線程。
該值可以為小數(shù),即 0.5 表示最大建立 CPU 核數(shù)一半的查詢線程。 -
update
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 允許更新已存在的數(shù)據(jù)行 取值范圍 0:不允許更新
1:允許整行更新
2:允許部分列更新。(2.1.7.0 版本開始此參數(shù)支持設(shè)為 2,在此之前取值只能是 [0, 1])缺省值 0 補充說明 2.0.8.0 版本之前,不支持此參數(shù)。 -
cacheLast
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 是否在內(nèi)存中緩存子表的最近數(shù)據(jù) 取值范圍 0:關(guān)閉
1:緩存子表最近一行數(shù)據(jù)
2:緩存子表每一列的最近的非 NULL 值
3:同時打開緩存最近行和列功能。(2.1.2.0 版本開始此參數(shù)支持 0 ~ 3 的取值范圍,在此之前取值只能是 [0, 1])缺省值 0 補充說明 2.1.2.0 版本之前、2.0.20.7 版本之前在 taos.cfg 文件中不支持此參數(shù)。 -
numOfCommitThreads
屬性 說明 內(nèi)部配置 Yes 適用范圍 僅服務(wù)端適用 含義 設(shè)置寫入線程的最大數(shù)量 缺省值 -
maxWildCardsLength
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 設(shè)定 LIKE 算子的通配符字符串允許的最大長度 單位 bytes 取值范圍 0-16384 缺省值 100 補充說明 2.1.6.1 版本新增。 -
compressColData
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 客戶端與服務(wù)器之間進行消息通訊過程中,對服務(wù)器端查詢結(jié)果進行列壓縮的閾值。 單位 bytes 取值范圍 0: 對所有查詢結(jié)果均進行壓縮 >0: 查詢結(jié)果中任意列大小超過該值的消息才進行壓縮 -1: 不壓縮 缺省值 -1 補充說明 2.3.0.0 版本新增。 -
tsdbMetaCompactRatio
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 tsdb meta 文件中冗余數(shù)據(jù)超過多少閾值,開啟 meta 文件的壓縮功能 取值范圍 0:不開啟,[1-100]:冗余數(shù)據(jù)比例 缺省值 0 -
rpcForceTcp
屬性 說明 內(nèi)部配置 No 適用范圍 服務(wù)端和客戶端均適用 含義 強制使用 TCP 傳輸 取值范圍 0: 不開啟 1: 開啟 缺省值 0 補充說明 在網(wǎng)絡(luò)比較差的環(huán)境中,建議開啟。
2.0 版本新增。 -
maxNumOfDistinctRes
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 允許返回的 distinct 結(jié)果最大行數(shù) 取值范圍 默認值為 10 萬,最大值 1 億 缺省值 10 萬 補充說明 2.3 版本新增。 -
clientMerge
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 是否允許客戶端對寫入數(shù)據(jù)去重 取值范圍 0:不開啟,1:開啟 缺省值 0 補充說明 2.3 版本新增。 -
httpDBNameMandatory
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 是否在 URL 中輸入 數(shù)據(jù)庫名稱 取值范圍 0:不開啟,1:開啟 缺省值 0 補充說明 2.3 版本新增。 -
maxRegexStringLen
屬性 說明 內(nèi)部配置 No 適用范圍 僅客戶端適用 含義 正則表達式最大允許長度 取值范圍 默認值 128,最大長度 16384 缺省值 128 補充說明 2.3 版本新增。 -
lossyColumns
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 配置要進行有損壓縮的浮點數(shù)據(jù)類型 取值范圍 float:只對float類型進行有損壓縮
double:只對double類型進行有損壓縮
float|double:float double都進行有損壓縮缺省值 默認為空字符串,關(guān)閉有損壓縮 補充說明 2.4.0.10版本新增。 -
fPrecision
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 設(shè)置float類型浮點數(shù)壓縮精度 取值范圍 0.1 ~ 0.00000001 缺省值 0.00000001(1E-8) 補充說明 2.4.0.10版本新增。 -
dPrecision
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 設(shè)置double類型浮點數(shù)壓縮精度 取值范圍 0.1 ~ 0.0000000000000001 缺省值 0.0000000000000001(1E-16) 補充說明 2.4.0.10版本新增。 -
maxRange
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 要壓縮數(shù)據(jù)可能的最大波動范圍 取值范圍 無限制 缺省值 自動預(yù)測 補充說明 2.4.0.10版本新增。 -
Range
屬性 說明 內(nèi)部配置 No 適用范圍 僅服務(wù)端適用 含義 要壓縮數(shù)據(jù)可能的平均波動范圍 取值范圍 無限制 缺省值 自動預(yù)測 補充說明 2.4.0.10版本新增。
注意: 對于端口,TDengine會使用從serverPort起13個連續(xù)的TCP和UDP端口號,請務(wù)必在防火墻打開。因此如果是缺省配置,需要打開從6030到6042共13個端口,而且必須TCP和UDP都打開。(詳細的端口情況請參見 TDengine 2.0 端口說明)
不同應(yīng)用場景的數(shù)據(jù)往往具有不同的數(shù)據(jù)特征,比如保留天數(shù)、副本數(shù)、采集頻次、記錄大小、采集點的數(shù)量、壓縮等都可完全不同。為獲得在存儲上的最高效率,TDengine 提供如下存儲相關(guān)的系統(tǒng)配置參數(shù)(既可以作為 create database 指令的參數(shù),也可以寫在 taos.cfg 配置文件中用來設(shè)定創(chuàng)建新數(shù)據(jù)庫時所采用的默認值):
| # | 配置參數(shù)名稱 | 單位 | 含義 | 取值范圍 | 缺省值 |
|---|---|---|---|---|---|
| 1 | days | 天 | 一個數(shù)據(jù)文件存儲數(shù)據(jù)的時間跨度 | 10 | |
| 2 | keep | 天 | (可通過 alter database 修改)數(shù)據(jù)庫中數(shù)據(jù)保留的天數(shù)。 | 3650 | |
| 3 | cache | MB | 內(nèi)存塊的大小 | 16 | |
| 4 | blocks | (可通過 alter database 修改)每個 VNODE(TSDB)中有多少個 cache 大小的內(nèi)存塊。因此一個 VNODE 使用的內(nèi)存大小粗略為(cache * blocks)。 | 6 | ||
| 5 | quorum | (可通過 alter database 修改)多副本環(huán)境下指令執(zhí)行的確認數(shù)要求 | 1-2 | 1 | |
| 6 | minRows | 文件塊中記錄的最小條數(shù) | 100 | ||
| 7 | maxRows | 文件塊中記錄的最大條數(shù) | 4096 | ||
| 8 | comp | (可通過 alter database 修改)文件壓縮標志位 | 0:關(guān)閉,1:一階段壓縮,2:兩階段壓縮 | 2 | |
| 9 | walLevel | (作為 database 的參數(shù)時名為 wal;在 taos.cfg 中作為參數(shù)時需要寫作 walLevel)WAL級別 | 1:寫 WAL,但不執(zhí)行 fsync;2:寫 WAL, 而且執(zhí)行 fsync | 1 | |
| 10 | fsync | 毫秒 | 當 wal 設(shè)置為 2 時,執(zhí)行 fsync 的周期。設(shè)置為 0,表示每次寫入,立即執(zhí)行 fsync。 | 3000 | |
| 11 | replica | (可通過 alter database 修改)副本個數(shù) | 1-3 | 1 | |
| 12 | precision | 時間戳精度標識(2.1.2.0 版本之前、2.0.20.7 版本之前在 taos.cfg 文件中不支持此參數(shù)。)(從 2.1.5.0 版本開始,新增對納秒時間精度的支持) | ms 表示毫秒,us 表示微秒,ns 表示納秒 | ms | |
| 13 | update | 是否允許數(shù)據(jù)更新(從 2.1.7.0 版本開始此參數(shù)支持 0~2 的取值范圍,在此之前取值只能是 [0, 1];而 2.0.8.0 之前的版本在 SQL 指令中不支持此參數(shù)。) | 0:不允許;1:允許更新整行;2:允許部分列更新。 | 0 | |
| 14 | cacheLast | (可通過 alter database 修改)是否在內(nèi)存中緩存子表的最近數(shù)據(jù)(從 2.1.2.0 版本開始此參數(shù)支持 0~3 的取值范圍,在此之前取值只能是 [0, 1];而 2.0.11.0 之前的版本在 SQL 指令中不支持此參數(shù)。)(2.1.2.0 版本之前、2.0.20.7 版本之前在 taos.cfg 文件中不支持此參數(shù)。) | 0:關(guān)閉;1:緩存子表最近一行數(shù)據(jù);2:緩存子表每一列的最近的非 NULL 值;3:同時打開緩存最近行和列功能 | 0 |
對于一個應(yīng)用場景,可能有多種數(shù)據(jù)特征的數(shù)據(jù)并存,最佳的設(shè)計是將具有相同數(shù)據(jù)特征的表放在一個庫里,這樣一個應(yīng)用有多個庫,而每個庫可以配置不同的存儲參數(shù),從而保證系統(tǒng)有最優(yōu)的性能。TDengine 允許應(yīng)用在創(chuàng)建庫時指定上述存儲參數(shù),如果指定,該參數(shù)就將覆蓋對應(yīng)的系統(tǒng)配置參數(shù)。舉例,有下述 SQL:
CREATE DATABASE demo DAYS 10 CACHE 32 BLOCKS 8 REPLICA 3 UPDATE 1;
該SQL創(chuàng)建了一個庫 demo, 每個數(shù)據(jù)文件存儲 10 天數(shù)據(jù),內(nèi)存塊為 32 兆字節(jié),每個 VNODE 占用 8 個內(nèi)存塊,副本數(shù)為3,允許更新,而其他參數(shù)與系統(tǒng)配置完全一致。
一個數(shù)據(jù)庫創(chuàng)建成功后,僅部分參數(shù)可以修改并實時生效,其余參數(shù)不能修改:
| 參數(shù)名 | 能否修改 | 范圍 | 修改語法示例 |
|---|---|---|---|
| name | |||
| create time | |||
| ntables | |||
| vgroups | |||
| replica | YES | 在線 dnode 數(shù)目為: 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 語句修改這些參數(shù)后,需要重啟服務(wù)器才能生效。
TDengine 集群中加入一個新的 dnode 時,涉及集群相關(guān)的一些參數(shù)必須與已有集群的配置相同,否則不能成功加入到集群中。會進行校驗的參數(shù)如下:
- numOfMnodes:系統(tǒng)中管理節(jié)點個數(shù)。默認值:3。(2.0 版本從 2.0.20.11 開始、2.1 及以上版本從 2.1.6.0 開始,numOfMnodes 默認值改為 1。)
- mnodeEqualVnodeNum: 一個 mnode 等同于 vnode 消耗的個數(shù)。默認值:4。
- offlineThreshold: dnode 離線閾值,超過該時間將導(dǎo)致該 dnode 從集群中刪除。單位為秒,默認值:86400*10(即10天)。
- statusInterval: dnode 向 mnode 報告狀態(tài)時長。單位為秒,默認值:1。
- maxTablesPerVnode: 每個 vnode 中能夠創(chuàng)建的最大表個數(shù)。默認值:1000000。
- maxVgroupsPerDb: 每個數(shù)據(jù)庫中能夠使用的最大 vgroup 個數(shù)。
- arbitrator: 系統(tǒng)中裁決器的 end point,缺省為空。
- timezone、locale、charset 的配置見客戶端配置。(2.0.20.0 及以上的版本里,集群中加入新節(jié)點已不要求 locale 和 charset 參數(shù)取值一致)
- balance:是否啟用負載均衡。0:否,1:是。默認值:1。
- flowctrl:是否啟用非阻塞流控。0:否,1:是。默認值:1。
- slaveQuery:是否啟用 slave vnode 參與查詢。0:否,1:是。默認值:1。
- adjustMaster:是否啟用 vnode master 負載均衡。0:否,1:是。默認值:1。
為方便調(diào)試,可通過 SQL 語句臨時調(diào)整每個 dnode 的日志配置,系統(tǒng)重啟后會失效:
ALTER DNODE <dnode_id> <config>
- dnode_id: 可以通過 SQL 語句"SHOW DNODES"命令獲取
- config: 要調(diào)整的日志參數(shù),在如下列表中取值
resetlog 截斷舊日志文件,創(chuàng)建一個新日志文件 debugFlag < 131 | 135 | 143 > 設(shè)置 debugFlag 為 131、135 或者 143
例如:
alter dnode 1 debugFlag 135;
客戶端及應(yīng)用驅(qū)動配置
TDengine 系統(tǒng)的前臺交互客戶端應(yīng)用程序為 taos,以及應(yīng)用驅(qū)動,它與 taosd 共享同一個配置文件 taos.cfg。運行 taos 時,使用參數(shù) -c 指定配置文件目錄,如 taos -c /home/cfg,表示使用/home/cfg/目錄下的 taos.cfg 配置文件中的參數(shù),缺省目錄是 /etc/taos。更多 taos 的使用方法請見幫助信息 taos --help。本節(jié)主要說明 taos 客戶端應(yīng)用在配置文件 taos.cfg 文件中使用到的參數(shù)。
2.0.10.0 之后版本支持命令行以下參數(shù)顯示當前客戶端參數(shù)的配置
taos -C 或 taos --dump-config
客戶端及應(yīng)用驅(qū)動配置參數(shù)列表及解釋
-
firstEp: taos 啟動時,主動連接的集群中第一個 taosd 實例的 end point, 缺省值為 localhost:6030。
-
secondEp: taos 啟動時,如果 firstEp 連不上,將嘗試連接 secondEp。
-
locale:系統(tǒng)區(qū)位信息及編碼格式。
默認值:系統(tǒng)中動態(tài)獲取,如果自動獲取失敗,需要用戶在配置文件設(shè)置或通過API設(shè)置。
TDengine 為存儲中文、日文、韓文等非 ASCII 編碼的寬字符,提供一種專門的字段類型 nchar。寫入 nchar 字段的數(shù)據(jù)將統(tǒng)一采用 UCS4-LE 格式進行編碼并發(fā)送到服務(wù)器。需要注意的是,編碼正確性是客戶端來保證。因此,如果用戶想要正常使用 nchar 字段來存儲諸如中文、日文、韓文等非 ASCII 字符,需要正確設(shè)置客戶端的編碼格式。
客戶端的輸入的字符均采用操作系統(tǒng)當前默認的編碼格式,在 Linux 系統(tǒng)上多為 UTF-8,部分中文系統(tǒng)編碼則可能是 GB18030 或 GBK 等。在 docker 環(huán)境中默認的編碼是 POSIX。在中文版 Windows 系統(tǒng)中,編碼則是 CP936??蛻舳诵枰_保正確設(shè)置自己所使用的字符集,即客戶端運行的操作系統(tǒng)當前編碼字符集,才能保證 nchar 中的數(shù)據(jù)正確轉(zhuǎn)換為 UCS4-LE 編碼格式。
在 Linux 中 locale 的命名規(guī)則為: <語言>_<地區(qū)>.<字符集編碼> 如:zh_CN.UTF-8,zh 代表中文,CN 代表大陸地區(qū),UTF-8 表示字符集。字符集編碼為客戶端正確解析本地字符串提供編碼轉(zhuǎn)換的說明。Linux 系統(tǒng)與 macOS 系統(tǒng)可以通過設(shè)置 locale 來確定系統(tǒng)的字符編碼,由于 Windows 使用的 locale 中不是 POSIX 標準的 locale 格式,因此在 Windows 下需要采用另一個配置參數(shù) charset 來指定字符編碼。在 Linux 系統(tǒng)中也可以使用charset來指定字符編碼。
-
charset:字符集編碼。
默認值:系統(tǒng)中動態(tài)獲取,如果自動獲取失敗,需要用戶在配置文件設(shè)置或通過 API 設(shè)置。
如果配置文件中不設(shè)置 charset,在 Linux 系統(tǒng)中,taos 在啟動時候,自動讀取系統(tǒng)當前的 locale 信息,并從 locale 信息中解析提取 charset 編碼格式。如果自動讀取 locale 信息失敗,則嘗試讀取 charset 配置,如果讀取 charset 配置也失敗,則中斷啟動過程。
在 Linux 系統(tǒng)中,locale 信息包含了字符編碼信息,因此正確設(shè)置了 Linux 系統(tǒng) locale 以后可以不用再單獨設(shè)置 charset。例如:
locale zh_CN.UTF-8在 Windows 系統(tǒng)中,無法從 locale 獲取系統(tǒng)當前編碼。如果無法從配置文件中讀取字符串編碼信息,taos 默認設(shè)置為字符編碼為 CP936。其等效在配置文件中添加如下配置:
charset CP936如果需要調(diào)整字符編碼,請查閱當前操作系統(tǒng)使用的編碼,并在配置文件中正確設(shè)置。
在 Linux 系統(tǒng)中,如果用戶同時設(shè)置了 locale 和字符集編碼 charset,并且 locale 和 charset 的不一致,后設(shè)置的值將覆蓋前面設(shè)置的值。
locale zh_CN.UTF-8 charset GBK則 charset 的有效值是 GBK。
charset GBK locale zh_CN.UTF-8charset 的有效值是 UTF-8。
日志的配置參數(shù),與 server 的配置參數(shù)完全一樣。
-
timezone
默認值:動態(tài)獲取當前客戶端運行系統(tǒng)所在的時區(qū)。
為應(yīng)對多時區(qū)的數(shù)據(jù)寫入和查詢問題,TDengine 采用 Unix 時間戳(Unix Timestamp)來記錄和存儲時間戳。Unix 時間戳的特點決定了任一時刻不論在任何時區(qū),產(chǎn)生的時間戳均一致。需要注意的是,Unix時間戳是在客戶端完成轉(zhuǎn)換和記錄。為了確保客戶端其他形式的時間轉(zhuǎn)換為正確的 Unix 時間戳,需要設(shè)置正確的時區(qū)。
在Linux系統(tǒng)中,客戶端會自動讀取系統(tǒng)設(shè)置的時區(qū)信息。用戶也可以采用多種方式在配置文件設(shè)置時區(qū)。例如:
timezone UTC-8 timezone GMT-8 timezone Asia/Shanghai均是合法的設(shè)置東八區(qū)時區(qū)的格式。但需注意,Windows 下并不支持
timezone Asia/Shanghai這樣的寫法,而必須寫成timezone UTC-8。時區(qū)的設(shè)置對于查詢和寫入SQL語句中非 Unix 時間戳的內(nèi)容(時間戳字符串、關(guān)鍵詞 now 的解析)產(chǎn)生影響。例如:
SELECT count(*) FROM table_name WHERE TS<'2019-04-11 12:01:08';在東八區(qū),SQL 語句等效于
SELECT count(*) FROM table_name WHERE TS<1554955268000;在 UTC 時區(qū),SQL 語句等效于
SELECT count(*) FROM table_name WHERE TS<1554984068000;為了避免使用字符串時間格式帶來的不確定性,也可以直接使用 Unix 時間戳。此外,還可以在 SQL 語句中使用帶有時區(qū)的時間戳字符串,例如:RFC3339 格式的時間戳字符串,2013-04-12T15:52:01.123+08:00 或者 ISO-8601 格式時間戳字符串 2013-04-12T15:52:01.123+0800。上述兩個字符串轉(zhuǎn)化為 Unix 時間戳不受系統(tǒng)所在時區(qū)的影響。
啟動 taos 時,也可以從命令行指定一個 taosd 實例的 end point,否則就從 taos.cfg 讀取。
-
maxBinaryDisplayWidth
Shell 中 binary 和 nchar 字段的顯示寬度上限,超過此限制的部分將被隱藏。默認值:30??稍?taos shell 中通過命令 set max_binary_display_width nn 動態(tài)修改此選項。
用戶管理
系統(tǒng)管理員可以在 CLI 界面里添加、刪除用戶,也可以修改密碼。CLI 里 SQL 語法如下:
CREATE USER <user_name> PASS <'password'>;
創(chuàng)建用戶,并指定用戶名和密碼,密碼需要用單引號引起來,單引號為英文半角
DROP USER <user_name>;
刪除用戶,限 root 用戶使用
ALTER USER <user_name> PASS <'password'>;
修改用戶密碼,為避免被轉(zhuǎn)換為小寫,密碼需要用單引號引用,單引號為英文半角
ALTER USER <user_name> PRIVILEGE <write|read>;
修改用戶權(quán)限為:write 或 read,不需要添加單引號
說明:系統(tǒng)內(nèi)共有 super/write/read 三種權(quán)限級別,但目前不允許通過 alter 指令把 super 權(quán)限賦予用戶。
SHOW USERS;
顯示所有用戶
注意:SQL 語法中,< >表示需要用戶輸入的部分,但請不要輸入< >本身。
數(shù)據(jù)導(dǎo)入
TDengine 提供多種方便的數(shù)據(jù)導(dǎo)入功能,一種按腳本文件導(dǎo)入,一種按數(shù)據(jù)文件導(dǎo)入,一種是 taosdump 工具導(dǎo)入本身導(dǎo)出的文件。
按腳本文件導(dǎo)入
TDengine 的 shell 支持 source filename 命令,用于批量運行文件中的 SQL 語句。用戶可將建庫、建表、寫數(shù)據(jù)等 SQL 命令寫在同一個文件中,每條命令單獨一行,在 shell 中運行 source 命令,即可按順序批量運行文件中的SQL語句。以‘#’開頭的 SQL 語句被認為是注釋,shell 將自動忽略。
按數(shù)據(jù)文件導(dǎo)入
TDengine 也支持在 shell 對已存在的表從 CSV 文件中進行數(shù)據(jù)導(dǎo)入。CSV 文件只屬于一張表且 CSV 文件中的數(shù)據(jù)格式需與要導(dǎo)入表的結(jié)構(gòu)相同,在導(dǎo)入的時候,其語法如下:
insert into tb1 file 'path/data.csv';
注意:如果 CSV 文件首行存在描述信息,請手動刪除后再導(dǎo)入。如某列為空,填NULL,無引號。
例如,現(xiàn)在存在一個子表 d1001, 其表結(jié)構(gòu)如下:
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 |
要導(dǎo)入的 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
那么可以用如下命令導(dǎo)入數(shù)據(jù):
taos> insert into d1001 file '~/data.csv';
Query OK, 9 row(s) affected (0.004763s)
taosdump工具導(dǎo)入
TDengine 提供了方便的數(shù)據(jù)庫導(dǎo)入導(dǎo)出工具 taosdump。用戶可以將 taosdump 從一個系統(tǒng)導(dǎo)出的數(shù)據(jù),導(dǎo)入到其他系統(tǒng)中。具體使用方法,請參見:TDengine 數(shù)據(jù)備份工具: taosdump。
數(shù)據(jù)導(dǎo)出
為方便數(shù)據(jù)導(dǎo)出,TDengine 提供了兩種導(dǎo)出方式,分別是按表導(dǎo)出和用 taosdump 導(dǎo)出。
按表導(dǎo)出CSV文件
如果用戶需要導(dǎo)出一個表或一個 STable 中的數(shù)據(jù),可在 taos shell 中運行:
select * from <tb_name> >> data.csv;
這樣,表 tb_name 中的數(shù)據(jù)就會按照 CSV 格式導(dǎo)出到文件 data.csv 中。
用taosdump導(dǎo)出數(shù)據(jù)
利用 taosdump,用戶可以根據(jù)需要選擇導(dǎo)出所有數(shù)據(jù)庫、一個數(shù)據(jù)庫或者數(shù)據(jù)庫中的一張表,所有數(shù)據(jù)或一時間段的數(shù)據(jù),甚至僅僅表的定義。
具體使用方法,請參見博客:TDengine DUMP 工具使用指南。
系統(tǒng)連接、任務(wù)查詢管理
系統(tǒng)管理員可以從 CLI 查詢系統(tǒng)的連接、正在進行的查詢、流式計算,并且可以關(guān)閉連接、停止正在進行的查詢和流式計算。CLI 里 SQL 語法如下:
SHOW CONNECTIONS;
顯示數(shù)據(jù)庫的連接,其中一列顯示 ip:port, 為連接的 IP 地址和端口號。
KILL CONNECTION <connection-id>;
強制關(guān)閉數(shù)據(jù)庫連接,其中的 connection-id 是 SHOW CONNECTIONS 中顯示的第一列的數(shù)字。
SHOW QUERIES;
顯示數(shù)據(jù)查詢,其中第一列顯示的以冒號隔開的兩個數(shù)字為 query-id,為發(fā)起該 query 應(yīng)用連接的 connection-id 和查詢次數(shù)。
KILL QUERY <query-id>;
強制關(guān)閉數(shù)據(jù)查詢,其中query-id是SHOW QUERIES中顯示的 connection-id:query-no字串,如“105:2”,拷貝粘貼即可。
SHOW STREAMS;
顯示流式計算,其中第一列顯示的以冒號隔開的兩個數(shù)字為 stream-id, 為啟動該 stream 應(yīng)用連接的 connection-id 和發(fā)起 stream 的次數(shù)。
KILL STREAM <stream-id>;
強制關(guān)閉流式計算,其中的中 stream-id 是 SHOW STREAMS 中顯示的 connection-id:stream-no 字串,如 103:2,拷貝粘貼即可。
系統(tǒng)監(jiān)控
TDengine 啟動后,會自動創(chuàng)建一個監(jiān)測數(shù)據(jù)庫 log,并自動將服務(wù)器的 CPU、內(nèi)存、硬盤空間、帶寬、請求數(shù)、磁盤讀寫速度、慢查詢等信息定時寫入該數(shù)據(jù)庫。TDengine 還將重要的系統(tǒng)操作(比如登錄、創(chuàng)建、刪除數(shù)據(jù)庫等)日志以及各種錯誤報警信息記錄下來存放在 log 庫里。系統(tǒng)管理員可以從 CLI 直接查看這個數(shù)據(jù)庫,也可以在 WEB 通過圖形化界面查看這些監(jiān)測信息。
這些監(jiān)測信息的采集缺省是打開的,但可以修改配置文件里的選項 monitor 將其關(guān)閉或打開。
TDinsight - 使用監(jiān)控數(shù)據(jù)庫 + Grafana 對 TDengine 進行監(jiān)控的解決方案
從 2.3.3.0 開始,監(jiān)控數(shù)據(jù)庫將提供更多的監(jiān)控項,您可以從 TDinsight Grafana Dashboard 了解如何使用 TDinsight 方案對 TDengine 進行監(jiān)控。
我們提供了一個自動化腳本 TDinsight.sh 對TDinsight進行部署。
下載 TDinsight.sh:
wget https://github.com/taosdata/grafanaplugin/raw/master/dashboards/TDinsight.sh
chmod +x TDinsight.sh
準備:
-
TDengine Server 信息:
- TDengine RESTful 服務(wù):對本地而言,可以是
http://localhost:6041,使用參數(shù)-a。 - TDengine 用戶名和密碼,使用
-u-p參數(shù)設(shè)置。
- TDengine RESTful 服務(wù):對本地而言,可以是
-
Grafana 告警通知
-
使用已經(jīng)存在的Grafana Notification Channel
uid,參數(shù)-E。該參數(shù)可以使用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 數(shù)據(jù)源插件內(nèi)置的阿里云短信告警通知,使用
-s啟用之,并設(shè)置如下參數(shù):- 阿里云短信服務(wù)Key ID,參數(shù)
-I - 阿里云短信服務(wù)Key Secret,參數(shù)
K - 阿里云短信服務(wù)簽名,參數(shù)
-S - 短信通知模板號,參數(shù)
-C - 短信通知模板輸入?yún)?shù),JSON格式,參數(shù)
-T,如{"alarm_level":"%s","time":"%s","name":"%s","content":"%s"} - 逗號分隔的通知手機列表,參數(shù)
-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"}' - 阿里云短信服務(wù)Key ID,參數(shù)
-
運行程序并重啟 Grafana 服務(wù),打開面板:http://localhost:3000/d/tdinsight。
更多使用場景和限制請參考TDinsight 文檔。
性能優(yōu)化
注意:碎片重整操作會產(chǎn)生大量磁盤 I/O。因此在重整進行期間,有可能會影響節(jié)點的寫入和查詢性能,甚至在極端情況下導(dǎo)致短時間的應(yīng)用寫入阻塞。
因數(shù)據(jù)行 update、表刪除、數(shù)據(jù)過期等原因,TDengine 的磁盤存儲文件有可能出現(xiàn)數(shù)據(jù)碎片,影響查詢操作的性能表現(xiàn)。從 2.1.3.0 版本開始,新增 SQL 指令 COMPACT 來啟動碎片重整過程:
COMPACT VNODES IN (vg_id1, vg_id2, ...)
COMPACT 命令對指定的一個或多個 VGroup 啟動碎片重整,系統(tǒng)會通過任務(wù)隊列盡快安排重整操作的具體執(zhí)行。COMPACT 指令所需的 VGroup id,可以通過 SHOW VGROUPS; 指令的輸出結(jié)果獲取;而且在 SHOW VGROUPS; 中會有一個 compacting 列,值為 2 時表示對應(yīng)的 VGroup 處于排隊等待進行重整的狀態(tài),值為 1 時表示正在進行碎片重整,為 0 時則表示并沒有處于重整狀態(tài)(未要求進行重整或已經(jīng)完成重整)。
TSZ 壓縮算法
TSZ 壓縮算法簡介
TSZ 壓縮算法是 TDengine 為浮點數(shù)據(jù)類型提供更加豐富的壓縮功能,可以實現(xiàn)浮點數(shù)的有損至無損全狀態(tài)壓縮,相比原來在 TDengine 中原有壓縮算法,TSZ 壓縮算法壓縮選項更豐富,壓縮率更高,即使切到無損狀態(tài)下對浮點數(shù)壓縮,壓縮率也會比原來的壓縮算法高一倍。
適合場景
TSZ 壓縮算法壓縮率比原來的要高,但壓縮時間會更長,即開啟 TSZ 壓縮算法寫入速度會有一些下降,通常情況下會有 20% 左右的下降。影響寫入速度是因為需要更多的 CPU 計算,所以從原始數(shù)據(jù)到壓縮好數(shù)據(jù)的交付時間變長,導(dǎo)致寫入速度變慢。如果您的服務(wù)器 CPU 配置很高的話,這個影響會變小甚至沒有。
另外如果設(shè)備產(chǎn)生了大量的高精度浮點數(shù),存儲占用的空間非常龐大,但實際使用并不需要那么高的精度時,可以通過 TSZ 壓縮的有損壓縮功能,把精度壓縮至指定的長度,節(jié)約存儲空間。
總結(jié):采集到了大量浮點數(shù),存儲時占用空間過大或出有存儲空間不足,需要超高壓縮率的場景。
使用步驟
-
檢查版本支持,2.4.0.10 及之后 TDengine 的版本都支持此功能
-
配置選項開啟功能,在 TDengine 的配置文件 taos.cfg 增加一行以下內(nèi)容,打開 TSZ 功能
lossyColumns float|double
-
根據(jù)自己需要配置其它選項,如果不配置都會按默認值處理。
-
重啟服務(wù),配置生效。
-
確認功能已開啟,在服務(wù)啟動過程中輸出的信息如果有前面配置的內(nèi)容,表明功能已生效:
02/22 10:49:27.607990 00002933 UTL lossyColumns float|double
注意事項
-
確認版本是否支持
-
除了服務(wù)器啟動時的輸出的配置成功信息外,不再會有其它的信息輸出是使用的哪種壓縮算法,可以通過配置前后數(shù)據(jù)庫文件大小來比較效果
-
如果浮點數(shù)類型列較少,看整體數(shù)據(jù)文件大小效果會不太明顯
-
此壓縮產(chǎn)生的數(shù)據(jù)文件中浮點數(shù)據(jù)部分將不能被 2.4.0.10 以下的版本解析,即不向下兼容,使用時避免更換回舊版本,以免數(shù)據(jù)不能被讀取出來。
-
在使用過程中允許反復(fù)開啟和關(guān)閉 TSZ 壓縮選項的操作,前后兩種壓縮算法產(chǎn)生的數(shù)據(jù)都能正常讀取。
文件目錄結(jié)構(gòu)
安裝 TDengine 后,默認會在操作系統(tǒng)中生成下列目錄或文件:
| 目錄/文件 | 說明 |
|---|---|
| /usr/local/taos/bin | TDengine 可執(zhí)行文件目錄。其中的執(zhí)行文件都會軟鏈接到 /usr/bin 目錄下。 |
| /usr/local/taos/connector | TDengine 各種連接器目錄。 |
| /usr/local/taos/driver | TDengine 動態(tài)鏈接庫目錄。會軟鏈接到 /usr/lib 目錄下。 |
| /usr/local/taos/examples | TDengine 各種語言應(yīng)用示例目錄。 |
| /usr/local/taos/include | TDengine 對外提供的 C 語言接口的頭文件。 |
| /etc/taos/taos.cfg | TDengine 默認[配置文件] |
| /var/lib/taos | TDengine 默認數(shù)據(jù)文件目錄??赏ㄟ^[配置文件]修改位置。 |
| /var/log/taos | TDengine 默認日志文件目錄??赏ㄟ^[配置文件]修改位置。 |
可執(zhí)行文件
TDengine 的所有可執(zhí)行文件默認存放在 /usr/local/taos/bin 目錄下。其中包括:
- taosd:TDengine 服務(wù)端可執(zhí)行文件
- taos:TDengine Shell 可執(zhí)行文件
- taosdump:數(shù)據(jù)導(dǎo)入導(dǎo)出工具
- taosBenchmark:TDengine 測試工具
- remove.sh:卸載 TDengine 的腳本,請謹慎執(zhí)行,鏈接到 /usr/bin 目錄下的 rmtaos 命令。會刪除 TDengine 的安裝目錄 /usr/local/taos,但會保留 /etc/taos、/var/lib/taos、/var/log/taos。
注意:2.4.0.0 版本之后的 taosBenchmark 和 taosdump 需要安裝獨立安裝包 taosTools。
您可以通過修改系統(tǒng)配置文件 taos.cfg 來配置不同的數(shù)據(jù)目錄和日志目錄。
TDengine 的啟動、停止、卸載
TDengine 使用 Linux 系統(tǒng)的 systemd/systemctl/service 來管理系統(tǒng)的啟動和、停止、重啟操作。TDengine 的服務(wù)進程是 taosd,默認情況下 TDengine 在系統(tǒng)啟動后將自動啟動。DBA 可以通過 systemd/systemctl/service 手動操作停止、啟動、重新啟動服務(wù)。
以 systemctl 為例,命令如下:
-
啟動服務(wù)進程:
systemctl start taosd -
停止服務(wù)進程:
systemctl stop taosd -
重啟服務(wù)進程:
systemctl restart taosd -
查看服務(wù)狀態(tài):
systemctl status taosd
如果服務(wù)進程處于活動狀態(tài),則 status 指令會顯示如下的相關(guān)信息:
......
Active: active (running)
......
如果后臺服務(wù)進程處于停止狀態(tài),則 status 指令會顯示如下的相關(guān)信息:
......
Active: inactive (dead)
......
卸載 TDengine,只需要執(zhí)行如下命令:
rmtaos
警告:執(zhí)行該命令后,TDengine 程序?qū)⒈煌耆珓h除,務(wù)必謹慎使用。
TDengine參數(shù)限制與保留關(guān)鍵字
名稱命名規(guī)則
- 合法字符:英文字符、數(shù)字和下劃線
- 允許英文字符或下劃線開頭,不允許以數(shù)字開頭
- 不區(qū)分大小寫
-
轉(zhuǎn)義后表(列)名規(guī)則: 為了兼容支持更多形式的表(列)名,TDengine 引入新的轉(zhuǎn)義符 "`"??捎米尡砻c關(guān)鍵詞不沖突,同時不受限于上述表名稱合法性約束檢查。 轉(zhuǎn)義后的表(列)名同樣受到長度限制要求,且長度計算的時候不計算轉(zhuǎn)義符。使用轉(zhuǎn)義字符以后,不再對轉(zhuǎn)義字符中的內(nèi)容進行大小寫統(tǒng)一。
例如:`aBc` 和 `abc` 是不同的表(列)名,但是 abc 和 aBc 是相同的表(列)名。 需要注意的是轉(zhuǎn)義字符中的內(nèi)容必須是可打印字符。 支持轉(zhuǎn)義符的功能從 2.3.0.1 版本開始。
密碼合法字符集
[a-zA-Z0-9!?$%^&*()_–+={[}]:;@~#|<,>.?/]
去掉了 ‘“`\ (單雙引號、撇號、反斜杠、空格)
- 數(shù)據(jù)庫名:不能包含“.”以及特殊字符,不能超過 32 個字符
- 表名:不能包含“.”以及特殊字符,與所屬數(shù)據(jù)庫名一起,不能超過 192 個字符。每行數(shù)據(jù)最大長度 48K 個字符(2.1.7.0 之前的版本為 16K,每個 BINARY/NCHAR 類型的列還會額外占用 2 個 byte 的存儲位置)
- 表的列名:不能包含特殊字符,不能超過 64 個字符
- 數(shù)據(jù)庫名、表名、列名,都不能以數(shù)字開頭,合法的可用字符集是“英文字符、數(shù)字和下劃線”
- 表的列數(shù):不能超過 1024 列,最少需要 2 列,第一列必須是時間戳(從 2.1.7.0 版本開始,改為最多支持 4096 列)
- 記錄的最大長度:包括時間戳 8 byte,不能超過 48KB(2.1.7.0 之前的版本為 16K,每個 BINARY/NCHAR 類型的列還會額外占用 2 個 byte 的存儲位置)
- 單條 SQL 語句默認最大字符串長度:1048576 byte,但可通過系統(tǒng)配置參數(shù) maxSQLLength 修改,取值范圍 65480 ~ 1048576 byte
- 數(shù)據(jù)庫副本數(shù):不能超過 3
- 用戶名:不能超過 23 個 byte
- 用戶密碼:不能超過 15 個 byte
- 標簽(Tags)數(shù)量:不能超過 128 個,可以 0 個
- 標簽的總長度:不能超過 16K byte
- 記錄條數(shù):僅受存儲空間限制
- 表的個數(shù):僅受節(jié)點個數(shù)限制
- 庫的個數(shù):僅受節(jié)點個數(shù)限制
- 單個庫上虛擬節(jié)點個數(shù):不能超過 64 個
- 庫的數(shù)目,超級表的數(shù)目、表的數(shù)目,系統(tǒng)不做限制,僅受系統(tǒng)資源限制
- SELECT 語句的查詢結(jié)果,最多允許返回 1024 列(語句中的函數(shù)調(diào)用可能也會占用一些列空間),超限時需要顯式指定較少的返回數(shù)據(jù)列,以避免語句執(zhí)行報錯。(從 2.1.7.0 版本開始,改為最多允許 4096 列)
目前 TDengine 有將近 200 個內(nèi)部保留關(guān)鍵字,這些關(guān)鍵字無論大小寫均不可以用作庫名、表名、STable 名、數(shù)據(jù)列名及標簽列名等。這些關(guān)鍵字列表如下:
| 關(guān)鍵字列表 | ||||
|---|---|---|---|---|
| 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 |
轉(zhuǎn)義字符說明
-
轉(zhuǎn)義字符表(轉(zhuǎn)義符的功能從 2.4.0.4 版本開始)
字符序列 代表的字符 \'單引號' \"雙引號" \n 換行符 \r 回車符 \t tab符 \\斜杠\ \%% 規(guī)則見下 \__ 規(guī)則見下 -
轉(zhuǎn)義字符使用規(guī)則
- 標識符里有轉(zhuǎn)義字符(數(shù)據(jù)庫名、表名、列名)
- 普通標識符: 直接提示錯誤的標識符,因為標識符規(guī)定必須是數(shù)字、字母和下劃線,并且不能以數(shù)字開頭。
- 反引號 `` 標識符: 保持原樣,不轉(zhuǎn)義
- 數(shù)據(jù)里有轉(zhuǎn)義字符
- 遇到上面定義的轉(zhuǎn)義字符會轉(zhuǎn)義(%和_見下面說明),如果沒有匹配的轉(zhuǎn)義字符會忽略掉轉(zhuǎn)義符\。
- 對于 % 和 ,因為在 like 里這兩個字符是通配符,所以在模式匹配 like 里用
\%%和\_表示字符里本身的 % 和 ,如果在 like 模式匹配上下文之外使用\%或\_,則它們的計算結(jié)果為字符串\%和\_,而不是 % 和 _。
- 標識符里有轉(zhuǎn)義字符(數(shù)據(jù)庫名、表名、列名)
診斷及其他
網(wǎng)絡(luò)連接診斷
當出現(xiàn)客戶端應(yīng)用無法訪問服務(wù)端時,需要確認客戶端與服務(wù)端之間網(wǎng)絡(luò)的各端口連通情況,以便有針對性地排除故障。
目前網(wǎng)絡(luò)連接診斷支持在:Linux 與 Linux,Linux 與 Windows 之間進行診斷測試。
診斷步驟:
- 如擬診斷的端口范圍與服務(wù)器 taosd 實例的端口范圍相同,須先停掉 taosd 實例
- 服務(wù)端命令行輸入:
taos -n server -P <port>以服務(wù)端身份啟動對端口 port 為基準端口的監(jiān)聽 - 客戶端命令行輸入:
taos -n client -h <fqdn of server> -P <port>以客戶端身份啟動對指定的服務(wù)器、指定的端口發(fā)送測試包
服務(wù)端運行正常的話會輸出以下信息:
# 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
仔細閱讀打印出來的錯誤信息,可以幫助管理員找到原因,以解決問題。
啟動狀態(tài)及RPC診斷
taos -n startup -h <fqdn of server>
判斷 taosd 服務(wù)端是否成功啟動,是數(shù)據(jù)庫管理員經(jīng)常遇到的一種情形。特別當若干臺服務(wù)器組成集群時,判斷每個服務(wù)端實例是否成功啟動就會是一個重要問題。除檢索 taosd 服務(wù)端日志文件進行問題定位、分析外,還可以通過 taos -n startup -h <fqdn of server> 來診斷一個 taosd 進程的啟動狀態(tài)。
針對多臺服務(wù)器組成的集群,當服務(wù)啟動過程耗時較長時,可通過該命令行來診斷每臺服務(wù)器的 taosd 實例的啟動狀態(tài),以準確定位問題。
taos -n rpc -h <fqdn of server>
該命令用來診斷已經(jīng)啟動的 taosd 實例的端口是否可正常訪問。如果 taosd 程序異?;蛘呤ロ憫?yīng),可以通過 taos -n rpc -h <fqdn of server> 來發(fā)起一個與指定 fqdn 的 rpc 通信,看看 taosd 是否能收到,以此來判定是網(wǎng)絡(luò)問題還是 taosd 程序異常問題。
sync 及 arbitrator 診斷
taos -n sync -P 6040 -h <fqdn of server>
taos -n sync -P 6042 -h <fqdn of server>
用來診斷 sync 端口是否工作正常,判斷服務(wù)端 sync 模塊是否成功工作。另外,-P 6042 用來診斷 arbitrator 是否配置正常,判斷指定服務(wù)器的 arbitrator 是否能正常工作。
網(wǎng)絡(luò)速度診斷
taos -n speed -h <fqdn of server> -P 6030 -N 10 -l 10000000 -S TCP
從 2.2.0.0 版本開始,taos 工具新提供了一個網(wǎng)絡(luò)速度診斷的模式,可以對一個正在運行中的 taosd 實例或者 taos -n server 方式模擬的一個服務(wù)端實例,以非壓縮傳輸?shù)姆绞竭M行網(wǎng)絡(luò)測速。這個模式下可供調(diào)整的參數(shù)如下:
-n:設(shè)為“speed”時,表示對網(wǎng)絡(luò)速度進行診斷。 -h:所要連接的服務(wù)端的 FQDN 或 ip 地址。如果不設(shè)置這一項,會使用本機 taos.cfg 文件中 FQDN 參數(shù)的設(shè)置作為默認值。 -P:所連接服務(wù)端的網(wǎng)絡(luò)端口。默認值為 6030。 -N:診斷過程中使用的網(wǎng)絡(luò)包總數(shù)。最小值是 1、最大值是 10000,默認值為 100。 -l:單個網(wǎng)絡(luò)包的大小(單位:字節(jié))。最小值是 1024、最大值是 1024 1024 1024,默認值為 1000。 -S:網(wǎng)絡(luò)封包的類型。可以是 TCP 或 UDP,默認值為 TCP。
FQDN 解析速度診斷
taos -n fqdn -h <fqdn of server>
從 2.2.0.0 版本開始,taos 工具新提供了一個 FQDN 解析速度的診斷模式,可以對一個目標 FQDN 地址嘗試解析,并記錄解析過程中所消耗的時間。這個模式下可供調(diào)整的參數(shù)如下:
-n:設(shè)為“fqdn”時,表示對 FQDN 解析進行診斷。 -h:所要解析的目標 FQDN 地址。如果不設(shè)置這一項,會使用本機 taos.cfg 文件中 FQDN 參數(shù)的設(shè)置作為默認值。
服務(wù)端日志
taosd 服務(wù)端日志文件標志位 debugflag 默認為 131,在 debug 時往往需要將其提升到 135 或 143 。
一旦設(shè)定為 135 或 143,日志文件增長很快,特別是寫入、查詢請求量較大時,增長速度驚人。如合并保存日志,很容易把日志內(nèi)的關(guān)鍵信息(如配置信息、錯誤信息等)沖掉。為此,服務(wù)端將重要信息日志與其他日志分開存放:
- taosinfo 存放重要信息日志, 包括:INFO/ERROR/WARNING 級別的日志信息。不記錄DEBUG、TRACE級別的日志。
- taosdlog 服務(wù)器端生成的日志,記錄taosinfo中全部信息外,還根據(jù)設(shè)置的日志輸出級別,記錄DEBUG(日志級別135)、TRACE(日志級別是 143)。
客戶端日志
每個獨立運行的客戶端(一個進程)生成一個獨立的客戶端日志,其命名方式采用 taoslog+<序號> 的方式命名。文件標志位 debugflag 默認為 131,在 debug 時往往需要將其提升到 135 或 143 。
- taoslog 客戶端(driver)生成的日志,默認記錄客戶端INFO/ERROR/WARNING 級別日志,還根據(jù)設(shè)置的日志輸出級別,記錄DEBUG(日志級別135)、TRACE(日志級別是 143)。
其中,日志文件最大長度由 numOfLogLines 來進行配置,一個 taosd 實例最多保留兩個文件。
taosd 服務(wù)端日志采用異步落盤寫入機制,優(yōu)點是可以避免硬盤寫入壓力太大,對性能造成很大影響。缺點是,在極端情況下,存在少量日志行數(shù)丟失的可能。

