千家信息网

postgresql锁

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,postgresql锁:postgresql中有3种锁模式,分别为:spinlock、lwlook和regularlock。1、spinlock自旋锁spinlock使用互斥信息,与操作系统和硬件环境
千家信息网最后更新 2026年11月03日postgresql锁

postgresql锁:

postgresql中有3种锁模式,分别为:spinlock、lwlook和regularlock。


1、spinlock自旋锁

spinlock使用互斥信息,与操作系统和硬件环境联系比较密切。spinlocky的主要特点是封锁的时间很短,没有等待队列和死锁检测机制。事务结束时,不能自动释放spinlock锁。


2、LWLock轻量级锁

LWLock主要提供对共享存储器的数据结构的互斥访问。LWLock的主要特点是由等待队列和无死锁检测。事务结束时,可以自动释放lwlock。lwlock可分为排他模式和共享模式。

排他模式:用于数据修改操作,例如:insert、update或delete,确保不会同时对同一资源进行多重更新。

共享模式:用于读取数据操作,允许多个事务读取相同的数据,但不允许其他事务修改当前数据,如select语句。


3、regularlock常规锁

regularlock为一般数据库事务管理中所指的锁。regularlock的主要特点为有等待队列、有死锁检测和能自动释放锁。

regularlock支持的锁的模式有8种,按排他级别从低到高分别是:access share,row share,row exclusive,share update exclusive,share,share row exclusive,exclusive,access exclusive;

①:access share(访问共享锁):查询命令(select)将会在查询的表上获取访问共享锁。一般任何一个对表上的只读查询操作都将获取这种类型的锁。此模式的锁和access exclusive(访问排他锁)是冲突的。

②:row share(行共享锁):使用"select for update"或"select for share"命令将获得行共享锁。另外,此锁和exclusive(排他锁)和access exclusive(访问排他锁)是冲突的。

③:row exclusive(行排他锁):使用update、delete或insert命令会在目标表上获得行排他锁。并且在其他被引用的表上加上access share锁。一般,更改表数据的命令都将在这张表上获得row exclusive锁。另外,此锁和share(共享锁)、share row exclusive(共享行排他锁)、exclusive(排他锁)和access exclusive(访问排他锁)是冲突的。

④:share update exclusive(共享更新排他锁):使用vacuum(不带full选项)analyze或create index concurrently语句时使用共享更新排他锁。

⑤:share(共享锁):使用create index(不带concurrently选项)语句请求时用共享锁。

⑥:share row exclusive(共享行排他锁):和排他锁类似,但是允许行共享。

⑦:exclusive(排他锁):阻塞行共享和select for update时使用排他锁。

⑧:access exclusive(访问排他锁):alter table,drop table,truncate,reindex,cluster或vacuum full命令会获得访问排他锁。在lock table命令中,如果没有生命其他模式,access exclusive就是默认模式。


5、死锁:

在两个或多个任务中,如果每个任务锁定了其他任务视图锁定的资源,就会造成这些任务永久阻塞,从而出现死锁。此时系统处于死锁状态。


形成死锁的4个必要条件:

①:请求与保持条件:获取资源的进程可以同时申请新的资源。

②:非剥夺条件:已经分配的资源不能从该进程中剥夺。

③:循环等待条件:多个进程构成环路,并且每个进程都在等待相邻进程正占用的资源。

④:互斥条件:资源只能被一个进程使用。


减少死锁的方法:

①:在所有事务中都以相同的次序使用资源。

②:使事务尽可能简单并在一个批处理中。

③:为死锁超时参数设置一个合理范围,如3-30分钟;超时则自动放弃本操作,避免进程挂起。

④:避免在事务内核用户进行交互,减少资源的锁定时间。

⑤:使用较低的隔离级别,相比较高的隔离级别能够有效减少持有共享锁的时间,减少锁之间的竞争。


例子:

--:使用命令锁定一个表,语法如下:

lock [table] name [,...] [in lockmode mode] [nowait]

其中,name为要锁定的现存表的名字;lockmode为锁模式,声明这个锁和哪些锁冲突,如果没有声明锁模式,默认为access exclusive模式;nowait声明lock table不会等待任何冲突的锁释放,如果不得不等待获取所要求的锁,就会推出事务。

如:lock table emp; 或者 lock table a,b;


模式 事务 资源 死锁 命令 数据 进程 条件 冲突 任务 多个 时间 特点 级别 语句 队列 更新 查询 检测 相同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 博彦科技互联网金融 伟宏互联网科技 北京互联网科技 顺网科技2021年互联网排名 无锡溥仪互联网科技有限公司 互联网科技创新企业排名 开启互联网科技时代小说 互联网科技热点资讯 常德市电业局互联网科技部 互联网科技与管理 世界互联网科技公司市值排名 互联网科技产业特征 速维有品互联网信息科技(苏州)有限公司 明优互联网科技有限公司 互联网金融科技名词解释 恒生互联网科技业指数调整周期 锡山区互联网智能科技产品供应 21世纪互联网科技成就 江苏互联网智能科技软件 郑州欣桑互联网科技有限公司 保险科技 互联网保险 互联网科技工作委员会毛军 互联网巨头科技公司 长亮科技互联网金融 成都互联网科技公司100强 半导体是互联网高科技吗 中国互联网公司的科技投入 互联网科技品牌 保山浩联互联网科技有限公司 六子台科技互联网展会
0