PostgreSQL Advisory Lock 咨询锁
PostgreSQL 锁 大约 1766 字概述
Advisory Lock
咨询锁分为**Session
级别和事务级别两种级别的锁,以及共享和排他**两种模式。
应用
Session
级别的咨询锁应用场景有限,需要手动释放锁(显示调用unlock
方法解锁)。
事务级别的咨询锁必须在事务中使用,随着事务的提交或回滚,自动释放锁。
场景
事务级别的咨询锁:防止短时间多次执行该事务。
事务级别咨询锁
排他锁
尝试获取,立即返回。
成功为true
,失败为false
。
begin;
select pg_try_advisory_xact_lock(100);
commit;
等待获取,直到其他事务释放锁,获取到锁。
begin;
select pg_advisory_xact_lock(100);
commit;
共享锁
其他事务中调用了该方法,也能获得锁。
(其他事务提交或回滚,释放该事务对应的共享锁)
begin;
select pg_try_advisory_xact_lock_shared(100);
commit;
查看锁
查看pg_locks
表。
排他锁
locktype
为``advisory,mode
为ExclusiveLock
。
lite_note=# select locktype, objid, pid, mode, pg_backend_pid() from pg_locks;
locktype | objid | pid | mode | pg_backend_pid
------------+-------+-------+-----------------+----------------
relation | | 20043 | AccessShareLock | 20043
virtualxid | | 20043 | ExclusiveLock | 20043
advisory | 100 | 20043 | ExclusiveLock | 20043
(5 rows)
共享锁
locktype
为advisory
,mode
为ShareLock
。
lite_note=# select locktype, objid, pid, mode, pg_backend_pid() from pg_locks;
locktype | objid | pid | mode | pg_backend_pid
------------+-------+-------+-----------------+----------------
relation | | 20043 | AccessShareLock | 20043
virtualxid | | 20043 | ExclusiveLock | 20043
virtualxid | | 20027 | ExclusiveLock | 20043
advisory | 100 | 20043 | ShareLock | 20043
advisory | 100 | 20027 | ShareLock | 20043
(5 rows)
架构
咨询锁存储在共享内存池中,它的大小由max_locks_per_transaction
和max_connections
决定。
文档
https://www.postgresql.org/docs/current/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
https://www.postgresql.org/docs/current/explicit-locking.html#ADVISORY-LOCKS
阅读 127 · 发布于 2023-10-31
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Spring Boot 获取所有 SpringMVC Controller 路径阅读 2266
-
软考-系统架构设计师:数据库优化阅读 2438
-
Java jcmd 报 AttachNotSupportedException: Unable to open socket file阅读 819
-
Java 多级目录的文件夹拷贝阅读 1036
-
Jenkins 一直卡在 Setup Wizard 界面解决办法阅读 1223
-
JMeter 更改报告中的时间戳格式阅读 2294
-
Java8 引入的时间处理类阅读 1650
-
Spring Boot 返回加密后的 Response阅读 628
-
Windows 使用 chcp 修改 PowerShell、cmd 编码阅读 5573
-
Alpine Linux apk 包管理器阅读 841