一般一个程序满,从消耗的角度,一个是cpu,一个是IO,但有的时候mysql慢,是因为某条sql不小心把整个表给锁了。
什么是锁?
锁是计算机协调多个进程或线程并发访问某一资源的机制。
在数据库中,除了传统的计算机资源(如CPU,RAM,I/O)的争用外,数据也是供很多用户共享的资源。如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。
锁的分类?
从对数据操作的类型:分为读锁/写锁
读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响
写锁(排它锁):当写操作没有完成前,会阻断其它写锁和读锁
从对数据操作的粒度:分为表锁/行锁
Mysql的三锁
表锁(偏读)
1.特点:偏向MyISAM存储引擎,开销小,加锁快,无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低
2.案例分析:
加读锁
session1获取读锁,可以读取数据,session2也可以读取数据
session1获取读锁,可以读取数据,但是当要向表中插入数据时,会报错,因为还没有释放读锁,但是session2向表中插入数据时,会处于等待状态,等session1释放读锁后,session2的写入操作就完成了
加写锁
1.session1加完写锁后&#