阅读背景:

MySQL锁系列 之 死锁

来源:互联网 
一、什么是死锁 1.必须满足的条件 1. 必须有两个或者两个以上的事务 2. 不同事务之间都持有对方需要的锁资源。 A事务需要B的资源,B事务需要A的资源,这就是典型的AB-BA死锁 2.死锁相关的参数 * innodb_print_all_deadlocks 1. 如果这个参数打开,那么死锁相关的信息都会打印输出到error log * innodb_lock_wait_timeout 1. 当MySQL获取row lock的时候,如果wait了innodb_lock_wait_timeout=N的时间,会报以下错误 ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction * innodb_deadlock_detect 1. innodb_deadlock_detect = off 可以关闭掉死锁检测,那么就发生死锁的时候,用锁超时来处理。 2. innodb_deadlock_detect = on (默认选项)开启死锁检测,数据库自动回滚 * innodb_status_lock_output = on 1. 可以看到更加详细的锁信息 二、死锁有什么危害 死锁,即表明有多个事务之间需要互相争夺资源而互相等待。 如果没有死锁检测,那么就会互相卡死,一直hang死 如果有死锁检测机制,那么数据库会自动根据代价来评估出哪些事务可以被回滚掉,用来打破这个僵局 所以说:死锁并没有啥坏处,官网:www.fhadmin.org  反而可以保护数据库和应用 那么出现死锁,而且非常频繁,我们应该调整业务逻辑,让其避免产生死锁方为上策 三、典型的死锁案例剖析 3.1 死锁案例一 一、什么是死锁 1.必须满足的条件 1. 必须有两个或者两个以上的事务 2. 不同事务之间都持有对



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: