PostgreSQLcheckpoint--shutdown

PostgreSQL在shutdown時會進行checkpoint。其流程如下。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,察隅企業(yè)網(wǎng)站建設,察隅品牌網(wǎng)站建設,網(wǎng)站定制,察隅網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,察隅網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

1、在主進程中,會首先注冊一個信號處理函數(shù)reaper,用于向checkpoint等子進程發(fā)送信號。向checkpoint進程發(fā)送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進程發(fā)送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進程發(fā)送信號,即不會做checkpoint
| if (Shutdown >= ImmediateShutdown || FatalError){
| pmState = PM_WAIT_DEAD_END;
| }else{
| if (CheckpointerPID != 0){
| signal_child(CheckpointerPID, SIGUSR2);
| pmState = PM_SHUTDOWN;
| }
}
| }
|-------}
2、checkpoint進程,也會注冊一個信號處理函數(shù)ReqShutdownHandler,用于處理主進程發(fā)送過來的SIGUSR2信號。接收到該信號后將shutdown_requested置為TRUE。在checkpoint進程的for循環(huán)中,如果shutdown_requested為TRUE,則進入shutdown流程:stop每個sender進程,所有sender進程stop后,根據(jù)條件進行checkpoint:CreateRestartPoint后者CreateCheckPoint

CheckpointerMain(void)->
//為信號SIGUSR2安裝信號處理函數(shù)ReqShutdownHandler
pqsignal(SIGUSR2, ReqShutdownHandler); / request shutdown /
...
for (;;){
if (shutdown_requested){
/ Close down the database /
ShutdownXLOG(0, 0);
|-- WalSndInitStopping();//向每個sender進程發(fā)送信號修改到stopping狀態(tài)
| 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函數(shù)將shutdown_requested置為TRUE

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

名稱欄目:PostgreSQLcheckpoint--shutdown
網(wǎng)站網(wǎng)址:http://muchs.cn/article44/gdiphe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、手機網(wǎng)站建設、網(wǎng)站維護、云服務器全網(wǎng)營銷推廣、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設