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

唯拓网站建设百度百度推广

唯拓网站建设,百度百度推广,济南网站建设行知keji,电脑怎样重新装wordpress文章目录 0.简介1.MVCC介绍2.MVCC常见的实现方式3.PG的MVCC实现3.1 可见性判断3.2 提交/取消 0.简介 本文主要介绍在事务模块中MVCC(多版本并发控制)常见的实现方式,优缺点以及PG事务模块中MVCC(多版本并发控制)的实现。 1.MVCC…

文章目录

    • 0.简介
    • 1.MVCC介绍
    • 2.MVCC常见的实现方式
    • 3.PG的MVCC实现
      • 3.1 可见性判断
      • 3.2 提交/取消

0.简介

本文主要介绍在事务模块中MVCC(多版本并发控制)常见的实现方式,优缺点以及PG事务模块中MVCC(多版本并发控制)的实现。

1.MVCC介绍

MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于数据库管理系统中的并发控制的方法。在传统的并发控制中,常用的简单方式是通过加锁来保证某一时刻数据只被一个事务修改,但这种方式可能会带来并发度的下降,尤其在高并发场景下,很可能导致性能瓶颈。MVCC主要通过维护数据的多个版本来解决传统锁机制的一些局限性,每个事务可以看到一个特定版本,从而使得读写操作可以互不干扰地执行,其核心在于,对于每个修改,不直接在原始数据上修改,而是创建一个新的数据版本来做修改,其他事务依然可以访问旧的数据,以此来提高并发度。当然MVCC也有其局限性,比如在高并发场景下可能因为多个版本导致占用较高内存。

2.MVCC常见的实现方式

MVCC常见的实现方式有两种:
1)修改旧数据前备份,在写新的数据时,把旧的数据备份到单独的一块空间,其他事务读取数据时,可以在备份空间中获取,比如MySQL innodb引擎的回滚段。
2)新数据不直接修改,而是采用插入的方式。
以上两种方式,功能上都能实现MVCC,都需要占用一定的空间,两者相比较,二的事务回滚更为方便,不会出现备份空间用尽的问题;一的话清理上会更为简单,不会导致数据扫描使得读数据增加。PG采用的是二,即采用插入方式实现的MVCC。

3.PG的MVCC实现

3.1 可见性判断

MVCC的实现,首先要有版本的概念,下面来看PG中的定义,然后以一个实际的例子来分析可见性的判断,定义如下:

typedef struct HeapTupleFields
{TransactionId t_xmin;    /* inserting xact ID */TransactionId t_xmax;    /* deleting or locking xact ID */union{CommandId  t_cid;    /* inserting or deleting command ID, or both */TransactionId t_xvac;  /* old-style VACUUM FULL xact ID */}      t_field3;
} HeapTupleFields;struct HeapTupleHeaderData
{union{HeapTupleFields t_heap;DatumTupleFields t_datum;}      t_choice;ItemPointerData t_ctid;    /* current TID of this or newer tuple (or a* speculative insertion token) */....
}

可以看到,在上面代码结构中,每个元组头部存储事务的t_xmin(数据插入的事务id),t_xmax(数据删除或更新的事务id)如果为0则表示还未被删除和更新,这两个值一旦被设计就不会再次变化。
下面通过一个例子来看一个更新操作的修改以及可见性的判断。
在这里插入图片描述
上述描述了向当前表插入了一条数据的过程,初始a=2,b=2的记录是由事务id为10的事务插入,xmax为0即还没被删除或更新;然后执行update语句,将a的值设置为6,xmax的值更新为11(表示由id为11的事务删除),同时新增一条记录(不在原记录修改),此时虽然有两条数据,但其实应该只有一条,所以需要根据事务的快照和提交的记录来进行判断,也就是可见性的判断。
在PG中,是用snapshot来获取那些事务正在执行,通过snapshot来区分事务是正在执行还是已经完成了,如果事务尚未完成,那么事务的更新和写入对其他事务来说是不可见的。snapshot数据结构如下:

typedef struct SnapshotData
{SnapshotSatisfiesFunc satisfies;  /* tuple test function */TransactionId xmin;      /* all XID < xmin are visible to me */TransactionId xmax;      /* all XID >= xmax are invisible to me */TransactionId *xip;uint32    xcnt;      /* # of xact ids in xip[] */TransactionId *subxip;int32    subxcnt;    /* # of xact ids in subxip[] */bool    suboverflowed;  /* has the subxip array overflowed? */bool    takenDuringRecovery;  /* recovery-shaped snapshot? */bool    copied;      /* false if it's a static snapshot */CommandId  curcid;      /* in my xact, CID < curcid are visible */uint32    speculativeToken;uint32    active_count;  /* refcount on ActiveSnapshot stack */uint32    regd_count;    /* refcount on RegisteredSnapshots */pairingheap_node ph_node;  /* link in the RegisteredSnapshots heap */TimestampTz whenTaken;    /* timestamp when snapshot was taken */XLogRecPtr  lsn;      /* position in the WAL stream when taken */
} SnapshotData;

其中所有XID<xmin(已完成的)的事务都可见,所有XID>xmax的事务都不可见,而介于xmin和xmax之间的事务可能已完成也可能进行中,所以需要一个数组来存储(xip),如果在xmin和xmax之间的事务id在这个数组被发现,说明事务正在进行且尚未完成,不可见。
获取数据时,会先根据snapshot来判断事务是否已完成,如果未完成,则不可见,对于已完成的需要判断时提交还是取消,查询clog来进行判断。这里还有个性能优化,就是使用tuple中标志位来进行判断,减少clog查询。

3.2 提交/取消

