数据库的锁机制

不同存储引擎支持不同的锁机制
InnoDB支持行锁,可以升级为表锁

1.表锁:开销小、加锁快;不会出现死锁;锁粒度大,发生锁冲突的概率高,并发度相对低。

2.行锁:开销大、加锁慢;会出现死锁;锁粒度小,发生锁冲突的概率低,并发度也相对行锁较高

InnoDB的锁类型

读锁(共享锁)、写锁(排他锁)、意向锁、MDL锁

读锁

简称S锁:一个事务获取了一个数据行的读锁,其他事务能获得该行对应的读锁,但不能获得写锁。
即一个事务在读取一个数据行时,其他事务也可以读,但是不能对该数据行进行增删改的操作

读锁有两种select方式的应用:
1.自动模式下的select查询语句,不需要加任何锁,直接返回查询结果,这就是一致性非锁定读;
2.通过select..... lock in share mode 在被读取的行记录或行记录的范围上加一个读锁,让其他事务可以读,但是不能加写锁

写锁

简称X锁,一个事务获取了一个数据行的写锁,其他事务就不能再获取该行的其他锁,写锁优先级最高

DML语句会对行记录加写锁

比较特殊的是select for update,它会对读取的行记录加上一个写锁,其他任何事务就不能对被锁定的行加上任何锁,不然会被阻塞。

MDL锁

意向锁

InnoDB行锁种类

单个行记录的锁

间隙锁(Gap lock)

Next-key Locks

记录锁和间隙锁的组合

锁等待和死锁

锁等待:一个事务过程中产生的锁,其他事务需要等待上一个事务释放它的锁。

一直不释放,一直等待,直到过了锁等待时间,会报一个等待超时的错误。

死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象---------锁资源请求产生了回路现象,产生死循环。
InnoDB引擎可以自动检测死锁,并自动回滚该事务

(1)不同程序会并发存取多个表,或者涉及多行记录的时候尽量约定
(2)
(3)280558763
(4)

锁问题的监控

出现锁问题:
1.show full processlist 展示全部进程列表
2.show engine innodb status 展示