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

电子商务网站建设策划书模板群辉可以做网站服务器吗

电子商务网站建设策划书模板,群辉可以做网站服务器吗,超市代理商网站模板,开发网站中心总结 PG的子事务回滚是真回滚(直接回滚了,不管顶层事务提交还是回滚)。 PG的子事务提交是假提交(子事务提交后会把决定权交给顶层事务,随顶层事务提交、回滚)。 子事务提交后,将xid记录到父事…

总结

  • PG的子事务回滚是真回滚(直接回滚了,不管顶层事务提交还是回滚)。

  • PG的子事务提交是假提交(子事务提交后会把决定权交给顶层事务,随顶层事务提交、回滚)。

子事务提交后,将xid记录到父事务的childXids,父事务的childXids就表示下面已经提交的子事务,这些子事务xid在后续mvcc计算中,会完全等效与所属父事务xid。

childXids

在Postgresql的事务状态中,存在childXids数组,本篇分析该结构的用途和原理。

typedef struct TransactionStateData
{...TransactionId *childXids;	/* subcommitted child XIDs, in XID order */int			nChildXids;		/* # of subcommitted child XIDs */int			maxChildXids;	/* allocated size of childXids[] */...struct TransactionStateData *parent;	/* back link to parent */
} TransactionStateData;typedef TransactionStateData *TransactionState;

用途

1 读取childXids:TransactionIdIsCurrentTransactionId

判断事务ID是否为当前事务。

如果xid和当前事务的xid不同,另外会从当前事务记录的childXids中再找一遍。

  • 因为childXids里面记录了当前事务下,已经提交了的子事务(只有提交了的,没有回滚的),所以这些提交的子事务xid就等同于主事务xid。
  • childXids是有序的,二分法即可。
bool
TransactionIdIsCurrentTransactionId(TransactionId xid)
{...if (TransactionIdEquals(xid, GetTopTransactionIdIfAny()))return true;...for (s = CurrentTransactionState; s != NULL; s = s->parent){...low = 0;high = s->nChildXids - 1;while (low <= high){int			middle;TransactionId probe;middle = low + (high - low) / 2;probe = s->childXids[middle];if (TransactionIdEquals(probe, xid))return true;else if (TransactionIdPrecedes(probe, xid))low = middle + 1;elsehigh = middle - 1;}}return false;
}

2 写入childXids:AtSubCommit_childXids

在子事务提交时,会执行AtSubCommit_childXids:

  1. 将本层的xid添加到上层事务的childXids中。
  2. 将本层记录的childXids传递到上层事务的childXids中。
static void
AtSubCommit_childXids(void)
{...new_nChildXids = s->parent->nChildXids + s->nChildXids + 1;...s->parent->childXids[s->parent->nChildXids] = XidFromFullTransactionId(s->fullTransactionId);if (s->nChildXids > 0)memcpy(&s->parent->childXids[s->parent->nChildXids + 1],s->childXids,s->nChildXids * sizeof(TransactionId));s->parent->nChildXids = new_nChildXids;/* Release child's array to avoid leakage */if (s->childXids != NULL)pfree(s->childXids);/* We must reset these to avoid double-free if fail later in commit */s->childXids = NULL;s->nChildXids = 0;s->maxChildXids = 0;
}

PG子事务维护链式结构,当子事务提交时,需要把自己记录“commited childs”信息逐层上交。

例如三层子事务的场景下:

												childXids
top-transaction     		    []sub-transaction-16401     []sub-transaction-16402   []sub-transaction-16403 []        <-- will commit
														childXids
top-transaction     		    		[]sub-transaction-16401     		[]sub-transaction-16402   		[]^|sub-transaction-16403 		[]				<-- committing
														childXids
top-transaction        					[]sub-transaction-16401     		[]sub-transaction-16402   		[16403]  	<-- committed
														childXids
top-transaction        					[]sub-transaction-16401     		[]sub-transaction-16402   		[16403]  	<-- will commit
														childXids
top-transaction        					[]sub-transaction-16401     		[16402, 16403]  <-- committed

当前事务记录的childXids在进行mvcc判断时,完全等效于自己的xid。

3 其他

AtSubAbort_childXids:子事务回滚时,需要清理childXids。

SerializeTransactionState:序列化事务状态。

其他还有初始化、清理等,不在列举。

http://www.dtcms.com/wzjs/794326.html

相关文章:

  • 深圳市网站设计公个人网站可以干什么
  • 石景山网站制作建设公司气象网站建设管理总结
  • 台前做网站的公司廊坊seo整站优化软件
  • 烟台广告公司网站建设短信推广
  • 安徽省建设协会网站无忧网站建设哪家好
  • 要做一个网站需要准备什么百度点击优化
  • 做卖车网站需要什么手续涪城网站建设
  • 北城旺角做网站的月付商城网站建站
  • 网站关键词指数查询工具山东网站备案公司
  • 建设银行手机版官方网站投资公司注册
  • 蚌埠市建设学校网站网站流量查询站长之家
  • 济南手机建站哪家好定期做图书推荐的网站
  • 有没有专门发布毕业设计代做网站河北省廊坊市建设银行网站
  • idc网站是用什么语言做的天津seo管理平台
  • 网站代码优化调整照片网站cms
  • 成立一个网站需要多少钱东莞企业推广网络营销
  • 外贸免费自助建站平台wordpress置顶 显示
  • 专业网站建设平台代理商塘沽有哪些互联网公司
  • 二级院系网站建设情况3d视频制作公司
  • 什么最便宜网站建设wordpress判断首页选择不同模板
  • 企业网站开发使用方法重庆网站网页设计培训机构
  • 宁夏住房和建设厅官方网站如何自己做网站卖东西
  • 自己怎么做网站网页wordpress 菜单 文章列表
  • 商业网站开发教程在线制作带字图片
  • 在线绘画网站个人两字印章在线制作网站
  • 学校做网站浙江温州乐清新闻
  • 建站之星好不开锁行业在58做网站有活吗
  • asp.net开发微网站开发永久不收费免费的软件
  • 蚌埠网站制作公司排名福建省 园区网互联及网站建设 网络部分题目
  • 易时代网站学ui的网站