亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL pg_ctl start啟動超時實例分析

2020-01-31 15:20:50
字體:
來源:轉載
供稿:網友

一、問題

pg_ctl start啟動時報錯退出:pg_ctl:server did not start in time。超時時間是多少?從什么時候到哪個階段算超時?

二、分析:該信息打印位置,從后面代碼段do_start函數中可以看出

1、pg_ctl start調用start_postmaster啟動PG的主進程后,每隔0.1ms檢查一次postmaster.pid文件,是否已寫入ready/standby

2、總共會檢查600次,即從啟動主進程后,最多等待60s,如果沒有寫入ready/standby則打印上述日志并退出

3、默認等待時間是60s,如果pg_ctl start -t指定等待時間,則等待時間為該指定時間

三、什么時候postmaster.pid文件寫入ready/standby

1、如果是主機不管有沒有設置hot standby

1)當startup進程恢復完成退出時,調用proc_exit函數向主進程發送SIGCHLD信號并退出

2)主進程接收到信號后,signal處理函數reaper調用AddToDataDirLockFile向postmaster.pid文件寫入ready

2、如果是備機即data目錄下有recovery.cnf文件,且設置了hot standby,在實際恢復前沒有到達一致性位置

1)startup進程向主進程發送PMSIGNAL_RECOVERY_STARTED信號,主進程調用信號處理函數sigusr1_handler,將pmState=PM_RECOVERY

2)每次讀取下一個xlog前都會調用CheckRecoveryConsistency函數進行一致性檢查:

2.1 進入一致性狀態,starup進程向主進程發送PMSIGNAL_BEGIN_HOT_STANDBY信號,主進程接收到信號后調用sigusr1_handler->AddToDataDirLockFile向postmaster.pid文件寫入ready

3、如果是備機即data目錄下有recovery.cnf文件,且設置了hot standby,在實際恢復前沒有到達一致性位置

1)startup進程向主進程發送PMSIGNAL_RECOVERY_STARTED信號,主進程調用信號處理函數sigusr1_handler,將pmState=PM_RECOVERY

2)每次讀取下一個xlog前都會調用CheckRecoveryConsistency函數進行一致性檢查。如果沒有進入一致性狀態

3)本地日志恢復完成,切換日志源時同樣調用CheckRecoveryConsistency函數進行一致性檢查

3.1 進入一致性狀態,starup進程向主進程發送PMSIGNAL_BEGIN_HOT_STANDBY信號,主進程接收到信號后調用sigusr1_handler->AddToDataDirLockFile向postmaster.pid文件寫入ready

4、如果是備機即data目錄下有recovery.cnf文件,且設置了hot standby,在實際恢復前到達一致性位置

1)startup進程向主進程發送PMSIGNAL_RECOVERY_STARTED信號,主進程調用信號處理函數sigusr1_handler,將pmState=PM_RECOVERY

2)CheckRecoveryConsistency函數進行一致性檢查,向主進程發送PMSIGNAL_BEGIN_HOT_STANDBY信號,主進程接收到信號后調用sigusr1_handler->AddToDataDirLockFile向postmaster.pid文件寫入ready

5、如果是備機即data目錄下有recovery.cnf文件,沒有設置hot standby

1)startup進程向主進程發送PMSIGNAL_RECOVERY_STARTED信號

2)主進程接收到信號后,向postmaster.將pmState=PM_RECOVERY

四、代碼分析

1、pg_ctl start流程

do_start-> pm_pid = start_postmaster(); if (do_wait){  print_msg(_("waiting for server to start..."));  switch (wait_for_postmaster(pm_pid, false)){   case POSTMASTER_READY:    print_msg(_(" done/n"));    print_msg(_("server started/n"));    break;   case POSTMASTER_STILL_STARTING:    print_msg(_(" stopped waiting/n"));    write_stderr(_("%s: server did not start in time/n"), progname);    exit(1);    break;   case POSTMASTER_FAILED:    print_msg(_(" stopped waiting/n"));    write_stderr(_("%s: could not start server/n" "Examine the log output./n"), progname);    exit(1);    break;  } }else  print_msg(_("server starting/n"));
wait_for_postmaster-> for (i = 0; i < wait_seconds * WAITS_PER_SEC; i++){  if ((optlines = readfile(pid_file, &numlines)) != NULL && numlines >= LOCK_FILE_LINE_PM_STATUS){   pmpid = atol(optlines[LOCK_FILE_LINE_PID - 1]);   pmstart = atol(optlines[LOCK_FILE_LINE_START_TIME - 1]);   if (pmstart >= start_time - 2 && pmpid == pm_pid){    char  *pmstatus = optlines[LOCK_FILE_LINE_PM_STATUS - 1];    if (strcmp(pmstatus, PM_STATUS_READY) == 0 || strcmp(pmstatus, PM_STATUS_STANDBY) == 0){     /* postmaster is done starting up */     free_readfile(optlines);     return POSTMASTER_READY;    }   }  }  free_readfile(optlines);  if (waitpid((pid_t) pm_pid, &exitstatus, WNOHANG) == (pid_t) pm_pid)   return POSTMASTER_FAILED;  pg_usleep(USEC_PER_SEC / WAITS_PER_SEC); } /* out of patience; report that postmaster is still starting up */ return POSTMASTER_STILL_STARTING;

