InnoDB存储引擎(五)锁

一、概述

锁是数据库系统区别于文件系统的一个重要特性,锁机制可以用来管理对并发资源的访问,因此有了锁之后极大地提升了读写数据。InnoDB存储引擎同时支持行锁和表锁。

二、InnoDB存储引擎中的锁

2.1 锁的类型

  • S锁和X锁是行级别的锁
    S锁:共享锁,事物获取了某行记录的S锁,就可以读取该行数据
    X锁:排他锁,事物获取了某行记录的X锁,就可以修改或者删除该行数据。
    S锁只和S锁兼容,X锁和任何锁都无法兼容。

  • 意向锁
    设计该锁的目的:为了InnoDB存储引擎支持行锁和表锁同时存在,提高性能而设计的。
    我们看看没有意向锁的情况:事物A获取了某个表某行的X锁,现在事物B想要获取该表的表锁,这时候事物B就不得不去扫描整个表,看看是不是存在某个行记录已经被上了锁,如果上了锁,也就是锁冲突的话,事物B就必须等待阻塞。在没有意向锁的情况下,要获取表锁就必须扫描整个表,这样性能是非常差的。
    有了意向锁的情况:事物A如果获取了某个行的X锁之前,会对整个表上IX锁,这样事物B想要获取该表的表锁的时候,发现该表已经上了IX锁,就不需要去扫描整个表来判断每个行是否有锁了,就可以直接阻塞等待。
    此外,意向锁互相之间是兼容的,举个例子来说,多个事物想获取某个表的不同行的行锁,都要对该表上意向锁,意向锁之间不冲突,那么只要这些事物之间的行不同,就不会阻塞。

IS锁:意向共享锁
IX锁:意向排它锁

2.2 一致性非锁定读

一致性非锁定读就是说,读某个行记录不需要等待X锁的释放,也不会给这个行加S锁,这是通过MVCC(行多版本控制)来实现的,InnoDB在Commited Read和Repeatable Read的隔离级别中采用一致性非锁定读的方式实现并发读。
MVCC会给每一行数据保持多个版本的快照,快照就是行的历史版本的数据,这个是用undo段实现的,不会占用额外的空间。
在Commited Read隔离级别下,读的是最新的一份快照。
在Repeatable Read隔离级别下,读的是事物开始时的快照。

2.3 一致性锁定读

InnoDB存储引擎对SELECT语句支持两种一致性锁定读的操作。
SELECT … FOR UPDATE (X锁)
SELECT … LOCK IN SHARE MODE(S锁)

2.4 自增长与锁

2.5 外键和锁

三、锁的算法

四、锁的问题

  • 脏读
    在read uncommitted 的隔离级别下,事物A可以读取到事物B修改的但是未commit的记录 。
  • 不可重复读
    在read committed的隔离级别下,事物A先读一次记录 ,但未提交。然后事物B修改了该记录(可以修改的原因是MVCC导致事物A不会在读的时候上S锁),事物A再次读该记录,发现两次读取数据不一致,这就是不可重复读的问题。
  • 丢失更新
    (1)事物A修改行记录r,但未提交
    (2)事物B修改行记录r,但未提交
    (3)事物A提交
    (4)事物B提交
    InnoDB会用X锁来 解决这个问题,(2)会阻塞,因为(1)给行记录r上了X锁,(2)必须等待(1)和(3)完成才能继续。
    但在现实中,可能会有一个逻辑意义上的丢失更新问题
    看如下情况。
    (1)用户A查看账户余额
    (2)用户B查看同一个账户余额
    (3)用户A修改了账户余额,更新数据库并提交。
    (4)用户B修改了账户余额,更新数据库并提交。
    这样就会导致(3)的修改被(4)覆盖掉了。
    要解决这个问题,就必须让事物的操作变成串行化,而不是并行的操作。
    也就是用户A查看账户余额那一步必须要上X锁,同样用户B查看账户余额也要上排他锁。
    就用SELECT … FOR UPDATE来上排它锁就可以了。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值