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

vs网站开发教程重庆市岗位证书查询

vs网站开发教程,重庆市岗位证书查询,浅议网络营销论文,如何创建微信小程序商城1 总结 portal与事务有强绑定的关系#xff0c;由portal-createSubid变量记录关联关系。如果为1表示顶层事务#xff0c;关联的是子事务。 不论是顶层事务还是子事务#xff0c;提交、回滚时只会处理自己创建出来的portal。 顶层事务会清理非活跃状态的Portal#xff…1 总结 portal与事务有强绑定的关系由portal-createSubid变量记录关联关系。如果为1表示顶层事务关联的是子事务。 不论是顶层事务还是子事务提交、回滚时只会处理自己创建出来的portal。 顶层事务会清理非活跃状态的Portal如果Portal是活跃的会保留内存。子事务直接释放portal无论是否活跃。 PLpgSQL中的提交回滚有较大限制 PLpgSQL中的提交或回滚如果call proc在事务块中直接失败。PLpgSQL中的提交或回滚如果pl带exception直接失败。原因是pl中的提交或回滚不能再子事务、或事务块内要实现的话比较复杂需要对齐SPI与子事务、portal与子事务、exprcontext与子事务等等。 子事务ID只增不减可能有空隙存在参考PushTransaction的currentSubTransactionId。 2 提交 2.1 顶层事务提交PreCommit_Portals与子事务提交AtSubCommit_Portals 实例 CREATE OR REPLACE PROCEDURE tproc1() AS $$ DECLAREcurs1 refcursor; curs2 CURSOR FOR SELECT c1 FROM tf1;curs3 CURSOR (key integer) FOR SELECT * FROM tf1 WHERE c1 key;x int;y tf1%ROWTYPE; BEGINopen curs1 FOR SELECT * FROM tf1 WHERE c1 3;fetch curs1 into y; RAISE NOTICE curs1 : %, y.c3;fetch curs1 into y; RAISE NOTICE curs1 : %, y.c3;open curs2;fetch curs2 into x; RAISE NOTICE curs2 : %, x;fetch curs2 into x; RAISE NOTICE curs2 : %, x;OPEN curs3(4); -- OPEN curs3(key : 4);fetch curs3 into y; RAISE NOTICE curs3 : %, y.c4;fetch curs3 into y; RAISE NOTICE curs3 : %, y.c4; EXCEPTION WHEN others THENRAISE NOTICE in caller exception; END; $$ LANGUAGE plpgsql;begin; savepoint sp1; savepoint sp2; call tproc1(); commit;1第一次子事务提交EXCEPTION子事务提交AtSubCommit_Portalssubid4 发生在call tproc1();执行完毕。 exec_stmt_blockReleaseCurrentSubTransactionCommitSubTransactionAtSubCommit_Portals当前事务堆栈 CurrentTransactionState-subTransactionId [1, 2, 3, 4]| | | | top savepoint savepoint exception由于call进入SPI当前SPI堆栈只有一层对应到3号子事务上因为是在3号子事务的背景下执行的CALL。_SPI_stack[0] {connectSubid 3} AtSubCommit_Portals(mySubid4) 开始处理portal portal1 { // 游标 mySubid 4 当前游标的portal被继承给parent portalname unnamed portal 17, createSubid 4, // AtSubCommit_Portals 4--3activeSubid 4,createLevel 4, sourceText SELECT c1 FROM tf1,commandTag CMDTAG_SELECT,strategy PORTAL_ONE_SELECT}… 三个游标的portal都是类似上面处理的。特殊的是顶层portal。不属于当前要释放的子事务4不处理。 portal1 { // 顶层 mySubid 3 当前不处理name , createSubid 3, activeSubid 3, createLevel 3, sourceText call tproc1();,commandTag CMDTAG_CALL,strategy PORTAL_MULTI_QUERY}2第二次子事务提交savepoint子事务提交AtSubCommit_Portalssubid3 发生在commit。 exec_simple_queryfinish_xact_commandCommitTransactionCommandCommitSubTransactionAtSubCommit_Portals当前事务堆栈 CurrentTransactionState-subTransactionId [1, 2, 3]| | | top savepoint savepointAtSubCommit_Portals(mySubid3)开始处理portal portal1 { // 游标 mySubid 4 当前游标的portal被继承给parent portalname unnamed portal 17, createSubid 2, // AtSubCommit_Portals 3--2activeSubid 2, // AtSubCommit_Portals 3createLevel 2, // AtSubCommit_Portals 3--2sourceText SELECT c1 FROM tf1,commandTag CMDTAG_SELECT,strategy PORTAL_ONE_SELECT}当前堆栈Portal已经被drop了。现在PortalHashTable里面只有三个游标的Portal。 3第三次子事务提交savepoint子事务提交subid2 同上。 4顶层事务提交subid1PreCommit_Portals 发生在commit。 exec_simple_queryfinish_xact_commandCommitTransactionCommandCommitTransactionPreCommit_Portals提交时发现3个portal只剩游标的3个portal了。 调用PortalDrop全部释放掉。 PreCommit_Portals函数需要关注的就是普通portal都会被drop掉。特殊保留的是hold cursor即循环语句使用的内部自建游标还有一种就是vacuum等多事务语句。 3 回滚 3.1 顶层事务清理AtAbort_Portals 调用位置 AbortTransaction → AtAbort_Portals 调用一次即可用户清理顶层事务。 清理逻辑 遍历PortalHashTable拿到所有CreatePortal创建出来的Portal两种执行器的portal和游标的portal标记portal状态failed标记failed的内存会被释放掉。 情况一elog FATAL 主动标记failed情况二状态是PORTAL_READY的portal 跳过一些portal不处理。 情况一createSubid0 前一个事务的portal不属于自己!1。情况二portal-autoHeld true 专门用于循环的游标不是用户创建的PL自用的。 3.2 子事务清理AtSubAbort_Portals 调用位置 AbortSubTransaction → AtSubAbort_Portals 有两种调用场景 事务块内一次性rollback递归多次AtSubAbort_Portals提交所有子事务。回滚到某一个检查点递归指定次数AtSubAbort_Portals只提交指定的几个子事务。 清理逻辑 遍历PortalHashTable拿到所有CreatePortal创建出来的Portal两种执行器的portal和游标的portal判断创建归属 如果当前清理的子事务 与 portal的createSubid匹配直接清理PORTAL_READY和PORTAL_ACTIVE状态的包括删除内存。如果当前清理的子事务 与 portal的createSubid不匹配 判断使用归属如果当前清理的子事务 与 portal的activeSubid匹配说明不是当前子事务创建的但是被当前子事务使用了指标记failed但不做清理不删除内存。 4 PushTransaction与PopTransaction函数 启动子事务时需要将当前事务入栈CurrentTransactionState换成子事务的。子事务和父事务由parent连接。修改这部分代码需要注意一次弹出多个事务时currentSubTransactionId有没有正确维护。 static void PushTransaction(void) {TransactionState p CurrentTransactionState;TransactionState s;s (TransactionState)MemoryContextAllocZero(TopTransactionContext,sizeof(TransactionStateData)); 注意currentSubTransactionId直增不减。pop时也不减少。 currentSubTransactionId 1;if (currentSubTransactionId InvalidSubTransactionId){currentSubTransactionId - 1;pfree(s);ereport(ERROR,(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),errmsg(cannot have more than 2^32-1 subtransactions in a transaction)));}/** We can now stack a minimally valid subtransaction without fear of* failure.*/s-fullTransactionId InvalidFullTransactionId; /* until assigned */s-subTransactionId currentSubTransactionId;s-parent p;s-nestingLevel p-nestingLevel 1;s-gucNestLevel NewGUCNestLevel();s-savepointLevel p-savepointLevel;s-state TRANS_DEFAULT;s-blockState TBLOCK_SUBBEGIN;GetUserIdAndSecContext(s-prevUser, s-prevSecContext);s-prevXactReadOnly XactReadOnly;s-parallelModeLevel 0;s-topXidLogged false;CurrentTransactionState s;}
http://www.w-s-a.com/news/994418/

