转载

PostgreSQL V9.6 谓词锁--01

今天上午,2016年8月21日,巴西里约奥运会,女排3:1胜对手,打出一场拼搏的精神。

----------------------------------------------

    本节内容介绍 谓词锁相关的结构体以及他们之间的关系 ,谓词锁相关的结构体之间的关系可参见图 X-XX

PostgreSQL V9.6 谓词锁--01

X-XX 谓词锁相关数据结构图

SIReadLocks (谓词锁)

使用“ PREDICATELOCKTARGET ”表示一个加谓词锁的对象,然后在此对象上施加“ PREDICATELOCK ”表示的谓词锁。

// The PREDICATELOCKTARGET struct represents a database object on which there are predicate locks.

typedef struct PREDICATELOCKTARGET   // 在一个“对象”上的谓词锁

{

    /* hash key ,一个标志,唯一表示一个对象 */

    PREDICATELOCKTARGETTAG tag ; /* unique identifier of lockable object */

    /* 谓词锁对象列表 */

    SHM_QUEUE     predicateLocks ; // PREDICATELOCK ”对象的列表,其结构体如下

} PREDICATELOCKTARGET;

    PREDICATELOCK ”对象的定义如下,一个谓词锁对象有一个唯一的使用“ PREDICATELOCKTAG ”定义的标识 tag ,然后包括两个列表(一个是表示某数据库的存在谓词锁对象的“ PREDICATELOCKTARGET ”,一个是表示事务间冲突关系的“ SERIALIZABLEXACT ”,之后,):

typedef struct PREDICATELOCK   // 谓词锁

{

    PREDICATELOCKTAG tag ;         // 谓词锁的唯一的标识,被当作 hash key 以唯一标识谓词锁

SHM_QUEUE     targetLink;      /* list link in PREDICATELOCKTARGET's list of predicate locks */

   SHM_QUEUE     xactLink;        /* list link in SERIALIZABLEXACT's list of predicate locks */

SerCommitSeqNo commitSeqNo;   /* only used for summarized predicate locks */

} PREDICATELOCK ;

    当一个谓词锁对象有一个唯一的使用“ PREDICATELOCKTAG ”定义的标识 tag ,此 tag 则由两个结构体构成:

谓词锁的标识

{

PREDICATELOCKTARGET *myTarget;

SERIALIZABLEXACT *myXact;

} PREDICATELOCKTAG;

所以, PostgreSQL 使用“ PREDICATELOCK ”结构体表示一个谓词锁,然后用一个对象和事务作为此谓词锁的标识( tag

)来标识一个谓词锁,这表明谓词锁是数据库对象和事务间的一个特定关系,只是这样的关系是用以表示读写冲突的。

原文  http://blog.163.com/li_hx/blog/static/1839914132016721113351123
正文到此结束
Loading...