OpenGauss锁机制实现技术浅析.docx
《OpenGauss锁机制实现技术浅析.docx》由会员分享,可在线阅读,更多相关《OpenGauss锁机制实现技术浅析.docx(8页珍藏版)》请在第一文库网上搜索。
1、OpenGauss锁机制实现技术浅析数据库锁是一块比较大的内容,为了便于理解,我们准备先讲一些浅显易懂的内容,然后准备一个最简单SQ1在执行过程中的加锁情况来进行演示,希望大家对opengauss/PG数据库内部锁机制有简单地认识。在没有看POStgreSQ1/oPeIIgaUSS的源码之前,如果你是一个程序员,你会设计该怎么实现这个锁机制。100个程序员写实现同样功能的程序,可能会有100个版本。就像全世界最流行的几个关系型数据库,关于锁部分的内部实现机制应该都不一样。因此,唯有剖析其内部源码,才能知道其内涵。因为并发访问所带来的一致性问题,所以引用锁机制来解决。最容易被我们感知的锁对象有行
2、/表等,我们来看一下在PostgreSQ1/opengauss里面哪些锁对象(1ockTag).锁对象的种类有如下图这些,例如表,行,page,事务号锁等等。每一种锁对象有不同的属性,但是它们却用同一个结构体来表示,通过不同的属性来表示不同的锁对象。锁对象的结构体如下:在1OCKTAG结构体中,表示锁对象的类型的字段为IOCktag_type,其他属性用来具体化这个对象,例如表的锁对象的宏定义如下:从上面的定义可以看出,对于表的锁对象,实际上只使用IoCktag结构体中1ocktag_fie1d1,IoCktag_fie1d2,以及IOCktag_type这三个属性变量,其他属性变量被其他类型
3、的锁对象使用。其中1ocktag_fie1d1表示库的oid,IOCktag_fie1d2表示表的OiC1通过这两个属性组合,可以定位到唯一的表。构建一个行锁,则需要更多信息来定位唯一的行,信息如下:还有更多的其他锁对象的定义,在这里不再扩展。锁对象(IoCktag),是被锁保护的对象,现在我们来看看锁的结构,其中必含有锁对象属性的变量,这样才可以关联到锁保护的对象。锁,我们可以简单类比为某个锁对象的管理员,他需要记录当前有哪些类型的操作已作用在这个对象上,以及哪些类型的操作还在等待中,等待被允许。下图是锁的结构体:刚才提到了哪些类型的操作,也就是操作的类型,通常理解为锁的类型。总共有如下8种
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenGauss 机制 实现 技术 浅析
