图书高性能mysql学习笔记--读写锁

      当一行记录同时被更新和读取时,会发生什么是不可预估得,有可能是读取得是更新前的数据,也有肯能是之后的数据。mysql为了解决这个问题,采用一种解决方案:并发控制,具体实现一个由两种类型得锁组成的锁系统。这两种类型得锁同城被称为共享锁(share lock)和排他锁(exclusive lock),也叫读锁和写锁。

        读锁,是共享的,多个线程可以同时读取同一个资源,且互不干扰。当一个资源处于读状态锁时,允许其他进程获取他的读状态锁,但是不可获取他的写状态锁。

        写锁,是排他的,仅有一个线程可以获取得写状态锁。当一个资源处于写状态锁时,不允许其他线程获取他的读状态锁,同时也不允许获取他的写状态锁。

 

        锁按粒度划分可分为行级锁和表级锁。

         行级锁,开销比较大,但由于锁定的资源非常小,会对并发有很好的支持,例如批量更新的时候,如果我们制定了id主键,那么只会在每条记录上产生行级锁,不影响其他行的写操作。

         表级锁,开销小,但每次写表的时候,都会锁定整张表,每次更新只有当上一天写锁释放掉才会执行下一条,当并发写的时候非常的慢。

         注意的是:行级锁可能会产生思索,例如我们有一个事务a,update where id=3 ,update where id=4 , commit;一个事务b,update where id=4 ,update where id=3 ;当两个事务同时执行,并且都执行第一条更新的时候,a 事务占用了3的写锁,并等待4的写锁的释放,b事务占用了4的写锁,并等待3的写锁的释放。当然,服务器会有操作过期时间,最好的时候是在程序设计中避免这种现象的出现。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

左左在右边

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

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

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

打赏作者

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

抵扣说明:

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

余额充值