PostgreSQL 锁

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 锁的类型/* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */#define NoLock 0#define AccessS...

锁的类型

/* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */
#define NoLock                                  0

#define AccessShareLock                 1               /* SELECT */
#define RowShareLock                    2               /* SELECT FOR UPDATE/FOR SHARE */
#define RowExclusiveLock                3               /* INSERT, UPDATE, DELETE */
#define ShareUpdateExclusiveLock 4              /* VACUUM (non-FULL),ANALYZE, CREATE
                                                                                 * INDEX CONCURRENTLY */
#define ShareLock                               5           /* CREATE INDEX (WITHOUT CONCURRENTLY) */
#define ShareRowExclusiveLock   6               /* like EXCLUSIVE MODE, but allows ROW
                                                                                 * SHARE */
#define ExclusiveLock                   7               /* blocks ROW SHARE/SELECT...FOR
                                                                                 * UPDATE */
#define AccessExclusiveLock             8          /* ALTER TABLE, DROP TABLE, VACUUM
                                                                               * FULL, and unqualified LOCK TABLE */

可以加锁的对象

        LOCKTAG_RELATION,                       /* whole relation */
        /* ID info for a relation is DB OID + REL OID; DB OID = 0 if shared */
        LOCKTAG_RELATION_EXTEND,        /* the right to extend a relation */
        /* same ID info as RELATION */
        LOCKTAG_PAGE,                           /* one page of a relation */
        /* ID info for a page is RELATION info + BlockNumber */
        LOCKTAG_TUPLE,                          /* one physical tuple */
        /* ID info for a tuple is PAGE info + OffsetNumber */
        LOCKTAG_TRANSACTION,            /* transaction (for waiting for xact done) */
        /* ID info for a transaction is its TransactionId */
        LOCKTAG_VIRTUALTRANSACTION, /* virtual transaction (ditto) */
        /* ID info for a virtual transaction is its VirtualTransactionId */
        LOCKTAG_SPECULATIVE_TOKEN,      /* speculative insertion Xid and token */
        /* ID info for a transaction is its TransactionId */
        LOCKTAG_OBJECT,                         /* non-relation database object */
        /* ID info for an object is DB OID + CLASS OID + OBJECT OID + SUBID */

        /*
         * Note: object ID has same representation as in pg_depend and
         * pg_description, but notice that we are constraining SUBID to 16 bits.
         * Also, we use DB OID = 0 for shared objects such as tablespaces.
         */
        LOCKTAG_USERLOCK,                       /* reserved for old contrib/userlock code */
        LOCKTAG_ADVISORY                        /* advisory user locks */

查询锁以及进程的相关视图

/*锁信息*/
select * from pg_locks;
/*记录表和类似于表这种具有列的结构*/
select * from pg_class;
/* 查询进程信息*/
select * from pg_stat_activity 

/*查询锁的相关信息*/
select t.locktype,
       t2.datname,
       t1.relname,
       mode,
       t3.usename,
       application_name,
       client_addr,
       query
  from pg_locks t, pg_class t1, pg_database t2, pg_stat_activity t3
 where t.DATABASE = t2.oid
   and t.relation = t1.oid
   and t.pid = t3.pid

参考 pg中关于AccessShareLock和ExclusiveLock的问题中德哥的回答

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
SQL 缓存 运维
PostgreSQL 事务号回卷分析
## XID 定义 xid 是个啥东西?xid 就是 PostgreSQL 里面的事务号,每个事物都会分配一个 xid。PostgreSQL 数据中每个元组头部都会保存着 插入 或者 删除 这条元组的事务号,即 xid,然后内核通过这个 xid 进行元组的可见性判断。简单理解,比如有两个事务,xid1=200,xid2=201,那么 xid1 中只能看到 t_xmin 200 的元组。 ```c
|
9月前
|
关系型数据库 PostgreSQL
PostgreSQL VFD机制
PostgreSQL VFD机制
76 0
PostgreSQL VFD机制
|
9月前
|
存储 关系型数据库 MySQL
MySQL 有几种锁?(数据库锁)
MySQL 有几种锁?(数据库锁)
192 0
|
SQL 存储 Oracle
Mysql锁专题:InnoDB锁概述(二)
Mysql锁专题:InnoDB锁概述(二)
118 0
Mysql锁专题:InnoDB锁概述(二)
|
存储 关系型数据库 MySQL
Mysql锁专题:InnoDB锁概述(一)
Mysql锁专题:InnoDB锁概述(一)
121 0
Mysql锁专题:InnoDB锁概述(一)
|
关系型数据库 数据库 PostgreSQL
|
关系型数据库 MySQL 中间件
MySQL行锁的最佳实践(下)
MySQL行锁的最佳实践
241 0
MySQL行锁的最佳实践(下)
|
关系型数据库 MySQL 数据库
MySQL行锁的最佳实践(上)
MySQL行锁的最佳实践
263 0
MySQL行锁的最佳实践(上)
|
SQL 关系型数据库 数据库
Postgresql lock锁等待检查
查看锁等待sql with t_wait as ( select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.
1834 0
|
关系型数据库 数据库 PostgreSQL