問題描述
TDengine Database 的客戶提出的問題是:服務(wù)器配置是4核8G總節(jié)點(diǎn)50個(gè),創(chuàng)建一個(gè)數(shù)據(jù)庫和一個(gè)超級(jí)表,在超級(jí)表下面現(xiàn)在有45000個(gè)子表,節(jié)點(diǎn)使用數(shù)量為46個(gè),如果子表再增加的話,只能加配置了嗎?

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



互聯(lián)網(wǎng).png)



-1.png)




.png)


證.png)


伙伴.png)
伙伴.png)
伙伴.png)



