先说一个命令 Explain SQL语句 (\G 加不加这个都行) MySQL执行计划
https://blog.youkuaiyun.com/Anglry/article/details/105383495 本人转载的算是做了记录,当然有事烧纸,没事看看就行了,当然不想面向百度,mysql官网了解一下。
锁分类: 排他锁 共享锁 意向锁 间隙锁 临建锁 乐观锁 自增锁 悲观锁 行锁 表锁 页锁
日常扩展:https://blog.youkuaiyun.com/fu_zhongyuan/article/details/90244503 InnoDB的逻辑存储结构
乐观锁: version字段 版本标识
悲观锁(排他锁):mysql自带的锁
按照锁定的粒度可以分为:表锁 行锁 页锁
表锁(table lock):意向锁(IX) 自增锁
行锁(row lock):间隙锁(X 范围锁,多行) 临建锁 记录锁
X locks
针对锁的方式:排他锁(写锁X) 共享锁(读锁S)
锁的兼容:只有共享锁之间是兼容的 其他锁都不兼容
锁一般情况下很小认为去做操作,一般手动的也就两种:
select ... for up 加写锁
vselect ... lock in share mode 加读锁
锁的作用主要是用在事务隔离性上,用在并发上。(InnoDB注意点:加锁是对索引加的锁)
查看锁状态命令:show engine innodb status(查看InnoDB存储引擎的状态)
想要看完整信息 :set global innodb_status_output_locks=1
性能分析:set profiling = 1; 高版本上有一个单独的数据库performance_schema;
select ... ;
show profiling for query 1;
show profiles;
下图是锁信息(没有事务的情况下):
死锁:LATEST DETECTED DEADLOCK 事务出现死锁进行回滚
多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。
隔离机制加锁类型