首页 > 数据库技术 > 详细

mysql 锁

时间:2021-08-04 22:51:14      阅读:49      评论:0      收藏:0      [点我收藏+]

 

1. 根据加锁的范围

  锁大致可以分为,全局锁,表级锁,行级锁。

  1.1.全局读锁的 方法:

    命令 flush tables with read lock (FTWRL)

    当需要把整个库处于只读状态,可以使用这个命令,之后数据更新语句,数据定义语句,更新类事务提交 都会阻塞。

    如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆;

    如果你在从库上备份,那么备份期间从库不能执行主库同步过来的binlog,会导致主从延迟。

  1.2 表级锁

    MySQL里面表级别的锁有两种:一种是表锁,一种是元数据锁(meta data lock,MDL)。

  1.3 行锁

    怎么减少 行锁对性能的影响?

      1.在 innodb 事务中,行锁是在需要的时候加上去的,但并不是不需要了就立马释放掉,而是等事务结束后释放。这就是两阶段锁

        所以-如果一个事务需要锁多个行,要把最有可能造成锁冲突,最可能影响并发的锁尽量往后放。

      2. 当并发系统中几个不同的线程出现循环资源依赖,涉及的线程都在等待别的线程进行资源释放,就会导致几个线程都进入无限等带的状态称称为 死锁。

        出现死锁后,两种策略:

          1.直接进入等待,到达超时时间可以通过 innodb_lock_wait_timeout 进行设置。 默认50S

          2.发起死锁检测,发现死锁后,主动回滚死锁中的某一事务,让其它事务继续执行。设置参数 innodb_deadlock_delect 为 on ,表示开启这个逻辑

 

      死锁检测 会额外的负担 造成cpu看着利用率很高 但是没有执行几个事务。

      解决方法:
        1.自确定,如果确保业务中不会出现死锁就关闭死锁检测。 存在风险
        2.控制并发度。
        建议在服务层做,如果有中间键 可以在中间件中实现。

 

mysql 锁

原文:https://www.cnblogs.com/dhdnm/p/15100463.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!