• Msyql--死锁


    死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。当多个事务试图以不同的顺序锁定资源时,就可能会产生死锁。
    多个事务同时锁定同一个资源时,也会产生死锁。例如,设想下面两个事务同时处理

    StockPrice 表:
    事务1
    START TRANSACTION;
    UPDATE StockPrice SET close = 45.50 WHERE stock_id = 4 and date = '2002-05-01*;
    UPDATE StockPrice SET close = 19.80 WHERE stock_id = 3 and date = '2002-05-02';
    COMMIT; 


    事务2
    START TRANSACTION;
    UPDATE StockPrice SET high = 20.12 WHERE stock_id = 3 and date = '2002-05-02,;
    UPDATE StockPrice SET high = 47.20 WHERE stock_id = 4 and date = *2002-05-01';
    COMMIT; 

    如果凑巧,两个事务都执行了第一条UPDATE语句,更新了一行数据,同时也锁定了该行数据,接着每个事务都尝试去执行第二条UPDATE语句,却发现该行已经被对方锁定,然后两个事务都等待对方释放锁,同时又持有对方需要的锁,则陷入死循环。除非有外部因素介入才可能解除死锁。为了解决这种问题,数据库系统实现了各种死锁检测和死锁超时机制。越复杂的系统,比如InnoDB存储引擎,越能检测到死锁的循环依赖,并立即返回一个错误。这种解决方式很有效,否则死锁会导致出现非常慢的查询。还有一种解决方式,就是当查询的时间达到锁等待超时的设定后放弃锁请求,这种方式通常来说不太好。

    InnoDB目前处理死锁的方法是,将持有最少行级排他锁的事务进行回滚(这是相对比较简单的死锁回滚算法)。

  • 相关阅读:
    Python 避免字典和元组的多重嵌套
    支持向量机(四)SMO算法
    用 None 来描述具有动态默认值的参数
    Minitab 控制图
    MySQL在并发场景下的问题及解决思路
    redis变慢查询
    php中流行的rpc框架详解
    MySQL查询性能优化
    【学习笔记】VS Code的keil插件使用方法
    【学习笔记】keil5 CMSIS/core_cm3.c(445): error: nonASM statement in naked function is not supported uint32_t result=0;
  • 原文地址:https://www.cnblogs.com/sulishihupan/p/14548041.html
Copyright © 2020-2023  润新知