当前位置: 首页 > news >正文

博物馆网站 微信 微博 建设方案网上工作平台

博物馆网站 微信 微博 建设方案,网上工作平台,厦门网站制作收费,长丰县建设局网站事务提交会通过delayChkpt阻塞checkpoint Postgresql事务在事务提交时(执行commit的最后阶段)会通过加锁阻塞checkpoint的执行,尽管时间非常短,分析为什么需要这样做: 首先看提交堆栈 #1 0x0000000000539175 in Co…

事务提交会通过delayChkpt阻塞checkpoint

Postgresql事务在事务提交时(执行commit的最后阶段)会通过加锁阻塞checkpoint的执行,尽管时间非常短,分析为什么需要这样做:

首先看提交堆栈

#1  0x0000000000539175 in CommitTransaction () at xact.c:2079
#2  0x0000000000539e04 in CommitTransactionCommand () at xact.c:2824
#3  0x000000000087d1ea in finish_xact_command () at postgres.c:2482
#4  0x000000000087af27 in exec_simple_query (query_string=0x24050e0 "insert into t1 values (1,1);") at postgres.c:1154

函数调用过程

关键函数如下:

CommitTransaction...latestXid = RecordTransactionCommit();...BufmgrCommit()START_CRIT_SECTION()【关键流程】END_CRIT_SECTION()latestXid = TransactionIdLatest(xid, nchildren, children);SyncRepWaitForLSN(XactLastRecEnd, true);return latestXid;...ProcArrayEndTransaction(MyProc, latestXid);...// clean ...

关键流程

delayChkpt阻塞checkpoint发生位置:

  1. 事务提交配置delayChkpt
RecordTransactionCommit...START_CRIT_SECTION();MyPgXact->delayChkpt = true;/* 写XLOG:COMMIT *//* 写CLOG:内存写不刷盘 */MyPgXact->delayChkpt = false;...
  1. CreateCheckPoint等待delayChkpt
    联动CreateCheckPoint,会在【2】等在所有Xact的delayChkpt为false才能继续
CreateCheckPoint// 【1】计算位置(重要)WALInsertLockAcquireExclusive();curInsert = XLogBytePosToRecPtr(Insert->CurrBytePos);freespace = INSERT_FREESPACE(curInsert);if (freespace == 0){if (curInsert % XLogSegSize == 0)curInsert += SizeOfXLogLongPHD;elsecurInsert += SizeOfXLogShortPHD;}checkPoint.redo = curInsert;RedoRecPtr = XLogCtl->Insert.RedoRecPtr = checkPoint.redo;WALInsertLockRelease();// 【2】通过delayChkpt等其他所有正在提交中、正在写日志的事务vxids = GetVirtualXIDsDelayingChkpt(&nvxids);if (nvxids > 0){do{pg_usleep(10000L);	/* wait for 10 msec */} while (HaveVirtualXIDsDelayingChkpt(vxids, nvxids));}pfree(vxids);// 【3】刷数据CheckPointGuts(checkPoint.redo, flags);// 【4】记chkpt日志XLogBeginInsert();XLogRegisterData((char *) (&checkPoint), sizeof(checkPoint));recptr = XLogInsert(RM_XLOG_ID,shutdown ? XLOG_CHECKPOINT_SHUTDOWN :XLOG_CHECKPOINT_ONLINE);XLogFlush(recptr);

为什么checkpoint需要等事务提交

确定REDO位点是在createCheckpoint的函数前面执行的,checkpoint和事务提交并发会有下面三种情况发生(假设没有delayChkpt会有情况二发生)
在这里插入图片描述
情况一:redo point在commit提交前,那么如果crash发生了,redo过程会覆盖这条xlog,不会有问题

情况二:如果没有delayChkpt,redo point可能发生在上图中的位置(然后checkpoint刷完数据后,当前事务才写clog),XLOG已经先写了,如果crash发生了,redo过程不会覆盖这条xlog,而且clog信息不存在,那么commit信息彻底丢掉了。

情况三:redo point在事务提交后,redo时xlog虽然还是做不到,但是clog一定会被刷下去,所以我们不会丢失事务提交信息。

http://www.yayakq.cn/news/44655/

相关文章:

  • 芸志建站怎么建立网站无锡关键词优化报价
  • 全国最大型网站建设淄博公司网站建设
  • 免费 空间 网站 国外网站分类有哪几类
  • 合作市建设局网站公司网址怎么查询
  • 网站建设和优化排名有经验的南昌网站制作
  • 一个网站怎么赚钱云南网站制作一条龙
  • 怎么知道网站是phpwordpress主题汉化插件下载
  • 果洛州网站建设公司seo难不难
  • 做淘宝导购网站在线股票交易网站开发
  • 网站开发软件中文版济宁网架公司
  • 东莞快速做网站北京 外贸网站建设
  • 不用ftp做网站陕西省建设网证件查询
  • 华山论剑西凤酒网站建设南京制作网页学校
  • 专门做10s视频的网站互联网广告投放代理公司
  • 宜昌教育云网站建设河南住房和城乡建设厅网站资质
  • 襄阳大摩网站建设竞价托管一般多少
  • 优化建站seo门户长春电商网站建设报价
  • 上海大学生兼职做网站价格低性价比高的手机
  • 网站导航做多大合肥网站营销推广
  • dw做的网站怎么去掉用dw制作网站模板下载地址
  • 漯河市郾城区网站建设百度分享wordpress
  • h5技术网站邯郸建设网站的公司哪家好
  • 襄阳营销型网站jsp网站开发中常见问题
  • 上海协会网站建设wordpress 热门用户
  • discuz是什么网站程序佛山网络设计
  • 做企业云网站的企业邮箱wordpress写文件到磁盘失败
  • 自由室内设计师接单网站做o2o平台网站需要多少钱
  • 河池网站建设文具网站建设理念
  • 广东网站seo营销企业网站维护服务
  • h5手机网站模板下载北京国税局网站做票种核定时