PostgreSQL关闭模式
一、Shutdown smart模式:
1、pg_ctl中
发送SIGTERM信号给postmaster,并定时等待判断服务端是否已退出,如果等待超时,打印提示信息退出。
2、postmaster
1)postmaster收到pg_ctl发送的SIGTERM信号后,进入pmdie函数,堆栈如下:
#0 pmdie (postgres_signal_arg=15) at postmaster.c:2779
#1 <signal handler called>
#2 0x00007fb94060a093 in __select_nocancel () at ../sysdeps/unix/syscall-template.S:81
#3 0x00000000008afe5e in ServerLoop () at postmaster.c:1709
#4 0x00000000008af84d in PostmasterMain (argc=3, argv=0x1538a80) at postmaster.c:1417
#5 0x00000000007b1514 in main (argc=3, argv=0x1538a80) at main.c:209
2)在pmdie函数中,设置Shutdown值为SmartShutdown 和connsAllowed值为ALLOW_SUPERUSER_CONNS,然后进入PostmasterStateMachine函数
注:此时的pmState 为PM_RUN
3)PostmasterStateMachine函数
检查是否正在备份,如果没有正在备份时,设置connsAllowed值为ALLOW_NO_CONNS
如果connsAllowed值为ALLOW_NO_CONNS时,检查是否有客户端连接(BACKEND_TYPE_NORMAL),
如果没有客户端连接(BACKEND_TYPE_NORMAL),设置pmState值为PM_STOP_BACKENDS,开始退出后台backends,直到状态机pmState设置为PM_NO_CHILDREN,并调用ExitPostmaster退出。
如果有客户端连接(BACKEND_TYPE_NORMAL),本次不处理,在下次收到客户端连接退出后发送的SIGCHLD信号后继续处理。
如果connsAllowed值不为ALLOW_NO_CONNS时,本次不处理,在下次收到客户端连接退出后发送的SIGCHLD信号后继续处理。
3、客户端连接退出时,调用PostmasterStateMachine函数进行状态机处理,堆栈如下:
(gdb) bt
#0 ExitPostmaster (status=0) at postmaster.c:5156
#1 0x00000000008b34b3 in PostmasterStateMachine () at postmaster.c:4004
#2 0x00000000008b2192 in reaper (postgres_signal_arg=17) at postmaster.c:3258
#3 <signal handler called>
#4 0x00007fda80fc7093 in __select_nocancel () at ../sysdeps/unix/syscall-template.S:81
#5 0x0000000000b82c57 in pg_usleep (microsec=100000) at pgsleep.c:56
#6 0x00000000008afdf9 in ServerLoop () at postmaster.c:1694
#7 0x00000000008af84d in PostmasterMain (argc=3, argv=0x178da80) at postmaster.c:1417
#8 0x00000000007b1514 in main (argc=3, argv=0x178da80) at main.c:209
二、shutdown fast模式
1、pg_ctl:
发送SIGINT信号
2、postmaster
在pmdie中设置Shutdown值为FastShutdown 和 pmState值为PM_STOP_BACKENDS,然后进入PostmasterStateMachine状态机处理函数。
三、shutdown immediate模式
1、pg_ctl:
发送SIGQUIT信号
2、postmaster
在pmdie中设置Shutdown值为ImmediateShutdown,然后发送SIGQUIT信号给所有child通知其退出,再设置pmState值为PM_STOP_BACKENDS,然后进入PostmasterStateMachine状态机处理函数。
- 点赞
- 收藏
- 关注作者
评论(0)