相关文章:

  • 网站ie兼容性差西安小程序开发的公司
  • 上海网站建设培训app网站开发成本
  • 个人网站icp外贸网站开发 河南
  • 遵义建设网站无锡市规划建设局网站
  • 海外留学网站建设方案门户网站的发布特点
  • 网站建设不赚钱net112企业建站系统
  • 网站建设团队管理模板贵州省住房和城乡建设部网站
  • 曲沃网站建设网上学编程的有哪些比较好的网站
  • 厦门网站建设慕枫学做网站需要多久
  • 爱奇艺做任务领vip网站设计广告图片
  • 中科汇联网站建设手册上海公司名称注册查询网
  • 网站建设电子商务课总结和体会关于做网站书籍
  • 仪征网站建设公司哪家好简单网页制作素材图片
  • 甘肃第九建设集团公司网站潍坊个人做网站
  • 如何做后台网站的教程网站建设 关于我们
  • 极速网站建设哪家好连云港百度推广网站建设
  • 医院网站建设的目标wordpress中英文网站模板
  • 门户型网站开发难度网站导航栏有哪些
  • 推荐做任务网站软件定制开发哪家好
  • 邯郸兄弟建站第三方仓储配送公司
  • 商丘家具网站建设wordpress 添加代码
  • 基础建设的网站有哪些内容成都科技网站建设咨询电话
  • 券多多是谁做的网站招聘网站开发模板
  • 网站主机一般选哪种的企业数字展厅
  • 网站建设该如何学衡水建设局网站首页
  • 高校网站建设工作总结番禺网站开发哪家好
  • 苏州 网站的公司wordpress主页代码
  • 怎么用html做图片展示网站外贸网站建设推广费用
  • 可以做本地生活服务的有哪些网站中油七建公司官网
  • 如何建设谷歌网站网站建设优点