MySql的锁机制简单梳理

本篇博客主要是简单梳理mysql锁相关理论知识,并没有深入解释其中的实现原理,可能会有一点简单的加锁机制。

博主在工作时接触到一些数据库锁的相关知识,尤其是事务和锁的关系比较密切,比如间隙锁和MVCC….等,大佬可全部忽略,部分知识取自《MySQL高性能书籍_第3版(中文)》,说实话在阅读本书之前还比较有信心,然后第一章的存储引擎和mysql逻辑架构就花费了大量时间去理解和学习,因为很多知识是相互依赖的,读懂需要大量的知识储备和工作经验吧。另外有不足之处还请不吝赐教。

锁的分类

从mysql锁大的层面上看,所还是分为两类,悲观锁和乐观锁。

大致屡一下分层和分类

在这里解释一下,一些博客和素材的分类是有区别的。我记得有一篇博客说表锁误导了我。面试时,面试官问了我这个问题。我说这是一把乐观的锁。他问我你有没有把握。我知道我错了。

[En]

Here to explain that there are differences in the classification of some blogs and materials. I remember a blog saying that the watch lock misled me. During the interview, the interviewer asked me this question. I said it was an optimistic lock. He asked me if you were sure. I knew I was wrong.

乐观锁

(Optimistic Concurrency Control,OCC):假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。也没具体指定怎么检查。

悲观锁

(Pessimistic Concurrency Control,PCC):假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。

相比大多数程序员对这两种锁概念比较清晰,不多赘述。

那么主要的问题是行锁和表锁。

支持行锁的存储引擎有主流的InnoDb,XtarDb等

行锁的劣势:开销大;加锁慢;会出现死锁

行锁的优势:锁的粒度小,发生锁冲突的概率低;处理并发的能力强

行锁本身支持的并发比表锁高,但是换来的缺点是效率问题,带来了巨大的锁开销,行锁只是在存储引擎中实现的而与mysql架构曾没有任何关系,说的直白一点就是mysql并不关心存储引擎的锁实现机制,只是存储引擎本身实现了行锁。

行锁的读写锁机制

行锁本身为小粒度锁,所以相应的读写锁没有那么多限制,在增删改操作时会使用锁定行数据,查询时会使用读锁锁定行数据,写锁为排他锁,可以理解为单线程操作行数据,读锁为共享锁支持多数据访问行。而InnoDB支持表锁和行锁,在有索引条件的语句操作中会使用行锁,若没有索引操作或是全表扫描时InnoDB会使用表锁。

表锁本身是mysql架构实现的而并非某一存储引擎,大家口中的MyISAM的表锁并不是存储引擎去具体实现的。

表锁的劣势:锁力度大,锁冲突几率大,支持并发低

表锁的优势:开销小,枷锁快,不会死锁

表锁是MySql的基本策略,也是开销最小的锁策略。

表锁的读写锁机制

表锁本身的粒度比较大,冲突比较多。新增、删除、修改操作时增加一个写锁,会阻塞其他读写操作,而表锁的写锁优先级更高,比如队列中的一个读锁。将通过写锁连线执行。

[En]

The granularity of the table lock itself is relatively large, so there are many conflicts. Adding a write lock when adding, deleting and modifying operations will block other read and write operations, while the write lock of the table lock has a higher priority, such as a read lock in the queue. Will be executed wired by the write lock.

读写锁

读写锁是并发控制中的经典解决方案。读锁为共享锁,写锁为排他锁。

[En]

Read-write lock is a classic solution in concurrency control. Read lock is shared lock and write lock is exclusive lock.

共享锁可以理解为多个客户读取同一个资源,他们互不干扰。

排他锁锁定当前要修改的资源,禁止其他用户修改和访问资源,保证资源的唯一性,防止多个用户修改

[En]

Exclusive lock locks the current resource to be modified, forbids other users to modify and access the resource, ensures the uniqueness of the resource, and prevents multiple users from modifying the same

一资源

Original: https://www.cnblogs.com/xiaozhang666/p/14189665.html
Author: 一半人生
Title: MySql的锁机制简单梳理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/22125/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总