0
点赞
收藏
分享

微信扫一扫

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

非凡兔 2022-03-18 阅读 32

​​​​

近期有不少朋友在社群和GitHub上问这个问题,为了彻底搞懂,我专门就什么是“dnode”,什么是“vnode”请教了一下对TDengine研发设计最有发言权的Jeff Tao,他给我看了一张这样的图。

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


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


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


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


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



弄懂了dnode、vnode以及它们之间与库和表的关系,“more dnodes are needed”就不难理解了,本质上,“more dnodes are needed”表示没有足够的vnode用于创建表。为什么会出现这个提示也很好判断了,无外乎下面三种情况:

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

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

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


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



1. 增加vnode中表的数目


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



create database db tables 2000 cache 10240 ablocks 4 tblocks 50





这些参数含义如下:

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

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

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

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


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



cache × ablocks + tblocks × 8 + 1000





以上数据库配置,每张表需要占用的内存约为42KB,例如创建100万张表,需要42GB内存,大家可以自己计算一下当前机器配置能够承载的表数目。也有的同学可能会想降低ablocks和cache的大小,以便最大化表数目,那么需要注意以下几点:

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

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


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



2. 增加vnode总数目


一台机器上能有多少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”?_缓存_02



举报

相关推荐

0 条评论