PostgreSQL checkpoint--shutdown
admin
2023-02-09 00:00:09
0

PostgreSQL在shutdown时会进行checkpoint。其流程如下。

1、在主进程中,会首先注册一个信号处理函数reaper,用于向checkpoint等子进程发送信号。向checkpoint进程发送SIGUSR2信号

PostmasterMain(int argc, char argv[])
pqsignal_no_restart(SIGCHLD, reaper); /
handle child termination */
reaper:
while ((pid = waitpid(-1, &exitstatus, WNOHANG)) > 0){
...
if (pid == CheckpointerPID){
...
SignalChildren(SIGUSR2);
}
...
}
...
PostmasterStateMachine();//向checkpoint进程发送SIGUSR2信号
|-----------------------
| if (pmState == PM_WAIT_BACKENDS){
| if (CountChildren(BACKEND_TYPE_NORMAL | BACKEND_TYPE_WORKER) == 0 &&
| StartupPID == 0 &&
| WalReceiverPID == 0 &&
| BgWriterPID == 0 &&
| (CheckpointerPID == 0 ||(!FatalError && Shutdown < ImmediateShutdown)) &&
| WalWriterPID == 0 &&
| AutoVacPID == 0){
| //pg_ctl stop -m immediate不会向checkpoint进程发送信号,即不会做checkpoint
| if (Shutdown >= ImmediateShutdown || FatalError){
| pmState = PM_WAIT_DEAD_END;
| }else{
| if (CheckpointerPID != 0){
| signal_child(CheckpointerPID, SIGUSR2);
| pmState = PM_SHUTDOWN;
| }
}
| }
|-------}
2、checkpoint进程,也会注册一个信号处理函数ReqShutdownHandler,用于处理主进程发送过来的SIGUSR2信号。接收到该信号后将shutdown_requested置为TRUE。在checkpoint进程的for循环中,如果shutdown_requested为TRUE,则进入shutdown流程:stop每个sender进程,所有sender进程stop后,根据条件进行checkpoint:CreateRestartPoint后者CreateCheckPoint

CheckpointerMain(void)->
//为信号SIGUSR2安装信号处理函数ReqShutdownHandler
pqsignal(SIGUSR2, ReqShutdownHandler); / request shutdown /
...
for (;;){
if (shutdown_requested){
/ Close down the database /
ShutdownXLOG(0, 0);
|-- WalSndInitStopping();//向每个sender进程发送信号修改到stopping状态
| WalSndWaitStopping();
| if (RecoveryInProgress())
| CreateRestartPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_IMMEDIATE);
| else{
| if (XLogArchivingActive() && XLogArchiveCommandSet())
| RequestXLogSwitch(false);
| CreateCheckPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_IMMEDIATE);
| }
|-- ...
proc_exit(0);
}
...
checkpoint
}
3、ReqShutdownHandler函数将shutdown_requested置为TRUE

ReqShutdownHandler(SIGNAL_ARGS)
{
shutdown_requested = true;
SetLatch(MyLatch);
}
 

相关内容

热门资讯

重磅消息“新青鸟拼三张开挂神器... 您好:新青鸟拼三张这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款...
【今日要闻】“毛豆大厅拼三张究... 您好:毛豆大厅拼三张这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这...
今日重磅消息“微信十三水怎么装... 有 亲,根据资深记者爆料微信十三水是可以开挂的,确实有挂(咨询软件无需打...
今日重大发现“功夫川麻是不是有... 有 亲,根据资深记者爆料功夫川麻是可以开挂的,确实有挂(咨询软件无需打开...
我来教教您“八闽掌上麻将到底有... 您好:八闽掌上麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款...
今日重大消息“新圣游牌九可以开... 有 亲,根据资深记者爆料新圣游牌九是可以开挂的,确实有挂(咨询软件无需打...
今日重大通报“欢乐划水麻将有没... 网上科普关于“欢乐划水麻将有没有挂”话题很是火热,小编也是针对欢乐划水麻将作*弊开挂的方法以及开挂对...
今日重大通报“蛮王牛牛有挂吗?... 家人们!今天小编来为大家解答蛮王牛牛透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...
玩家最新攻略“拱趴大菠萝可以开... 家人们!今天小编来为大家解答拱趴大菠萝透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买...
终于懂了“微乐南昌麻将怎么装挂... 有 亲,根据资深记者爆料微乐南昌麻将是可以开挂的,确实有挂(咨询软件无需...