前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL checkpoint--shutdown

PostgreSQL checkpoint--shutdown

作者头像
yzsDBA
发布2022-03-29 11:30:21
8170
发布2022-03-29 11:30:21
举报
文章被收录于专栏:PostgreSQL研究与原理解析

PostgreSQL在关机时会进行检查点。其流程如下:

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

PostmasterMain(int argc, char *argv[])

pqsignal_no_restart(SIGCHLD,收割者); /* 处理子终止 */

收割者:

而 ((pid = waitpid(-1, &exitstatus, WNOHANG)) > 0){

...

if (pid == CheckpointerPID){

...

SignalChild(SIGUSR2);//向checkpoint进程发送SIGUSR2信号

}

...

}

2、checkpoint 同样,同样是一个处理函数ReqShutHandler,主处理进程注册发送过来的SIGUSR2信号。接收到该信号后将shutdown_requested置为TRUE。在checkpoint进程的for循环中,如果shutdown_requested为TRUE,则进程关闭停止每个进程,所有进程停止后,所有进程停止后,根据条件进行检查点:CreateRestartPoint 上游:CreateCheckPoint:

CheckpointerMain(void)->

//为信号SIGUSR2安装信号处理函数ReqShutdownHandler

pqsignal(SIGUSR2, ReqShutdownHandler); /* 请求关闭 */

...

为了 (;;){

如果(关闭请求){

/* 关闭数据库 */

关机XLOG(0, 0);

|-- WalSndInitStopping();//向每个发送者发送进程信号到停止状态

| WalSndWaitStopping();

| if (RecoveryInProgress())

| CreateRestartPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_IMMEDIATE);

| 别的{

| if (XLogArchivingActive() && XLogArchiveCommandSet())

| RequestXLogSwitch(false);

| CreateCheckPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_IMMEDIATE);

| }

|-- ...

proc_exit(0);

}

...

检查点

}

3、ReqShutdownHandler函数将shutdown_requested置为TRUE:

/* SIGUSR2: 设置标志以运行关闭检查点并退出 */

静态空白

ReqShutdownHandler(SIGNAL_ARGS)

{

shutdown_requested = true;

SetLatch(MyLatch);

}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档