MySQL锁(锁级别、锁优化、避免死锁)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_19107011/article/details/96879157

MySQL锁

为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接影响到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一

三种不同的锁类型

名称 粒度 并发能力 加锁和释放锁的消耗 出现死锁概率
row-level 最小 最大 消耗大
page-level
table-level 最大 比较弱 消耗小

锁机制分析

表级锁定

使用了:read、read_wait、write、write_wait四个队列实现

使用方法 : lock table my_table read、lock table my_table write;

行级锁定

这里主要说下InnoDB使用了"间隙锁",也就是,根据锁定大是一个范围。

具体可以参考【间隙锁产生的原因】

锁优化

目标就是,缩短锁定的时间。

  • 合理设计索引,避免因为间隙锁,而影响到其他Query

  • 能者多劳,搜索的时候尽可能使用索引,并且索引范围尽可能小,避免因为无法使用索引加锁而变成表锁

  • 业务层面,在同一个事务中,尽可能做到一次锁定需要的所有资源,减少死锁产生的概率;

  • 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率。

其他

这里补充下InnoDB 的优点

  • 支持事务安全:READ UNCOMMITTED、READ COMMITTED、REPEATABLE和SERIALIZABLE

  • 锁定机制的改进

参考文章

了解下Mysql的间隙锁及产生的原因
参考书籍<<MySQL性能调优和架构设计>>

猜你喜欢

转载自blog.csdn.net/qq_19107011/article/details/96879157