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

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL pg_ctl start啟動超時實例分析

2020-03-12 23:45:12
字體:
來源:轉載
供稿:網友

一、問題

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

總結

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


注:相關教程知識閱讀請移步到PostgreSQL頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本色道久久88综合亚洲精品ⅰ| 亚洲欧美中文字幕| 日本高清不卡在线| 亚洲欧美激情在线视频| 国产精品亚发布| 福利一区福利二区微拍刺激| 久久福利网址导航| 高清欧美电影在线| 成人激情视频在线播放| 欧美性xxxxxx| 国模视频一区二区三区| 91成人性视频| 久久欧美在线电影| 国产精品一区二区三区成人| 激情成人中文字幕| 成人a在线观看| 91av在线影院| 日韩精品福利网站| 成人亚洲激情网| 欧美日韩国产成人| y97精品国产97久久久久久| 久久精品国产欧美激情| 黑人狂躁日本妞一区二区三区| 亚洲国产97在线精品一区| 91午夜理伦私人影院| 欧美成人午夜免费视在线看片| 日本韩国欧美精品大片卡二| 欧美高清在线视频观看不卡| 91免费版网站入口| 欧洲s码亚洲m码精品一区| 亚洲品质视频自拍网| 亚洲精品永久免费| 亚洲精品videossex少妇| 成人黄色片网站| 尤物九九久久国产精品的特点| 亚洲美女av在线播放| 国产69精品久久久久9| 久久久国产在线视频| 精品精品国产国产自在线| 亚洲在线www| 久久精品亚洲94久久精品| 26uuu国产精品视频| 中文字幕欧美日韩在线| 亚洲欧美国内爽妇网| 国产成人精品久久亚洲高清不卡| 国产精品jizz在线观看麻豆| 欧美有码在线观看视频| 亚洲美女av黄| 高清一区二区三区日本久| 国产精品白嫩初高中害羞小美女| 国产97在线播放| 26uuu另类亚洲欧美日本一| 久久91亚洲人成电影网站| 在线成人中文字幕| 97碰碰碰免费色视频| 日韩免费高清在线观看| 亚洲自拍欧美色图| 国产精品爱啪在线线免费观看| 久久香蕉国产线看观看网| 欧美日韩中国免费专区在线看| 久久九九全国免费精品观看| 亚洲综合精品伊人久久| 97av在线视频免费播放| 日韩精品电影网| 成人免费淫片aa视频免费| 欧美中文字幕在线播放| 97免费中文视频在线观看| 97国产在线视频| 欧美重口另类videos人妖| 综合网日日天干夜夜久久| 一本色道久久88综合亚洲精品ⅰ| 亚洲精品一区久久久久久| 亚洲欧美在线x视频| 中文字幕精品国产| 日韩欧美一区视频| 国产欧美在线看| 国产一区二区欧美日韩| 最新国产精品亚洲| 国产日韩精品综合网站| 热99在线视频| 亚洲自拍在线观看| 亚洲一区二区久久久| 精品无人区太爽高潮在线播放| 国产精品黄页免费高清在线观看| 在线视频欧美性高潮| 成人福利视频在线观看| 中文字幕日韩精品有码视频| 亚洲欧美中文字幕在线一区| 91sao在线观看国产| 成人精品一区二区三区| 狠狠色狠狠色综合日日小说| 成人精品在线视频| 日韩欧美在线视频免费观看| 欧美视频裸体精品| 色多多国产成人永久免费网站| 国产精品美女视频网站| 欧美午夜激情小视频| 亚洲精品免费一区二区三区| 国产一区二区欧美日韩| www.欧美精品| 国产欧美日韩中文字幕| 国产精品久久久久久超碰| 欧美日韩国产限制| 九九视频这里只有精品| 日韩午夜在线视频| 亚洲香蕉伊综合在人在线视看| 亚洲国产精品网站| 日韩免费av一区二区| 91久久久久久久久久久| 亚洲精品一区二区三区不| 日韩欧美aⅴ综合网站发布| 国产日产欧美a一级在线| 亚洲第一视频在线观看| 国产视频亚洲视频| 国产精品夜色7777狼人| 欧美亚洲国产精品| 在线电影中文日韩| 欧美国产精品人人做人人爱| 在线亚洲国产精品网| 久久久亚洲成人| 狠狠久久亚洲欧美专区| 中国日韩欧美久久久久久久久| 国产大片精品免费永久看nba| 亚洲成人久久久| 亚洲高清免费观看高清完整版| 日韩av在线免费播放| 国产精品免费一区| 国产精品偷伦一区二区| 国产精品一区二区三区在线播放| 欧美精品18videos性欧美| 高清欧美性猛交xxxx黑人猛交| 69影院欧美专区视频| 欧美电影在线免费观看网站| 日韩中文字幕不卡视频| 亚洲精品乱码久久久久久金桔影视| 久久久影视精品| 日韩精品福利网站| 亚洲人成电影网站色xx| 欧美综合激情网| 国内精品美女av在线播放| 亚洲**2019国产| 欧美高清videos高潮hd| 久久久久久伊人| 国产欧美精品一区二区三区介绍| 国产精品福利久久久| 亚洲天堂av图片| 国产精品黄色av| 日韩成人高清在线| 欧美精品一区三区| 91久久久精品| 亚洲成年网站在线观看| 国产日韩精品在线播放| 午夜精品福利视频| 欧美激情精品在线| 羞羞色国产精品| 热久久这里只有| 中文字幕av一区二区三区谷原希美| 清纯唯美日韩制服另类| 国产91免费看片| 久久av红桃一区二区小说| 久久久www成人免费精品张筱雨| 日韩精品免费综合视频在线播放| 午夜精品久久久久久久久久久久| 欧美激情亚洲另类|