问题描述
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总数目的方法,需要卸载数据库重新安装。
因此,各位在进行测试的时候,根据自己的数据量和机器配置,预先调整好参数。