2、server主進程及信號處理函數

PostmasterMain-> pqsignal_no_restart(SIGUSR1, sigusr1_handler); /* message from child process */ pqsignal_no_restart(SIGCHLD, reaper); /* handle child termination */ ... StartupXLOG(); ... proc_exit(0);//exit函數向主進程發送SIGCHLD信號
reaper->//進程終止或者停止的信號 AddToDataDirLockFile(LOCK_FILE_LINE_PM_STATUS, PM_STATUS_READY);
postmaster進程接收信號:sigusr1_handler-> if (CheckPostmasterSignal(PMSIGNAL_RECOVERY_STARTED) &&  pmState == PM_STARTUP && Shutdown == NoShutdown){  CheckpointerPID = StartCheckpointer();  BgWriterPID = StartBackgroundWriter();  if (XLogArchivingAlways())   PgArchPID = pgarch_start();  //hot_standby在postgresql.conf文件中配置TRUE  //表示在恢復的時候允許連接  if (!EnableHotStandby){   //將standby寫入postmaster.pid文件,表示up但不允許連接   AddToDataDirLockFile(LOCK_FILE_LINE_PM_STATUS, PM_STATUS_STANDBY);  }  pmState = PM_RECOVERY; } if (CheckPostmasterSignal(PMSIGNAL_BEGIN_HOT_STANDBY) &&  pmState == PM_RECOVERY && Shutdown == NoShutdown){  PgStatPID = pgstat_start();  //將ready寫入postmaster.pid文件,允許連接  AddToDataDirLockFile(LOCK_FILE_LINE_PM_STATUS, PM_STATUS_READY);  pmState = PM_HOT_STANDBY; } ...

3、Startup進程

StartupXLOG-> ReadCheckpointRecord if (ArchiveRecoveryRequested && IsUnderPostmaster){//有recovery.conf文件則ArchiveRecoveryRequested為TRUE  //有recovery.conf文件則ArchiveRecoveryRequested為TRUE  PublishStartupProcessInformation();  SetForwardFsyncRequests();  //向master進程發送PMSIGNAL_RECOVERY_STARTED信號  SendPostmasterSignal(PMSIGNAL_RECOVERY_STARTED);  bgwriterLaunched = true; } CheckRecoveryConsistency();-->... |-- if (standbyState == STANDBY_SNAPSHOT_READY && !LocalHotStandbyActive && |  reachedConsistency && IsUnderPostmaster){ |  SpinLockAcquire(&XLogCtl->info_lck); |  XLogCtl->SharedHotStandbyActive = true; |  SpinLockRelease(&XLogCtl->info_lck); |  LocalHotStandbyActive = true; |  SendPostmasterSignal(PMSIGNAL_BEGIN_HOT_STANDBY); |-- } ... 回放一個record后,每次讀取下一個record前都會調用CheckRecoveryConsistency

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品久久久久久久久| 51午夜精品视频| 欧美人与性动交a欧美精品| 久久夜精品va视频免费观看| 日韩成人激情视频| 国产精品久久久久一区二区| 26uuu日韩精品一区二区| 国产精品精品视频| 这里只有精品在线观看| 日韩经典一区二区三区| 岛国av一区二区三区| 日本高清+成人网在线观看| 亚洲网站在线看| 日韩在线视频导航| 国产欧美日韩精品专区| 日韩视频免费大全中文字幕| 91色p视频在线| 亚洲加勒比久久88色综合| 日韩精品极品在线观看| 国产999精品久久久| 国a精品视频大全| 日韩av快播网址| 亚洲欧美日韩中文在线制服| 国产日韩欧美夫妻视频在线观看| 亚洲精品日韩激情在线电影| 欧美国产日本在线| 浅井舞香一区二区| 欧美在线国产精品| 欧美在线观看日本一区| 97人人爽人人喊人人模波多| 美女国内精品自产拍在线播放| 国产成人精品免费久久久久| 中文字幕在线观看日韩| 亚洲夜晚福利在线观看| 色香阁99久久精品久久久| 亚洲自拍偷拍在线| 欧美大全免费观看电视剧大泉洋| 国产精品旅馆在线| 日韩精品中文字幕有码专区| 亚洲最大福利网| 国产偷国产偷亚洲清高网站| 97久久精品视频| 国产精品一区二区久久| 中日韩美女免费视频网站在线观看| 麻豆乱码国产一区二区三区| 中文字幕在线看视频国产欧美在线看完整| 日韩精品电影网| 2019国产精品自在线拍国产不卡| 美女啪啪无遮挡免费久久网站| 欧美高清视频在线播放| 国产精品丝袜白浆摸在线| 国内外成人免费激情在线视频网站| 欧美专区中文字幕| 日韩免费高清在线观看| 国产成人福利夜色影视| 日韩欧美国产成人| 亚洲人成网站777色婷婷| 亚洲日本欧美日韩高观看| 精品中文字幕久久久久久| 国产精品99蜜臀久久不卡二区| 久久视频在线直播| 欧美精品福利视频| 色阁综合伊人av| 亚洲国产精品免费| 欧美精品做受xxx性少妇| 国产精品高潮在线| 超在线视频97| 亚洲国产天堂网精品网站| 国产日韩欧美夫妻视频在线观看| 亚洲欧美精品一区| 国产女人18毛片水18精品| 国产精品观看在线亚洲人成网| 91精品国产网站| 国产亚洲欧洲在线| 在线播放日韩专区| 国产高清视频一区三区| 性色av一区二区三区在线观看| 亚洲成人精品av| 亚洲综合中文字幕在线观看| 欧美亚洲成人免费| 亚洲精品国精品久久99热| 日本国产欧美一区二区三区| 欧美大全免费观看电视剧大泉洋| 精品亚洲一区二区三区在线播放| 国产精品美女www| 国产成+人+综合+亚洲欧美丁香花| 亚洲成人黄色网| 亚洲人成77777在线观看网| 亚洲 日韩 国产第一| 欧美另类在线观看| 亚洲激情视频在线播放| 久久在线精品视频| 亚洲欧美日韩一区二区三区在线| 午夜免费日韩视频| 国产91精品久久久久| 久久亚洲私人国产精品va| 日韩资源在线观看| 欧美一区二区大胆人体摄影专业网站| 在线精品播放av| 亚洲天堂av在线免费| 久久久久久久久电影| 深夜精品寂寞黄网站在线观看| 欧美另类极品videosbestfree| 久久久久亚洲精品国产| 高清欧美一区二区三区| 亚洲国产精久久久久久| 欧美激情视频三区| 国产精品久久久久久久久| www国产精品视频| 久久精品视频va| 日韩a**中文字幕| 91久久中文字幕| 亚洲天堂男人天堂| 中文字幕欧美日韩精品| 日韩高清电影免费观看完整版| 亚洲国产另类 国产精品国产免费| 国产精品手机播放| 亚洲人午夜精品| 欧美视频二区36p| 日本a级片电影一区二区| 久色乳综合思思在线视频| 亚洲视频精品在线| 91精品视频免费看| 亚洲第一黄色网| 日韩网站在线观看| 日韩av三级在线观看| 91精品国产电影| 国产精品欧美日韩| 日韩亚洲国产中文字幕| 日韩精品极品毛片系列视频| 亚洲美女性生活视频| 亚洲专区中文字幕| 7m精品福利视频导航| 国产精品久久久久久久久久免费| 国产精品视频白浆免费视频| 日韩精品免费在线视频观看| 欧美日韩一区二区三区在线免费观看| 91精品国产色综合久久不卡98口| 成人网在线观看| 日本最新高清不卡中文字幕| 欧美日韩成人在线观看| 97婷婷涩涩精品一区| 伊人久久大香线蕉av一区二区| 日韩av一区二区在线| 成人激情电影一区二区| 91精品免费久久久久久久久| 日韩电影中文字幕在线观看| 国内精品小视频在线观看| 在线免费看av不卡| 久久精品视频在线播放| 成人性生交大片免费看视频直播| 亚洲第一区在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日韩美女在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 大伊人狠狠躁夜夜躁av一区| 亚洲老板91色精品久久| 亚洲老司机av| 欧美中文字幕在线| 91av视频在线观看| 日韩精品视频免费专区在线播放| 午夜精品理论片| 亚洲欧美三级伦理| 国产精品自拍偷拍|