通常一个程序满,从消耗的角度,一个是cpu,一个是IO,但有的时候mysql慢,是由于某条sql不当心把整个表给锁了。mysql
锁是计算机协调多个进程或线程并发访问某一资源的机制。
在数据库中,除了传统的计算机资源(如CPU,RAM,I/O)的争用外,数据也是供不少用户共享的资源。如何保证数据并发访问的一致性,有效性是全部数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。程序员
从对数据操做的类型:分为读锁/写锁sql
从对数据操做的粒度:分为表锁/行锁数据库
1.特色:偏向MyISAM存储引擎,开销小,加锁快,无死锁;锁定粒度大,发生锁冲突的几率最高,并发度最低
2.案例分析:session
3.案例总结
MyISAM在执行查询语句以前,会自动给所涉及的表加读锁,在执行增改删操做前,会自动给涉及的表加写锁
MyISAM表级锁有两种模式:并发
结论:性能
简而言之就是,读锁会阻塞写,但不会阻塞读,而写锁会阻塞读和写优化
4.表锁分析,如何排查锁的状况
看看哪些表被锁了:show open tables;
如何分析表锁定:能够经过table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定
SQL:show status like 'table%';spa
另外,MyISAM的读写锁调度是写优先,这也是MyISAM不适合作写为主表的引擎。由于写锁后,其它线程不能作任何操做,大量的更新会使查询很可贵到锁,从而形成永远阻塞线程
1.特色:偏向InnoDB存储引擎,开销大,加锁慢,有死锁,锁定力度小,发生锁冲突的几率最低,并发度也最高
InnoDB与MyISAM二者的不一样:一是支持事务,而是采用了行级锁
2.并发事务处理带来的问题
3.事务的隔离级别
4.案例分析
5.无索引行锁升级为表锁
6.间隙锁的危害
7.分析行锁定
经过检查InnoDB_row_lock状态变量来分析系统上的行锁争夺状况
show status like 'innodb_row_lock%';
8.优化建议