PostgreSQL流复制案例分析 | Startup 进程waiting问题分析 原作者:刘雪柏 创作时间:2019-08-12 10:41:13+08 |
wangliyun 发布于2019-08-13 08:08:13
![]() ![]() ![]() ![]() ![]() |
一、 作者介绍
刘雪柏,目前就职于诺基亚东软通信有限公司,高级软件工程师,从事数据库相关工作,联系方式: 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代码中有如下注释:
startup 进程在执行清除tuples前需要确认没有活动的查询,并且这些tuples对于活动查询仍然可见。
跟着ResolveRecoveryConflictWithSnapshot->ResolveRecoveryConflictWithVirtualXIDs->WaitExceedsMaxStandbyDelay->GetStandbyLimitTime
standby.c代码中GetStandbyLimitTime函数:
从代码中可以看出startup 进程在执行清除tuples前需要确认没有活动的查询有等待时间限制,fromStream的情况超过
maxstandbystreamingdelay参数时间限制会kill掉正在执行的查询,其他情况如果超过了maxstandbyarchivedelay
参数时间限制会调用CancelVirtualTransaction函数 kill掉正在执行的查询。
standby.c相关代码
procarray.c相关代码
四、 小结
1、 原因: 重放XLOGHEAP2CLEAN 类型的redo操作不允许有查询,如果有会等待,等待时间由maxstandbystreamingdelay/maxstandbyarchivedelay控制。
2、 解决这个问题可以控制slave端禁止执行查询操作,或者调整maxstandbystreamingdelay/maxstandbyarchivedelay参数的值到可接受的范围。
3、 maxstandbystreamingdelay/maxstandbyarchivedelay参数默认值30秒。
请在登录后发表评论,否则无法保存。
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
请问下如何复现该问题
发表评论:
扫码关注
© PostgreSQL中文社区 ... (自2010年起)