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

企业宣传网站怎么做/西安网络推广营销公司

企业宣传网站怎么做,西安网络推广营销公司,怎么做网站登陆战,wordpress锚文本2.隔离级别实现上一节介绍了ANSI定义的3种异象,及根据禁止异象的个数而定义的事务隔离级别。因为不存在严格、严谨的“官方”定义,各主流2.1 Lock-based 隔离级别实现在展示Lock-based隔离级别实现前,先介绍几个与锁相关的概念:It…

2.隔离级别实现

上一节介绍了ANSI定义的3种异象,及根据禁止异象的个数而定义的事务隔离级别。因为不存在严格、严谨的“官方”定义,各主流

2.1 Lock-based 隔离级别实现

在展示Lock-based隔离级别实现前,先介绍几个与锁相关的概念:Item Lock:对访问行加锁,可以防止dirty/fuzzy read。

Predicate Lock(gap lock):对search的范围加锁,全表扫描直接对整张表加锁,可防止phantom read。

Short duration:语句结束后释放锁。

Long duration:事务提交或回滚后释放锁。

上述锁操作组合,便可实现不同级别的事务隔离标准,如下表所示。

33ca4705bdc557848c43116e081ec157.png

其中S lock代表共享锁,X lock代表排它锁。

首先所有写操作加X locks时,都会选择Long duration,否则short duration锁被释放后,在事务提交前该条更改可能被其它事务写操作覆盖,造成脏写(dirty write)。

其次对于读操作:

Short duration Item S lock 禁止了 P1发生,读操作如果遇到正在修改的行(写事务加了X Lock),阻塞在S Lock,直到写事务提交。

Long duration Item S lock 禁止了P2发生,写操作遇到读事务(S Lock),阻塞在X Lock上直到读事务提交或回滚。

Long duration Predicate/Table S Lock 禁止了P3发生,(范围)写操作遇到范围读操作(加Predicate S Lock),会被阻塞,直到读事务提交或回滚。

基于锁实现的三种隔离级别分别能禁止的异象如下表所示:

88651f78212310ed5e701ae5040c8d35.png

然而当今数据库基于性能等多方面考虑,很少有完全基于锁实现隔离级别的,MVCC+Lock的方式,可以满足读请求不加锁,是主流的实现方式。

2.2 Oracle隔离级别的实现

Oracle仅支持两种隔离级别:Read Committed与Serializable。尽管官方这样描述,Oracle的Serializable实际是基于MVCC+Lock based的SI(Snapshot Isolation)隔离级别。

为实现快照读,内部维护了全局变量SCN(System Commit/Change Number),在事务提交时递增。读请求获取Snapshot便是获取当前最新的SCN。Oracle实现MVCC的方式是将block分为两类:(1)Current blocks为当前最新的页面,与持久化态数据保持一致。(2)Consistent Read blocks,根据snapshot SCN生成相应的一致性版本页面。

以下两个具体的例子展示了:不同隔离级别下,读写语句在数据库内部发生了什么。

71996425eb4be8f32c9188273d5fc95e.png

Oracle在read committed隔离级别下,每条语句都会获取最新的snapshot,读请求全部是snapshot读。写请求在更新行之前,需要加行锁。由于写操作不会因为有其它事务更新了同一行,而停止更新(除非不满足更新的谓词条件了),因此Lost Update有可能发生。

93f95f3b44acc680b9f065e89c6a249a.png

Oracle在serializable隔离级别下,事务开始便获取snapshot。读请求全部是snapshot读,而写请求在更新行之前,需要加行锁。写操作在加锁后,首先检查该行,如果发现:最近修改过这行的事务的SCN大于本事务的SCN,说明它已经被修改且无法被本事务看到,会做报错处理,避免了Lost Update。这种写冲突的实现,显然是first committer wins。

下表展示了Oracle的两种隔离级别,分别能够避免哪些异象:

7e11fe2cf23788ca21c607457a3be6e2.png

2.3

InnoDB同样以MVCC+Lock的方式实现隔离级别。其中普通select语句均是snapshot read。而delete/update/select for update等语句是加锁实现的current read,如下表所示(注:该表为Pecona 5.6版本的代码实现)。

8ce0af7fd9825a0109083ee81584749a.png

InnoDB的RC隔离级别的表现与Oracle相似。而相较于Oracle的SI,InnoDB RR隔离级别依旧不能避免Lost Update(例如下例)。究其原因,InnoDB在RR隔离级别下,不会在事务提交时判断是否有其它事务修改过该行。这避免了了SI更新冲突带来的回滚代价,带来了可能发生Lost Update的风险。

a51e2e3aa947aae75a743be5a89a83c8.png

由于update等操作均是加锁的当前读,因此Phantom Read的现象也是存在的(如下表所示)。但是如果将Txn1的update语句替换为select语句,Phantom Read现象则可以禁止,因为整个事务select语句使用的是同一个snapshot。

a0bdc236fc37690bc7da4d669bc84361.png

Innodb RR的实现方式虽然并非并未严格排除Lost Update和Repeatable Read,但其充分利用MVCC读不加锁的并发能力,同时current read避免了SI在更新冲突剧增时过多的回滚代价。

InnoDB还实现了Lock Based Serializable(详见2.1),禁止了所有异象。

http://www.lbrq.cn/news/810253.html

相关文章:

  • 阜宁做网站工作室/电子商务平台建设
  • 做外贸外文网站怎么做好/seo关键字怎么优化
  • 三明网站开发/常见的网络营销推广方式有哪些
  • 用ps做美食网站/连接友谊
  • 网站建设公司哪家好该如何选择/南宁seo公司
  • 广州建设网站公司哪家好/百度在全国有哪些代理商
  • 个人网站可以做自媒体吗/关键词优化排名网站
  • 中国工商做年报网站/如何创建网站站点
  • 深圳网站设计公司排名前十/个人网站
  • 新疆乌鲁木齐专业做网站的公司/网络推广seo
  • 做网商必备网站/百度商业平台
  • 弹性云主机做网站/站长工具seo综合查询腾讯
  • 石家庄做网站排名/谷歌怎么投放广告
  • 找装修公司的网站/成都网络推广外包
  • 钢铁行业公司网站模板/seo名词解释
  • 跨境独立网站怎么建设/seo还有未来吗
  • 网站建设与优化合同/网店推广的作用是
  • 网站名字重复/石家庄seo报价
  • 苏州协会网站建设/百度一下百度搜索百度
  • 做网站能用本地的数据库嘛/百度联盟官网登录入口
  • 泊头网站建设服务/泰州seo
  • 网站开发助理是干啥的/新闻播报最新
  • 网络架构中sdn是指/长沙百度推广优化排名
  • 网站开发系统测试/2023年最新新闻简短摘抄
  • 全国行业名录搜索系统官网/快速seo关键词优化技巧
  • php旅游类网站开发毕业设计/网站营销策划公司
  • 邢台网站制作费用/seo在线优化
  • 租号网站咋做/广州新闻播报
  • 刘家窑网站建设公司/seo外包网络公司
  • php做网站很快嘛/西安关键词排名软件
  • Java面试宝典:MySQL8新特性
  • 解决ubantu系统下matplotlib中文乱码问题
  • Ubuntu 18.04安装Fast-Lio2教程
  • ts-node 深入全面讲解
  • 【ELasticsearch】节点角色分类与作用解析
  • 二叉搜索树(Binary Search Tree)详解与java实现