zoukankan      html  css  js  c++  java
  • 死锁和死锁检测

    如图所示,事务A在等待事务B释放id=2的锁,事务B在等待事务A释放id=1的锁

    这种情况就是死锁

    发生死锁有两种方法解决

    1.直接进入等待,直到超时。这个超时时间可以通过参数innodb_lock_wait_timeout来设置

    2.发起死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以执行。

       将参数innodb_deadlock_detect设置为on,表示开启这个逻辑

    在innodb中,innodb_lock_wait_timeout的值默认是50s,以为着如果使用第一种方法,

    第一个被锁住的线程要过50s才会超时退出,然后其他线程才有可能继续执行。

    对于在线服务来说,这个等待时间往往是无法接受的。

    但是我们又不能把这个时间设置的很小,比如1s,如果这个时候不是死锁,而是正常的锁等待呢

    这样就会造成很多误伤,所以我们还是使用死锁检测好一些,好在innodb_deadlock_detect默认就是on

    其实死锁检测也是会占用很多cpu资源的,当事务被锁住的时候,就要看看它锁依赖的线程有没有被别人锁住

    如此循环,最后判断是否出现了循环等待,也就是死锁

  • 相关阅读:
    jsp 生成静态页面
    flash cs5
    sql 设置主键
    sql 分页查询
    java 获取系统时间
    android 源码 编译
    android 退出 activity
    广告平台
    android 引擎
    maya 花草 制作动画
  • 原文地址:https://www.cnblogs.com/YCcc/p/10863113.html
Copyright © 2011-2022 走看看