背景
He3DB for PostgreSQL是受Aurora论文启发,基于开源数据库PostgreSQL 改造的数据库产品。架构上实现计算存储分离,并进一步支持数据的冷热分层,大幅提升产品的性价比。
He3DB for PostgreSQL中存在多个会话试图同时访问同一数据的情况,并发控制的目标就是保证所有会话高效地访问,同时维护数据完整性,并发访问控制的常用方式为两种:锁机制和多版本并发控制(MVCC)。因为 MVCC 并不能解决所有的并发控制情况,所以还需要使用传统的锁机制来保证那些通常不需要完整事务隔离并且想要显式管理特定冲突点的应用。
整体概述
按照功能划分,锁管理分为锁功能模块,锁级别管理模块,死锁处理模块。
锁功能模块:针对三种类型的锁功能,自旋锁,轻量级锁,事务锁。
锁级别管理模块:针对四种不同级别的锁管理器,表级别、页级别、元组级别、事务级别。
死锁处理模块:包括死锁检测功能和死锁处理功能。

数据结构
LWLock(轻量级锁)主要提供对共享的数据结构的互斥访问。LWLock有两种锁模式,一种为排他模式,另一种为共享模式。
轻量级锁的特点是:LWLock的特点是:有等待队列、无死锁检测、能自动释放锁。
核心数据结构如下:
- LWLockMode 锁模式
typedef enum LWLockMode
{
LW_EXCLUSIVE,
LW_SHARED,
LW_WAIT_UNTIL_FREE /* A special mode used in PGPROC->lwWaitMode,
* when waiting for lock to become free. Not
* to be used as LWLockAcquire argument */
} LWLockMode;
- LWLock 轻量锁定义
typedef struct LWLock
{
uint16 tranche; /* tranche ID */
pg_atomic_uint32 state; /* state of exclusive/nonexclusive lockers */
proclist_head waiters; /* list of waiting PGPROCs */
#ifdef

最低0.47元/天 解锁文章
1028

被折叠的 条评论
为什么被折叠?



