MySQL锁

作者: 一只小星_ | 来源:发表于2019-03-27 16:12 被阅读0次

锁的分类:

1.从粒度来分:表锁和行锁。

2.从类型来分:读锁和写锁。

表锁

偏向MyISAM存储引擎,加锁快,开销小,并发程度最低。

查看表上加过的锁
show open tables;
手动增加表锁
lock table 表名字 read/write,表名字2 read(write),其他;
给所有表解锁
unlock tables;

当事务1对表A上了读锁,事务1再想去select同数据库下的其他表就不给查了。事务2此时要修改表A,就阻塞了。
当事务1对表A上了写锁,再想去查找同数据库下其他的表也查不出来。但有的时候,其他事务也可以查出来因为mysql的缓存。

Myisam的读写锁调度是写优先,这也是myisam不适合做主表引擎的原因,因为写锁后,其他线程不能做任何操作,大量的更新会使查询很难得到锁,从而造成永久阻塞。
MyISAM在查询的时候自动给所涉及的所有表加读锁,在执行增删改操作之前,会自动给涉及的表加写锁,MySQL的表级锁就读写两种。

行锁

偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定力度小,发生冲突概率低,并发度高。
InnoDB和MyISAM的区别:InnoDB支持事务,并且采用行级锁。

在这个例子中,开了两个session,1和2。两个都去掉了,事务的自动提交,当在s1里面update一条数据,s2也想要update同一条数据的时候就阻塞,因为这个时候s1还没有提交,为了保证rr的级别,不能覆盖s1的提交所以s2的update阻塞,如果s2是要select同一条数据,那读出来的还是s1update之前的,也是为了保证rr隔离界别。

索引失效会让行锁变表锁。
间隙锁危害:
什么是间隙锁:当我们用范围条件检索数据,并请求共享或者排他锁,InnoDB会给符合条件的已有数据记录的索引项加锁,对于键值在条件范围内但并不存在的记录,叫做间隙。InnoDB也会对间隙加锁,这种机制就是间隙锁,Next-Key锁。
危害:在查询的过程中,会锁定整个范围内所有的索引键值,即使键值并不存在,从而造成在锁定的时候无法插入锁定键值范围内的任何数据。

常考:如何锁定一行。
begin:select * from test_table where id=8 for update;//在提交之前,是个排他锁,给这条数据上了个排他锁。

。。。做其他操作commit;

https://blog.csdn.net/claram/article/details/54023216

image image

比较重要的参数:time,avg,waits,如果等待的次数多,花费时间长就要好好考虑了。

优化建议:尽可能让所有数据检索都通过索引来完成,避免无索引升级为表锁,合理设计索引,尽量缩小锁的范围,尽可能减少索引条件,避免间隙锁,尽量控制事务大小,尽可能降低隔离级别。

页锁:粒度介于表锁和行锁之间。

主从复制

相关文章

  • Mysql的锁

    MySql锁的分类 Mysql里的锁大致可以分为全局锁、表级锁和行锁三类。 全局锁 Mysql 增加全局锁的方法:...

  • MySQL二进制日志

    MySQL-day10 MySQL存储引擎-锁 1)什么是“锁”? 2)“锁”的作用是什么? 3)MySQL中的锁...

  • MySQL的锁机制

    mysql的锁机制 1、MySQL锁的基本介绍 MyISAM:MySQL的表级锁有两种模式:表共享读锁(Table...

  • MS汇总

    数据库相关[MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)Mysql索引优化Mysql查询优化Mysq...

  • Mysql 之 锁表与解表

    Mysql 之 锁表与解表 Mysql 查看锁表语句 mysql>show open tables where i...

  • rails中乐观锁和悲观锁的使用

    MySQL乐观锁和悲观锁的介绍可以参考之前的一篇文章MySQL中的锁(行锁,表锁,乐观锁,悲观锁,共享锁,排他锁)...

  • 秒杀随笔

    方法: mysql悲观锁 mysql乐观锁 PHP+redis分布式锁 PHP+redis乐观锁(redis wa...

  • 共享 + 排他锁

    mysql锁机制分为表级锁和行级锁 ,mysql中行级锁中的共享锁与排他锁进行分享交流。 测试语法 begin; ...

  • (4)头条mysql

    1、MySQL有哪些锁,乐观锁和悲观锁实现 如果避免、减少锁等待、团队中如何监控MySQL的锁等待的情况 锁监控:...

  • MySQL锁篇

    1 MySQL锁介绍 2 MySQL表级锁 2.1 表级锁介绍 ​ 表级锁由SQL layer实现。M...

网友评论

      本文标题:MySQL锁

      本文链接:https://www.haomeiwen.com/subject/jlazvqtx.html