数据库启动流程
一些概念
- 常规启动模式下,最先启动的是postmaster线程,postmaster线程作为一切的起始,完成各类模块功能的初始化,拉起一系列子线程,最后postmaster转为守护线程,一直在
ServerLoop()
中负责处理会话连接、线程拉起、信号处理转发等等。
main 函数
初始化用于系统调用的锁。 例如操作环境变量时,使用env_lock保护,还有getpwuid_lock等,在这里被称为系统调用,syscall。
检查'GAUSS_MMAP_THRESHOLD'环境变量。
g_instance的遍历初始化。
knl_instance_init() {
一些内存上下文的初始创建。
一些变量、值的赋值为初始值:
0、null、false等
类实例的初始化一个实例
一段初始内存的申请
一些默认值,如data目录内的文件夹名称等
一些结构的创建:
vec_func_hash:内置函数的哈希表
......
}
又创建了几个内存上下文:增量ckpt的,通信的等。
创建ThreapTopMemoryContext等上下文,并初始化一些内存上下文用法的变量,保证内存上下文可用
t_thrd的遍历初始化
knl_thread_init(MA