mysql 锁机制

学习秒杀系统,了解到mysql的锁机制,简单记录。

  • MyISAM锁:
    上面已经讨论了写优先调度机制和解决办法。这里还要强调一点:一些需要长时间运行的查询操作,也会使写进程“饿死”!因此,应用中应尽量避免出现长时间运行的查询操作,不要总想用一条SELECT语句来解决问题。因为这种看似巧妙的SQL语句,往往比较复杂,执行时间较长,在可能的情况下可以通过使用中间表等措施对SQL语句做一定的“分解”,使每一步查询都能在较短时间完成,从而减少锁冲突。如果复杂查询不可避免,应尽量安排在数据库空闲时段执行,比如一些定期统计可以安排在夜间执行。
    关于这段话,让我想起前一段时间写的非常复杂的一个sql,被db直接回绝,最后分解成了5w条sql来执行。现在想起来,如果那个sql在线上update,那么大量的读取操作肯定都会delay了。

  • InnoDB锁的区别:
    InnoDB与MyISAM的最大不同有两点:一是支持事务;二是采用了行级锁。行级锁和表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题。
    事物的ACID属性:原子性 Actomicity 一致性 Consisent 隔离性 Isolation 持久性 Durable

  • 关于死锁:
    MyISAM表锁是deadlock free的,这是因为MyISAM总是一次性获得所需的全部锁,要么全部满足,要么等待,因此不会出现死锁。但是在InnoDB中,除单个SQL组成的事务外,锁是逐步获得的,这就决定了InnoDB发生死锁是可能的。

参考文档:https://www.cnblogs.com/chenqionghe/p/4845693.html

你可能感兴趣的:(mysql 锁机制)