PG中文社区 /

PostgreSQL流复制案例分析 | Startup 进程waiting问题分析

原作者:刘雪柏   创作时间:2019-08-12 10:41:13+08
wangliyun 发布于2019-08-13 08:08:13           评论: 2   浏览: 7794   顶: 745  踩: 717 

​一、 作者介绍

刘雪柏,目前就职于诺基亚东软通信有限公司,高级软件工程师,从事数据库相关工作,联系方式: aiden.liu@qq.com。

二、 问题现象

Postgresql 11.2版本物理复制,startup 进程命令行有时会出现waiting 标识。本文分析了出现waiting 标识的原因。

三、 问题分析:

通过ps -ef | grep startup 监控startup 进程。

postgres: startup process recovering 0000000100000000000000A6

当startup 进程出现waiting的标识。通过pstack查看startup 进程调用堆栈

[postgres@sscloud21 ~]$ pstack 197120

#0 0x00007f695b6faf53 in _selectnocancel () from /lib64/libc.so.6

#1 0x000000000088c97a in pg_usleep (microsec=) at pgsleep.c:56

#2 0x0000000000729ef9 in WaitExceedsMaxStandbyDelay () at standby.c:201

#3 ResolveRecoveryConflictWithVirtualXIDs (waitlist=0x1c706e0, reason=reason@entry=PROCSIGRECOVERYCONFLICT_SNAPSHOT) at standby.c:262

#4 0x000000000072a10e in ResolveRecoveryConflictWithVirtualXIDs (reason=PROCSIGRECOVERYCONFLICT_SNAPSHOT, waitlist=) at standby.c:315

#5 ResolveRecoveryConflictWithSnapshot (latestRemovedXid=, node=…) at standby.c:313

#6 0x00000000004c23be in heapxlogclean (record=0x1c00698) at heapam.c:8198

#7 heap2_redo (record=0x1c00698) at heapam.c:9351

#8 0x0000000000503e85 in StartupXLOG () at xlog.c:7306

#9 0x00000000006d82b1 in StartupProcessMain () at startup.c:211

#10 0x0000000000512275 in AuxiliaryProcessMain (argc=argc@entry=2, argv=argv@entry=0x7fff8b5d99b0) at bootstrap.c:441

#11 0x00000000006d53a0 in StartChildProcess (type=StartupProcess) at postmaster.c:5331

#12 0x00000000006d7b75 in PostmasterMain (argc=argc@entry=3, argv=argv@entry=0x1bd0e40) at postmaster.c:1371

#13 0x000000000048124f in main (argc=3, argv=0x1bd0e40) at main.c:228

检查源码发现,startup 进程正在执行 XLOGHEAP2CLEAN 类型的redo操作(vacuum命令产生的块清除redo)。

heapam.c代码中有如下注释:

CENTER_PostgreSQL_Community

startup 进程在执行清除tuples前需要确认没有活动的查询,并且这些tuples对于活动查询仍然可见。

跟着ResolveRecoveryConflictWithSnapshot->ResolveRecoveryConflictWithVirtualXIDs->WaitExceedsMaxStandbyDelay->GetStandbyLimitTime

standby.c代码中GetStandbyLimitTime函数:

CENTER_PostgreSQL_Community

从代码中可以看出startup 进程在执行清除tuples前需要确认没有活动的查询有等待时间限制,fromStream的情况超过

maxstandbystreamingdelay参数时间限制会kill掉正在执行的查询,其他情况如果超过了maxstandbyarchivedelay

参数时间限制会调用CancelVirtualTransaction函数 kill掉正在执行的查询。

standby.c相关代码

CENTER_PostgreSQL_Community

procarray.c相关代码

CENTER_PostgreSQL_Community

四、 小结

1、 原因: 重放XLOGHEAP2CLEAN 类型的redo操作不允许有查询,如果有会等待,等待时间由maxstandbystreamingdelay/maxstandbyarchivedelay控制。

2、 解决这个问题可以控制slave端禁止执行查询操作,或者调整maxstandbystreamingdelay/maxstandbyarchivedelay参数的值到可接受的范围。

3、 maxstandbystreamingdelay/maxstandbyarchivedelay参数默认值30秒。

CENTER_PostgreSQL_Community


评论:2   浏览: 7794                   顶: 745  踩: 717 

请在登录后发表评论,否则无法保存。

1# __ xiaowu 回答于 2024-04-23 14:51:59+08
响亮霸气的帮派名字:https://www.nanss.com/mingcheng/5838.html 学无止境的励志句子:https://www.nanss.com/xuexi/5867.html 荏苒时光:https://www.nanss.com/yuedu/5107.html 带娃崩溃的句子发朋友圈:https://www.nanss.com/wenan/5830.html 葬爱家族火星文:https://www.nanss.com/wenan/5612.html 王者伤感id:https://www.nanss.com/mingcheng/5574.html 村上春树人生名言:https://www.nanss.com/xuexi/5869.html 现实残酷的句子:https://www.nanss.com/yulu/5967.html 登山作文:https://www.nanss.com/xuexi/4733.html 适合3周岁生日发的朋友圈:https://www.nanss.com/wenan/5697.html 金桂飘香造句:https://www.nanss.com/xuexi/5186.html ins文案:https://www.nanss.com/wenan/5912.html 防溺水的好段摘抄:https://www.nanss.com/xuexi/5965.html 18岁成人礼:https://www.nanss.com/xuexi/5550.html 别饿坏了那匹马读后感:https://www.nanss.com/xuexi/5747.html 2个字的情侣网名:https://www.nanss.com/mingcheng/5525.html 低调有内涵的队名:https://www.nanss.com/gongzuo/5776.html 简单生活心态的句子:https://www.nanss.com/yulu/5421.html 祝生日文案高级ins:https://www.nanss.com/wenan/5564.html 新年第一天上班文案:https://www.nanss.com/wenan/5767.html 油菜花文案:https://www.nanss.com/wenan/5947.html 青春之歌读后感:https://www.nanss.com/xuexi/5752.html 设计师名言:https://www.nanss.com/gongzuo/5950.html 励志文案:https://www.nanss.com/wenan/5127.html 每天学点幽默口才:https://www.nanss.com/yulu/5036.html 美食与幸福感的句子:https://www.nanss.com/yulu/5939.html 疫情过后的句子唯美短句:https://www.nanss.com/yulu/5372.html 三人组合霸气搞笑名字:https://www.nanss.com/mingcheng/5885.html 思念的网名:https://www.nanss.com/mingcheng/5611.html 致自己一段话霸气高冷的话:https://www.nanss.com/yulu/5295.html

2# __ hemuyang 回答于 2019-09-15 10:54:23+08
请问下如何复现该问题



发表评论:
加入我们
QQ群1:5276420
QQ群2:3336901
QQ群3:254622631
文档群:150657323
文档翻译平台:按此访问
社区邮件列表:按此订阅
扫码关注
© PostgreSQL中文社区 ... (自2010年起)