mysql 中锁的一致性非锁定读 和 一致性锁定读

1.什么是锁

锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。InnoDB存储引擎会在行级别上对表数据上锁,这固然不错,不过

InnoDB存储引擎也会在数据库内部其他多个地方使用锁,从而允许对多种不同的资源提供并发访问。例如 操作缓冲池中的LRU列表。删除、添加、移动LRU列表中的元素,为了保证一致性,必须有锁的介入,数据库系统使用锁是为了支持对共享资源进行并发访问,提供一致性。

对于MyISAM引擎,其锁死表锁设计,并发情况下读是没问题的,但是并发插入性能就要差一些了,若插入在底部,MyISAM存储引擎还是可以有一定的并发写入操作。对于 sql server 2005之前都是页锁的,相对表锁的MyISAM引擎来说,并发性能有所提高,页锁也容易实现,然而对于热点数据页的并发问题依然无能为力,到 sql server 2005版本开始支持乐观并发和悲观并发,在乐观并发下开始支持行级锁,但是实现方式与InnoDB存储引擎的实现完全不同,sql server 的锁是一种稀有资源,锁的行越多开销越大,因此会锁升级,行锁升级为页锁 到区域锁 最终到表锁,这时候并发性能就会下降。

InnoDB存储引擎锁的实现和oracle非常类似,是通过提供一致性非锁定读、行级锁支持。 行级锁没有相关额外的开销,并可以同时得到并发性和一致性。

lock 和 latch 锁和闩锁

这里我们先来区分数据库中两种锁 lock锁 和 latch 闩锁, latch因为其要求锁定时间非常短,如果持续时间长则导致性能非常差,在InnoDB中,latch又分为 mutex(互斥锁) 和 rwlock(读写锁),其目的是用来保证并发线程操作临界资源的正确性,并且通常没有死锁的检测机制。

lock的对象是事务,用来锁定的是数据库的对象,比如表 页 行,并且一般的lock对象仅仅事务commit 和 rollback后进行释放(不同隔离级别释放时间不同),此外lock是有死锁检测机制的。下面比较看看他们的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大龄奋斗程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值