MySQL锁机制

锁的分类(两锁)

从对数据操作的类型分:读/写锁

读锁(共享锁):针对同一份数据,多个操作可以同时进行而不会互相影响

写锁(排他锁):当前写操作没有完成前,它会阻断其他写锁和读锁

从对数据操作的粒度分:表锁和行锁

锁的分类(三锁)

1、表锁(偏读):偏向MyISAM存储引擎,开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。

手动增加表锁:lock table 表名字 read(write),表名字2 read(write),其他;

查看哪些表被加上锁:show open tables;

释放表锁:unlock tables;

如何分析表锁定:

可以通过检查table_locks_waitedtable_locks_immediate状态变量来分析系统上的表锁定。SQLshow status like ‘table%’;

table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数,每次立即获得锁值加1

table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),此值高则说明存在着较严重的表级锁争用情况。

此外,MyISAM的读写锁调度是读优先,这也是MyISAM不适合做写为主的表的引擎,因为写锁后,其他线程不能做任何操作,大量的更新会使得查询很难得到锁,从而造成永远阻塞。

2、行锁(偏写):偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁粒度最小,发生锁冲突的概率最低,并发度也最高;InnoDBMyISAM的最大不同有两点:一是支持事务,而是支持行级锁。

 索引失效会导致行锁变表锁。

 行锁分析:通过检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况,show status like ‘%innodb_row_lock%’;

 3、页锁:开销和加锁时间介于行锁和表锁之间;会出现死锁;锁粒度介于表锁和行锁之间,并发度一般。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值