共计 913 个字符,预计需要花费 3 分钟才能阅读完成。
这篇文章主要讲解了“MySQL 的锁机制原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“MySQL 的锁机制原理介绍”吧!
MySQL 的锁有以下几种形式:
表级锁:开销小,加锁快,不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。MyISAM 引擎属于这种类型。
行级所:开销大,加锁慢,会出现死锁,锁粒度最小,发生锁冲突的概率最低,并发度也最高。InnoDB 引擎属于这种类型。
页面锁:开销和加锁时间介于表锁和行锁之间,会出现死锁,锁定粒度介于表锁和行锁之间,并发度一般,NDB 属于这种类型。
表锁:
MyISAM 存储引擎只支持表锁,所以对 MyISAM 表进行操作,会存在以下情况:
1)对 MyISAM 表的读操作(加读锁),不会阻塞其他进程对同一表的读操作,但会阻塞对同一表的写请求,只有当读锁释放之后,才会执行其他进程的写操作。
2)对 MyISAM 表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其他进程的读写操作。
行锁:
InnoDB 存储引擎是通过给索引上的索引项加锁来实现的,这就意味着:只有通过索引条件检索数据,InnoDB 才会使用行级锁,否则,InnoDB 将使用表锁。在并发访问比较高的情况下,如果大量事务因无法立即获得所需的锁而挂起,会占用,大量计算机资源,造成严重的性能问题,甚至拖垮数据库,这时需要设置合适的锁等待超时阈值参数 InnoDB_lock_wait_timeout 来解决,一般设置为 100 秒即可。
死锁:
两个事务都需要获得对方持有的排他所才能继续完成事务,这种循环所等待就是典型的死锁。
发生死锁后,InnoDB 一般都能自动检测到,他会让一个事务释放锁并回退,另一个事务色获得锁,继续完成事务。死锁是无法避免的,我们可以通过调整业务的逻辑来尽量减少死锁出现的概率。
感谢各位的阅读,以上就是“MySQL 的锁机制原理介绍”的内容了,经过本文的学习后,相信大家对 MySQL 的锁机制原理介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!