postgresql xlog初始化分析

云市场 2020-09-16 10:59:31
  • 初始化步骤

在initdb的initialize_data_directory

create_xlog_or_symlink()  创建wal日志目录

PG_CMD_OPEN通过 popen打开主程序postgres 

  1.     snprintf(cmd, sizeof(cmd),

  2.              ""%s" --boot -x1 -X %u %s %s %s",

  3.              backend_exec,

  4.              wal_segment_size_mb * (1024 * 1024),

  5.              data_checksums ? "-k" : "",

  6.              boot_options,

  7.              debug ? "-d 5" : "");

  8.     PG_CMD_OPEN;

    此时,是--boot模式启动,进入到 AuxiliaryProcessMain 

    根据MyAuxProcType 取值为 BootstrapProcess 

BootStrapXLOG();  此处开始初始化

  1.         case 'x':

  2.                 MyAuxProcType = atoi(optarg);

  3.                 break;

  4. ......

  5. case BootstrapProcess:

  6.             /*

  7.              * There was a brief instant during which mode was Normal; this is

  8.              * okay. We need to be in bootstrap mode during BootStrapXLOG for

  9.              * the sake of multixact initialization.

  10.              */

  11.             SetProcessingMode(BootstrapProcessing);

  12.             bootstrap_signals();

  13.             BootStrapXLOG();

  14.             BootstrapModeMain();

  15.             proc_exit(1);        /* should never return */

  • 详细过程

BootStrapXLOG() 只在initdb时执行一次,会创建pg_control文件和wal segment

本文转载自博主原创文章,原文链接:https://blog.csdn.net/senllang/article/details/108433909