暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG LOCK_TYPE

PostgreSQL数据库工作学习随笔 2022-06-02
921

    视图pg_locks提供了数据库服务器上活动进程中保持的锁的信息。

    pg_locks中对每一个活动可锁对象、请求锁模式和相关进程的组合都有一行。因此,如果多个进程持有或者正在等待一个可锁对象上的锁,同一个可锁对象可能出现很多次。但是,一个当前没有被锁的对象根本不会出现。

    有多种不同类型的可锁对象:整个关系(如表)、关系的单个页、关系的单个元组、事务ID(包括虚拟和永久ID)和普通数据库对象(由类OID和对象OID标识,和pg_description或pg_depend中的相同方式)。扩展一个关系的权力也被表示为一个独立的可锁对象,就像更新pg_database.datfrozenxid的权力。“advisory”锁可以具有用户定义的意义。


下面对locktype进行总结并说明了如何获取类型锁的方式。



    src/include/storage/lock.h
    /*


    * LOCKTAG is the key information needed to look up a LOCK item in the


    * lock hashtable. A LOCKTAG value uniquely identifies a lockable object.


    *


    * The LockTagType enum defines the different kinds of objects we can lock.


    * We can handle up to 256 different LockTagTypes.


    */


    typedef enum LockTagType


    {


    LOCKTAG_RELATION,/* whole relation */


    LOCKTAG_RELATION_EXTEND,/* the right to extend a relation */


    LOCKTAG_DATABASE_FROZEN_IDS,/* pg_database.datfrozenxid */


    LOCKTAG_PAGE,/* one page of a relation */


    LOCKTAG_TUPLE,/* one physical tuple */


    LOCKTAG_TRANSACTION,/* transaction (for waiting for xact done) */


    LOCKTAG_VIRTUALTRANSACTION, /* virtual transaction (ditto) */


    LOCKTAG_SPECULATIVE_TOKEN,/* speculative insertion Xid and token */


    LOCKTAG_OBJECT,/* non-relation database object */


    LOCKTAG_USERLOCK,/* reserved for old contrib/userlock code */


    LOCKTAG_ADVISORY/* advisory user locks */


    } LockTagType;
    复制


    文章转载自PostgreSQL数据库工作学习随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论