問題描述
TDengine Database 的客戶提出的問題是:服務器配置是4核8G總節點50個,創建一個數據庫和一個,在超級表下面現在有45000個子表,節點使用數量為46個,如果子表再增加的話,只能加配置了嗎?

問題分析
當出現more dnodes are needed的出錯信息時,表示沒有更多的vnode用于創建表,這種情況有三種原因:
- 硬盤空間不足,導致無法創建新的vnode
- 硬盤沒有寫權限,導致無法創建新的vnode
- 當前機器配置支持的vnode數目已經達到上限
前兩種情況很好解釋,如果是第三種原因,怎么在不改變機器配置的情況下增加可用表數目呢?TDengine Database的數據存儲在vnode上,一個vnode包含固定數量的表,每臺機器又包含了固定數量的vnode,可從這兩個方面調整參數。
1.增加vnode表數目
在創建數據庫的時候指定參數
create database db tables 2000 cache 10240 ablocks 4 tblocks 50
這些參數含義如下:
- tables:每個vnode允許創建表的最大數目
- cache: 內存塊的大小,單位為字節
- tblocks: 每張表最大的內存塊數
- ablocks: 每張表平均的內存塊數
增加每個vnode的最大表數目需要更改tables參數,但該參數不能無限大,通常在4-20000之間。通過修改配置,可以提高機器能創建的最大表數目。但是TDengine的設計中,每張表都占用固定內存,大致公式是:
cache*ablocks + tblocks*8 + 1000
以上數據庫配置,每張表需要占用的內存約為42K,例如創建100萬表,需要42GB內存,各位可以自己計算一下當前機器配置能夠承載的表數目。也有的同學可能會想降低alocks和cache的大小,以便最大化表數目,那么需要注意以下幾點:
- ablocks 最好大于
2,至少需要大于1 - cache 至少為每行數據總字節數的
20倍,例如兩列的表,第一列為 timestamp,第二列為int,則每行數據為12字節,那么cache至少為240
當把這些參數都調整很小時,系統性能會下降,這也是題中應有之意。
2.增加vnode總數目
TDengine Database的vnode數目與計算機CPU核數有關,每個CPU核可以支持8個vnode,當總vnode數目小于50時,系統默認設置為50,當總vnode數目大于256時,系統默認設置為256。如果需要修改這個數字,可在配置文件/etc/taos/taos.cfg中修改numOfTotalVnodes參數。
還有一個參數maxTables需要關注,表示系統能夠創建的最大表數目,默認值為650000,當預計創建的表數量大于此值時,需要到/etc/taos/taos.cfg中修改。
結論
遺憾的是,以上這兩類方法,均不能動態修改。增加vnode表數目的方法,需要刪除數據庫;增加vnode總數目的方法,需要卸載數據庫重新安裝。
因此,各位在進行測試的時候,根據自己的數據量和機器配置,預先調整好參數。



