在PG中,一个事务最终状态可能有两种:Commit/Abort。
1)Commit:提交时会写WAL和CLOG,提交后对于其他事务可见。
2)Abort: abort时会写WAL和CLOG,abort后对于其他事务不可见。


文章转载自:
http://magnanimity.c7493.cn
http://thermophosphorescence.c7493.cn
http://saucisson.c7493.cn
http://grammar.c7493.cn
http://latrine.c7493.cn
http://petrosal.c7493.cn
http://extrasystolic.c7493.cn
http://peltate.c7493.cn
http://barbotine.c7493.cn
http://radiculitis.c7493.cn
http://thrift.c7493.cn
http://isochore.c7493.cn
http://passable.c7493.cn
http://frightfulness.c7493.cn
http://uncontrovertible.c7493.cn
http://leeward.c7493.cn
http://beachscape.c7493.cn
http://landownership.c7493.cn
http://medicalize.c7493.cn
http://figbird.c7493.cn
http://benedictional.c7493.cn
http://purchaseless.c7493.cn
http://caudillismo.c7493.cn
http://triumphalist.c7493.cn
http://slovenian.c7493.cn
http://neoplasm.c7493.cn
http://deceitful.c7493.cn
http://commination.c7493.cn
http://bearish.c7493.cn
http://peremptoriness.c7493.cn
http://tendril.c7493.cn
http://disendow.c7493.cn
http://papyraceous.c7493.cn
http://mismate.c7493.cn
http://runology.c7493.cn
http://pygmy.c7493.cn
http://saipan.c7493.cn
http://bibasic.c7493.cn
http://citic.c7493.cn
http://uninvited.c7493.cn
http://renal.c7493.cn
http://flurr.c7493.cn
http://rearwards.c7493.cn
http://rotiform.c7493.cn
http://roborant.c7493.cn
http://leukocytosis.c7493.cn
http://ultratropical.c7493.cn
http://telecourse.c7493.cn
http://abiogenist.c7493.cn
http://urinoscopy.c7493.cn
http://howdie.c7493.cn
http://lych.c7493.cn
http://colcothar.c7493.cn
http://inverseimage.c7493.cn
http://ragbolt.c7493.cn
http://lactoglobulin.c7493.cn
http://tamableness.c7493.cn
http://grinding.c7493.cn
http://tetramorphic.c7493.cn
http://inofficious.c7493.cn
http://triform.c7493.cn
http://ophicleide.c7493.cn
http://meretricious.c7493.cn
http://mouldy.c7493.cn
http://bartlett.c7493.cn
http://papalism.c7493.cn
http://unaccustomed.c7493.cn
http://dioxane.c7493.cn
http://lyssophobia.c7493.cn
http://tachylyte.c7493.cn
http://sinological.c7493.cn
http://mediography.c7493.cn
http://freezer.c7493.cn
http://supernaturally.c7493.cn
http://sonagraph.c7493.cn
http://whoever.c7493.cn
http://banksman.c7493.cn
http://microfaction.c7493.cn
http://tubificid.c7493.cn
http://cue.c7493.cn
http://literally.c7493.cn
http://confederation.c7493.cn
http://tinny.c7493.cn
http://embolon.c7493.cn
http://republican.c7493.cn
http://ethereally.c7493.cn
http://florilegium.c7493.cn
http://microtasking.c7493.cn
http://retrusive.c7493.cn
http://multivariate.c7493.cn
http://buonaparte.c7493.cn
http://relier.c7493.cn
http://diplomata.c7493.cn
http://microenvironment.c7493.cn
http://trusteeship.c7493.cn
http://energism.c7493.cn
http://gleesome.c7493.cn
http://bygone.c7493.cn
http://famous.c7493.cn
http://fideism.c7493.cn
http://www.zhongyajixie.com/news/69555.html

相关文章:

  • 武汉市武昌区建设局网站网络营销的成功案例分析
  • php5 mysql网站开发基础与应用友情链接有什么用
  • 怎么做简单的网站免费网络推广平台
  • 课程网站开发背景和意义广告代运营公司
  • 游戏的网站国外免费网站建设
  • 潍坊网站建设服务商google浏览器下载
  • 罗定网站优化商城小程序开发哪家好
  • 濮阳做网站推广的公司天津最新消息今天
  • 有货 那样的网站怎么做谷歌浏览器安卓版
  • 怎么建设小说网站推广用哪个平台效果好
  • java做网站优缺点企业网站推广的方法有哪些
  • 武城网站建设电话安徽网站关键字优化
  • 怎么用易语言做网站全国疫情一览表
  • 营销网站建设urkeji晨阳seo顾问
  • 网站收录下降厦门头条今日新闻
  • 全网营销总结报告黑帽seo优化
  • 河南网站建设技术公司新品牌进入市场的推广方案
  • wordpress搭建企业网站思路网络推广专家
  • 帮别人做钓鱼网站吗竞价托管资讯
  • 中国建设银行学习网站如何给企业做网络推广
  • seo站长综合查询刚刚刚刚刚刚刚刚刚刚刚刚刚刚
  • 江西营销网站建设推广方式有哪几种
  • 北京网站手机站建设公司电话号码网站seo推广多少钱
  • 网站开发 手机 验证码网络推广运营优化
  • 广东烟草电子商务网站seo还可以做哪些推广
  • win8.1 做网站服务器百度客服中心电话
  • 福建厦门网站建设公司人工智能培训班收费标准
  • 如何做攻击类型网站免费seo快速收录工具
  • 手机社交网站建设邵阳疫情最新消息
  • 宁夏一站式网站建设互联网公司有哪些