NDB 集群内部结构  /  NDB 集群启动阶段  /  配置读取阶段 (STTOR 阶段 -1)

5.2 配置读取阶段 (STTOR 阶段 -1)

READ_CONFIG_REQ 信号为所有内核块提供了一个机会来读取配置数据,这些数据存储在所有块都可以访问的全局对象中。数据节点中的所有内存分配都在此阶段进行。

注意

内核块与 NDB 文件系统之间的连接也在阶段 0 建立。这是为了让块能够轻松地通信,以确定表结构的哪些部分应该写入磁盘。

NDB 通过两种不同的方式执行内存分配。第一种方法是使用 allocRecord() 方法(在 storage/ndb/src/kernel/vm/SimulatedBlock.hpp 中定义)。这是传统方法,通过该方法,记录使用 ptrCheckGuard 宏(在 storage/ndb/src/kernel/vm/pc.hpp 中定义)进行访问。另一种方法是使用 setSize() 方法分配内存,该方法在 storage/ndb/src/kernel/vm/CArray.hpp 中的模板帮助下定义。

这些方法有时还会初始化内存,确保内存分配和初始化都具有看门狗保护。

许多块还会执行特定于块的初始化,这通常需要构建链表或双向链表(在某些情况下还需要构建哈希表)。

分配中使用的许多大小都在 storage/ndb/src/kernel/vm/Configuration.cpp 中的 Configuration::calcSizeAlt() 方法中计算。

已经为更智能地池化内存资源做了一些准备。 DataMemory 和磁盘记录已经属于这个全局内存池。