kingbase之数据库锁概念总结

本文详细介绍了Kingbase数据库中的事务锁、表锁和行锁类型,以及MVCC机制如何影响事务概念。此外,讨论了死锁的发生、检测和控制策略,以及锁等待现象在Kingbase中的表现。
摘要由CSDN通过智能技术生成

写博客主要是记录一下自己处理的事情的一个复盘,梳理问题分析过程和理清处理问题中涉及的数据库原理、概念,如果文章有错误请评论指出,多多指教。
参考博客:https://www.modb.pro/db/70021

锁的分类

kingbase数据库是在pg数据库的内核基础之上做的开发和兼容,postgresql锁相关的也适应kingbase。kingbase有哪些锁呢?事务锁、表锁、行锁。由于mvcc机制kingbase数据库的事务概念会经常在分析问题时涉及到。表锁和行锁概念同oracle和mysql。

锁的类型

事务锁的类型有,SharedLock 和ExeclusiveLock。
表锁,经典的锁矩阵, 8类主要的锁类型,ACCESS SHARE和ACCESS EXCLUSIVE可以理解为多版本读/写,SELECT会在查询的表上获取ACCESS SHARE,而那些很硬的操作,诸如TRUNCATE、DROP TABLE等都会获取ACCESS EXCLUSIVE。
ROW SHARE和ROW EXCLUSIVE可以理解为意向读/写锁,意向锁根据名字,就是意向做一件事,但并非实际执行,所以可以看到ROW SHARE和ROW EXCLUSIVE之间互不冲突。当要更新插入时,需要先在对应的表上获取ROW EXCLUSIVE锁。
SHARE和EXCLUSIVE为传统的读写锁,在PostgreSQL中有点变化,EXCLUSIVE锁出现频率很低,SHARE锁用在了创建索引的时候,因为SHARE锁不自斥,所以也就意味着在一张表上可以同时创建多个索引,但是会堵塞插入更新等(和ROW EXCLUSIVE冲突)。
而SHARE UPDATE EXCLUSIVE和SHARE ROW EXCLUSIVE两种锁比较难记忆,SHARE UPDATE EXCLUSIVE在VACUUM和ALTER TABLE SET(XXX)等操作时会获取,因为SHARE UPDATE EXCLUSIVE是自斥的,所以目前PostgreSQL无法做到表级的并行VACUUM,但可以做到库级的并行VACUUM(好消息是,在刚刚发布不久的POSTGRESQL13中,对索引的清理支持并行了);SHARE ROW EXCLUSIVE出现的概率较低,一般常见的是创建触发器
![kingbase锁矩阵](https://img-blog.csdnimg.cn/direct/4412f3c79ec243e3a128d89183e86cb0.png

死锁

死锁在各大主流数据库中都有,当一个事务试图获取另一个事务已在使用的资源,而第二个事务又试图获取第一个事务在使用的资源时,就会发生死锁,在kingbase中,有lock_timeout、deadlock_timeout、log_lock_waits(日志记录)等参数控制。死锁检测是一件十分耗费资源的事情,大多数时候,一旦检测到死锁,则其中一个事务(大多数情况下是发起检查的事务)将被迫中止。

锁等待

在 kingbase 中,当事务请求获取锁而无法立即获得时,就会发生锁等待。例如,如果一个事务持有行或表的排他锁(ExclusiveLock),而另一个事务尝试在同一资源上获取共享锁(ShareLock)或也尝试获取排他锁,那么第二个事务将必须等待第一个事务释放锁。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值