postgresql锁
admin
2023-05-21 00:42:09
0

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;


相关内容

热门资讯

特朗普:与伊朗的谈判将分两阶段... △当地时间8月3日,美国总统特朗普在白宫回答记者提问。当地时间8月3日,美国总统特朗普在白宫回答记者...
汇艺银河里首届微醺节圆满收官 ... 多元业态协同联动,探索郑东商圈夜间消费新场景首届汇艺银河里微醺节圆满收官。活动立足郑州高铁东站商圈核...
西班牙警方:约7.35万名移民... △8月3日,西班牙北非飞地休达,从摩洛哥入境的移民聚集在海滩上。当地时间8月3日,西班牙警方表示,约...
美军称继续海上封锁伊朗,已改变... 当地时间8月3日,美国中央司令部表示,美军继续严格执行对伊朗的海上封锁。截至当天,美军已改变44艘商...
“控制”格陵兰岛,特朗普罕见列... 据美国《新闻周刊》和英国《独立报》8月2日报道,美国总统特朗普日前在接受采访时声称,格陵兰岛将在他本...
脑机接口,新突破,深度布局的1... (来源:逍遥财情) 8月1日,两项关于脑机接口行业的新国家标准开始实施,这两项标准相当于为整个行业制...
特朗普:与伊朗的谈判已开始,计... 当地时间8月3日,美国总统特朗普在社交平台“真实社交”(Truth Social)发文称,与伊朗的谈...
唐山电缆测绘现场案例 唐山电缆测绘现场案例 探测背景: 本次服务对象为唐山某测绘公司,因后期甲方需开展开挖作业,需提前明确...
聚焦能源与前沿科技!山西启动重... 为持续完善全省科技创新平台体系,夯实基础研究根基、打通科技成果产业化链条,加快培育新质生产力,赋能全...
四川:到2026年底推动阿里云... 《四川省推进算力设施优化布局提质建设和算电融合发展实施方案(2026—2028年)》近日印发。其中提...