我创建的表太多了吗?为什么提示“more dnodes are needed”?-LMLPHP


这是TDengine的集群设计图,TDengine内部对数据节点进行了虚拟化,引入了虚拟节点(vnode)的概念。图中的dnode是集群中的物理节点,即集群中的一台物理服务器或云平台上的一虚拟机,相对来说,vnode就是在物理节点上可独立运行的基础逻辑单元。也就是说,你可以把dnode理解为多个vnode的集合。


下面我们再来看一看vnode与库和表的关系。


每当我们创建一个数据库时,系统会自动分配vnode。一个表只会存在于一个vnode,但一个vnode中会存有一定数量的表;一个vnode只会属于一个库,但一个库会有一到多个vnode。不同的vnode之间资源互不共享。每个vnode都有自己的缓存,在硬盘上也有自己的存储目录。而在同一vnode内部无论是缓存还是硬盘的存储都是共享的。


因此,通过虚拟化,TDengine可以将dnode上有限的物理资源合理地分配给不同的vnode,大大提高资源的利用率和并发度。而一个dnode能包含多少数量的vnode,这个就需要根据物理机器的硬件资源进行配置。


  • 硬盘空间不足,导致无法创建新的vnode;

  • 硬盘没有写权限,导致无法创建新的vnode;

  • 当前机器配置支持的vnode数目已经达到上限。


前两种情况很好解释,如果是第三种原因,如何在不改变机器配置的情况下增加可用表数目呢?可以从这两方面调整参数。


在创建数据库的时候指定参数


  • tables:每个vnode允许创建表的最大数目

  • cache:内存块的大小,单位为字节

  • tblocks:每张表最大的内存块数

  • ablocks:每张表平均的内存块数


增加每个vnode的最大表数目需要更改tables参数,但该参数不能无限大,通常在4~20,000之间。通过修改配置,可以提高机器能创建的最大表数目。但是TDengine的设计中,每张表都占用固定内存,大致公式是:


  • ablocks 最好大于2,至少需要大于1;

  • cache 至少为每行数据总字节数的20倍,例如两列的表,第一列为timestamp,第二列为int,则每行数据为12B,那么cache至少为240B。


当把这些参数都调到很小时,系统性能会下降,所以大家需要全面去衡量。


一台机器上能有多少vnode,这与该机器CPU的核数有关,每个核可以支持8个vnode,当总vnode数目小于50时,系统默认设置为50,当总vnode数目大于256时,系统默认设置为256。如果需要修改这个数字,可在配置文件/etc/taos/taos.cfg中修改numOfTotalVnodes参数。


还有一个参数maxTables需要关注,表示系统能够创建的最大表数目,默认值为650,000,当预计创建的表数量大于此值时,需要到/etc/taos/taos.cfg中修改。


遗憾的是,以上这两类方法,均不能动态修改。增加vnode表数目的方法,需要删除数据库;增加vnode总数目的方法,需要卸载数据库重新安装。


因此,大家在进行测试的时候,需要全面评估和衡量,根据自己的数据量和机器配置,预先调整好参数。


看到这里,你的问题是不是迎刃而解了呢?欢迎文末留言,说出你最关注的问题吧!


本文编辑 | 关胜亮、夏昕



我创建的表太多了吗?为什么提示“more dnodes are needed”?-LMLPHP点击阅读原文,体验TDengine!

本文分享自微信公众号 - TDengine(taosdata_news)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

03-16 01:51