mysql 锁

1、flush tables with read lock    全局锁 

  导致全库只读

  mysqldump-single-transaction (通过repeatable read 隔离级别启动事务)

  set  global read-only  一般用来判断主备库

2、表级锁

  lock table  unlock table  表锁

  MDL 元数据锁 (开始第一次查询是获取读锁,事务提交时才会释放MDL读锁)

  小表的DDL语句会导致全库崩溃

  select  * from table 获取MDL读锁

  alter table add index (a)  blocked 等待读锁释放获取MDL写锁

  后续所有的的操作都会被blocked

 

3、行级锁(引擎层实现)

  两阶段锁: 真正查询时使用,提交时释放。 尽量将可能同时操作的语句放到后面

  死锁,死锁检测

    ---innodb_lock_wati_time   50 默认

    ---innodb_deadlock_detect  on

  死锁发生的场景

    ----并发100线程    同时修改某条记录  会发现cpu100%,但实际更新操作缺很少(这是因为死锁检测耗费了大量cpu)

    ----解决方案 将单条记录拆成多条,降低死锁的可能性

4、当前读(更新操作读当前最新版本)

  查询当前读 

      写锁 :select  *  from table for update

      读锁: select * from table  in share mode

5、read-view 

    当前未提交的所有事务id

    小于最小事务id 可见

    大于最大事务id 不可见

    read-view中的事务id不可见

 

 

  

  

 

posted @ 2019-08-18 00:40  man1s  阅读(131)  评论(0编辑  收藏  举报