postgresql xlog初始化分析
- 初始化步骤
在initdb的initialize_data_directory
create_xlog_or_symlink() 创建wal日志目录
PG_CMD_OPEN通过 popen打开主程序postgres
-
snprintf(cmd, sizeof(cmd),
-
""%s" --boot -x1 -X %u %s %s %s",
-
backend_exec,
-
wal_segment_size_mb * (1024 * 1024),
-
data_checksums ? "-k" : "",
-
boot_options,
-
debug ? "-d 5" : "");
-
-
-
PG_CMD_OPEN;
此时,是--boot模式启动,进入到 AuxiliaryProcessMain
根据MyAuxProcType 取值为 BootstrapProcess
BootStrapXLOG(); 此处开始初始化
-
case 'x':
-
MyAuxProcType = atoi(optarg);
-
break;
-
-
......
-
-
case BootstrapProcess:
-
-
/*
-
* There was a brief instant during which mode was Normal; this is
-
* okay. We need to be in bootstrap mode during BootStrapXLOG for
-
* the sake of multixact initialization.
-
*/
-
SetProcessingMode(BootstrapProcessing);
-
bootstrap_signals();
-
BootStrapXLOG();
-
BootstrapModeMain();
-
proc_exit(1); /* should never return */
- 详细过程
BootStrapXLOG() 只在initdb时执行一次,会创建pg_control文件和wal segment
本文转载自博主原创文章,原文链接:https://blog.csdn.net/senllang/article/details/108433909