PostgreSQL多版本并发控制(MCC)简介

日期: 2010-08-25 作者:daduxiong 来源:TechTarget中国 英文

  PostgreSQL作为一款完全支持事务处理与商业应用的开源数据库,了解事务的管理方式对使用PostgreSQL有重要作用。

  PostgreSQL用多版本并发控制方式管理事务(Multiversion concurrency control),这点上与Oracle非常相似,后者也采用多版本并发控制机制。

  MCC的特点:(通俗点儿)

  读不产生独占锁,可以共享,不影响其他事务的读写;

  写产生独占锁,数据可以共享,不影响读,但不能同时写;

  MCC的目的就是最大化实现并发对数据的访问,PostgreSQL与oracle实现的效果相同,只是方式不同。实质是对事务修改数据的管理方式采用不同方式。

  PostgreSQL将修改前后的数据都存储在相同的结构中(新旧版本都存在表中)。两个事务同时访问记录时,通过参考tmin和tmax的标记判断记录的版本,根据版本号与自己当前的事务标识比较,确定自己的数据权限。当事务发生修改或者删除记录后,空间没有立即释放,实质并没有在原来的存储位置上进行更新,而是使用了新的存储空间。系统通过周期性的运行vaccum进程来回收之前的存储空间(与Java虚拟机的垃圾回收机制有点象)。事务提交前,只需要访问原来的数据即可;提交后,系统更新元组的存储标识,直到vaccum进程收回为止。

  oracle也是根据事务标识的比较确认数据访问权限。当事务发生修改或者删除记录,oracle将原数据存储在undo段中,事务提交后直接更新相应记录的存储位置,并没有直接使用新的存储空间。oracle的undo段同样用于数据库的介质恢复,在应用完redo日志后(前滚),通过应用undo段中的事务,对数据库进行回滚。

  oracle在10g中引入的flashback功能中的flashback drop功能与PostgreSQL的方式就有点类似,只是针对表进行删除标记,并没有释放表所占用的空间,通过对表进行改名。在数据库管理员进行recyclebin操作后,才能释放表所占空间。

  PostgreSQL尽管是分配新的空间,对空间的分配很快。在PostgreSQL中也有相应的参数对其进行限制,当更新的数据达到一定的程度时将会直接出发vacuum进行,直接释放掉原来的空间。PostgreSQL与oracle对delete操作产生的空间使用,基本相同。对update操作产生的空间使用不同,相对oracle来说,PostgreSQL可能会产生更多的行迁移或迁移的,这样对性能影响应该是存在的。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