暂无图片
pg中行锁的实现方式是哪种?oracle是在数据块上,mysql是索引上
我来答
分享
暂无图片 匿名用户
pg中行锁的实现方式是哪种?oracle是在数据块上,mysql是索引上

pg中行锁的实现方式是哪种?oracle是在数据块上,mysql是索引上

比如表t  create table t(id int ,b int) ,没有任何索引


insert into  t values(100,1)  ,(200,2),(300,3)


select * from  t  where b=2 for update ;  ---sess 1

select * from  t  where b=3 for update ;  ---sess 2

mysql中由于b字段没有索引,无论是rr 还是rc 隔离,都会出现锁等待,

oracle下,不会出现锁等待;

请问pg是哪种情况?行锁是通过哪种方式实现的



我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
清风生

pg中,这两个会话不会阻塞。

在pg中,行锁信息保存在数据块中,通常只在tuple的头部中设置标识位来标识记录此行已被锁,标识位为xmax和infomask,xmax放置当前事务的xid,infomask放置标记位。

行锁通过在当前事务号(locktype='transactionid')上加ExclusiveLock锁实现,如果出现行锁阻塞的情况,在pg_locks中体现为transactionid类型被阻塞,pg_locks中还会有tuple锁(locktype='tuple',如果是唯一索引插入冲突则不会有)信息,描述被阻塞的行锁信息。

暂无图片 评论
暂无图片 有用 3
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
greenplum 故障 提示 could not open file “pg_distributedlog/03B8”
回答 1
可能的原因分析文件丢失或损坏:最直接的原因可能是文件“pgdistributedlog/03B8”确实丢失了。这可能是由于存储介质故障、意外删除或者文件系统错误导致的。例如,存储Greenplum数据
如何查询某个时间段的消耗io高 或者消耗cpu高的sql ?
回答 4
可以了解下这个:pgstatkcache:收集查询的I/O和CPU统计信息
pgbackrest的问题
回答 2
最新版pgbackrest支持pg9.0以上版本。官方未提供rpm包。需要自行编译,编译时自动匹配版本,可参见源码:https://github.com/pgbackrest/pgbackrest/t
postgresql能不能在流复制从库上建逻辑复制同步几张表到另外一个库?
回答 2
已采纳
其实没理解的你的意思。我们一般都是一主两从。其中第二个从有延迟复制的功能。这样等于在2个从库。总体来说效果和你的说差不多。第二个从和第一个从数据差不多。之所以要延迟是为了防止误操作。如果不为了这个。那
pg_dump在备份时,排除特定表时,能用通配符吗?
回答 1
可以的,从pgv12开始支持使用T,excludetablePATTERN示例如下:pgdumpnpublicsT"mysettings"ftmp.sql
postgresql如何撤销上一步sql语句命令
回答 1
两种方式:一种类似flashback功能pgdirtyread的插件。https://www.modb.pro/db/42831一种是类似logminer的插件,walminerhttps://www
实现postgresql主从自动切换使用keepalived 和 repmgr 哪个更好
回答 1
已采纳
keepalived基本不需要业务层面做任何事情,就可以实现高可用,主备容灾。而且容灾的宕机时间也比较短。但因为VRRP、主备切换都没有什么复杂的逻辑,所以无法应对某些特殊场景,比如主备通信链路出问题
pg中特有的年龄该如何理解?freeze相关的三个参数更难理解
回答 1
主要用途是调低触发freeze,预防不能进行事务号的“环绕”,也就是解决事务回卷问题。比如pg13之前,insertonly表就可能会产生。
postgreSQL 可以看表的创建时间吗?
回答 2
pg不支持直接查询表创建时间,可以自定义ddl触发器记录实体创建时间
能否有更新的情况下,在线添加索引?
回答 1
可以
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~