全局锁

  1. 有一个命令flush tables with read lock可以锁库,使全库处于只读状态<br /> 可以用mysqldump工具,开启一个可重复读的事务来备份整个数据库,此时不影响数据库正常工作

表级锁

myisam只有表锁,也分读写锁

MDL(metadata lock)不需要显式使用,在读表时会自动加上,分为读锁和写锁

行锁

1.行锁在事务提交后才会释放,因此事务中,热点行的查询要尽量往后放,减少锁持有的时间

2.死锁检测
等待超时:不可行
设置自动发起死锁检测,消耗大量的资源,每一个新来被堵住的线程,都要检测是否是因为自己导致的死锁,O(n)的检测时间,1000个线程就有100万次检测
控制并发度,中间件排队;拆分热点行为多行