数据库锁机制(了解)

author author     2022-09-24     218

关键词:

MySQL锁定机制简介

数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能例外。MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样,为了满足各自特定应用场景的需求,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计,所以各存储引擎的锁定机制也有较大区别。

总的来说,MySQL各存储引擎使用了三种类型(级别)的锁定机制:行级锁定,页级锁定和表级锁定。下面我们先分析一下MySQL这三种锁定的特点和各自的优劣所在。

行级锁定(row-level)

 

表级锁定(table-level)

 

页级锁定(page-level)

 

 

 

为什么需要了解锁

 

1.1 死锁问题

 

1.2 并发问题导致的不正确数据的读取和存储,破坏数据一致性的

 

  • 丢失更新:当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题--最后的更新覆盖了由其他事务所做的更新。例如,两个编辑人员制作了同一文档的电子副本。每个编辑人员独立地更改其副本,然后保存更改后的副本,这样就覆盖了原始文档。最后保存其更改副本的编辑人员覆盖另一个编辑人员所做的更改。如果在一个编辑人员完成并提交事务之前,另一个编辑人员不能访问同一文件,则可避免此问题
  • 脏读:一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致状态;这时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被形象地叫做”脏读”。
  • 不可重复读:一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变、或某些记录已经被删除了!这种现象就叫做“不可重复读”。
  • 幻读:一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为“幻读”。

 

 

悲观锁

  1. 悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作都某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。悲观锁的实现,往往依靠数据库提供的锁机制。悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。
  2.  悲观并发控制实际上是“先取锁再访问”的保守策略,为数据处理的安全提供了保证。但是在效率方面,处理加锁的机制会让数据库产生额外的开销,还有增加产生死锁的机会;另外,在只读型事务处理中由于不会产生冲突,也没必要使用锁,这样做只能增加系统负载;还有会降低了并行性,一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数

乐观锁

  1. 乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。
  2. 乐观并发控制相信事务之间的数据竞争(data race)的概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会主动产生任何锁和死锁。但是在并发量高的情况下,可能导致某次数据修改多次重试,影响单次成功操作的时间。
  3. 数据版本实现乐观锁:实现数据版本有两种方式,第一种是使用版本号,第二种是使用时间戳。使用版本号时,可以在数据初始化时指定一个版本号,每次对数据的更新操作都对版本号执行+1操作。并判断当前版本号是不是该数据的最新的版本号。

 

深入了解mysql的隔离级别和锁机制

...QL多事务并发问题,为了解决多事务并发问题,MySQL设计了锁机制、MVCC多版本并发控制隔离机制、以及事务隔离机制,用一整套机制来解决多事务并发所出现的问题.1.事务的四大特性特性特点Atomicity(原子 查看详情

mysql的锁机制,你真的了解吗?进来吧!用图表告诉你(代码片段)

什么是锁?锁的存在是为了数据的一致性,我们都知道mysql在修改数据层面是支持并发修改的,那么在多个线程同时修改一个数据时产生的线程安全问题;什么是线程安全呢?大家想象这样的场景,一个数... 查看详情

mysql的锁机制,你真的了解吗?进来吧!用图表告诉你(代码片段)

什么是锁?锁的存在是为了数据的一致性,我们都知道mysql在修改数据层面是支持并发修改的,那么在多个线程同时修改一个数据时产生的线程安全问题;什么是线程安全呢?大家想象这样的场景,一个数... 查看详情

深入了解分布式锁导学篇(代码片段)

...深入企业场景数据在mysql的情况下如何解决高并发对mysql数据库中进行有序操作防止出现脏读的问题,接着引入非关系型数据情况下如何处理集群服务和线程之间操作有序性的问题通过redis乐观锁和redishash+lua脚本zookeeper节... 查看详情

mysql锁机制详解(代码片段)

...能被其他任务读取的,这对并发度有较大的影响。对应到数据库,可以理解 查看详情

java锁机制(synchronized)(代码片段)

Java锁机制(Synchronized)JVM内存结构在了解Java锁机制前,先来复习一下JVM的内存结构对象、对象头、结构Java的对象包含了三个部分:对象头、实例数据、对齐填充字节。对齐填充字节是为了满足Java对象的大小必须... 查看详情

innodb锁机制分析

InnoDB锁机制常常困扰大家,不同的条件下往往表现出不同的锁竞争,在实际工作中经常要分析各种锁超时、死锁的问题。本文通过不同条件下的实验,利用InnoDB系统给出的各种信息,分析了锁的工作机制。通过本文可以帮助大家... 查看详情

不小心被锁!物联卡锁卡机制与解锁方法,你不准备了解一下?

...目前移动、联通、电信三大运营商物联卡都有换设备锁卡机制。今天针对物联卡锁卡这一情况,我们来一块聊一聊 查看详情

锁机制,信号机制及事件机制(代码片段)

...到时数据混乱的现象,为了避免数据混乱,这里就引入了锁机制: 锁机制:引入Lock模块,l=Lock()在子进程中,l.acquire()表示取到钥匙,锁上门进行数据处理;l.release()表示归还钥匙打开门,让下一个进程进行操作.信号机制:能够将一把锁配... 查看详情

mysql锁的分类和加锁机制(代码片段)

...一种用来解决读写冲突的无锁并发控制,在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能,解决脏读、幻读、不可重复读等问题。当然只... 查看详情

数据库锁机制

锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一。本章将对MySQL中两种使用最为频繁的存储引擎MyISAM和Innodb各自的锁定机制进行较为详细的分析。&nbs... 查看详情

数据库锁机制

锁的基本原理为了保证数据的完事性和一致性,数据库系统采用锁来实现事务的隔离性。各种大型数据库采用的锁基本理论是一致的,但在具体实现上各有差别。从并发事务锁定的关系上看,可以分为共享锁定和独占锁定。从锁... 查看详情

锁机制

解决数据库并发控制问题并实现事务的各个隔离级别共享锁:代号S锁,锁粒度是行或者元组(多个行),一个事务获取了共享锁后,可以对锁定范围内的数据进行读操作排他锁:代号X锁,锁粒度与共享锁相同,一个事务获取了... 查看详情

了解下mysql的间隙锁及产生的原因(代码片段)

...隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(NEXT-KEY)锁。危害因为Query执行过程中通过范围查找的话 查看详情

锁机制---信号机制----事件机制

锁机制  防止数据混乱,保护对进程的数据安全性  锁涉及两个操作:     拿钥匙锁门 ------- 不让别人进屋 ( 其它进程若想进屋 要在外边等待, 等其出来后还回钥匙,才能进去 )    还钥... 查看详情

数据库的锁机制(代码片段)

...在计算机科学,特别是程序设计、操作系统、多处理机和数据库等领域,并发控制(Concurrencycontrol)是确保及时纠正由并发操作导致的错误的一种机制。数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数... 查看详情

高性能mysql之锁机制

并发控制 并发控制的任务是确保当多个事务同时修改数据库中同一个数据时,不破坏事务的隔离性和一致性。锁 当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证... 查看详情

详解mysql中的锁机制

...计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一... 查看详情