首页 > 其他分享 >五~九(完结)

五~九(完结)

时间:2023-10-08 19:46:38浏览次数:32  
标签:事务 读取 lock 备份 完结 锁定 数据库

五、索引和算法

六、锁

lock和latch

latch一般称为闩锁(轻量级的锁),因为其要求锁定的时间必须非常短。若持续的时间长,则应用的性能会非常差。在InnoDB引擎中,latch又可以分为 mutex(互斥量)和 rwlock(读写锁)。其目的是用来保证并发线程操作临界资源的正确性,并且通常没有死锁检测的机制。

lock的对象是事务,用来锁定的是数据库中的对象,如表、页、行。并且一般lock的对象仅在事务commit或rollback后进行释放(不同事务隔离级别释放的时间可能不同),此外,lock正如在大多数数据库中一样,是有死锁机制的。

lock latch
对象 事务 线程
保护 数据库内容 内存数据结构
持续时间 整个事务过程 临界资源
模式 行锁、表锁、意向锁 读写锁、互斥量
死锁 通过waits-for graph、time out等机制进行死锁检测与处理 无死锁检测与处理机制。仅通过应用程序加锁的顺序(lock leveling)保证无死锁的情况发生
存在于 Lock Manager的哈希表中 每个数据结构的对象中

InnoDB支持一种额外的锁方式,称之为意向锁。将锁定的对象分为多个层次,意向锁意味着希望在更细力度上进行加锁。

如果将上锁的对象看成一棵树,那么对最下层的对象上锁,首先需要对粗粒度的对象上锁。

一致性非锁定读:

在MySQL的InnoDB存储引擎中,一致性非锁定读(Consistent Non-Locking Read)是一种读取数据的方式,它不会对读取的数据加锁,因此不会阻止其他事务对这些数据进行修改。这种读取方式是通过多版本并发控制(MVCC,Multi-Version Concurrency Control)实现的。

在一致性非锁定读中,InnoDB会读取数据的最新提交版本,即使有其他事务正在修改这些数据。这样,读取操作不会等待其他事务完成,也不会阻止其他事务对数据进行修改。读取操作只会看到在读取时已经提交的数据版本,不会看到未提交的数据版本。

一致性非锁定读的优点在于它提高了并发性能,允许多个事务同时对数据进行读取和修改,而不会产生冲突。然而,由于读取操作不会看到未提交的数据版本,因此可能会读取到不一致的数据。如果需要确保读取到一致的数据,可以使用一致性锁定读(Consistent Locking Read)或者串行化(Serializable)隔离级别。

总的来说,一致性非锁定读适用于读取频繁但修改较少的情况,可以提高并发性能和吞吐量。但在需要确保数据一致性的情况下,应该使用其他读取方式或者适当的隔离级别。

一致性锁定读:显式地对数据库读取操作进行加锁以保证数据逻辑的一致性,而这要求数据库支持加锁语句,即使是对于SELECT的只读操作。InnoDB存储引擎对于SELECT语句支持两种一致性的锁定读操作:

  • select ... form update
    • 对读取的行记录加一个X锁,其他事务不能对已锁定的行加上任何锁
  • select ... lock in share mode
    • 对读取的行记录加一个S锁,其他事务可以向被锁定的行加S锁,但是如果加X锁,则会被阻塞

行锁的三种算法

  • record lock:单个行记录上的锁
  • gap lock:间隙锁,锁定一个范围,但不包含记录本身
  • next key lock:gap lock + record lock,锁定一个范围,并且锁定记录本身
    • 例如一个索引有 10,11,13,20 四个值,那么该索引可能被 next key locking 的区间为:

(-无穷,10 ]

(10,11)

(11,13]

(13,20]

(20,+无穷)

七、事务

事务分类:

  • 扁平事务:最简单的一种,使用最频繁。
    • 所有操作都处于同一层次,其间的操作是原子的
    • 主要限制是不能提交或者回滚事务的某一部分,或者分几个步骤提交
  • 带有保存点的扁平事务
    • 支持扁平事务操作外,还允许事务执行过程中回滚到同一事务中较早的一个状态。保存点(savepoint)用来统治系统应该记住事务当前的状态,以便发生错误时,事务能回到保存点当时的状态
  • 链事务
    • 可视为保存点事务的一种变种。带有保存点的扁平事务,当发生系统崩溃时,所有保存点都将小时,因为此保存点是易失的,而非持久的。
    • 思想:在提交一个事务时,释放不需要的数据对象,将必要的处理上下文隐式地传给下一个要开始的事务。注意,提交事务操作和开始下一个事务操作将合并为一个原子操作。这意味着下一个事务将看到上一个事务的结果。
    • 区别:带有保存点的扁平事务可以回滚到任意正确的保存点,而链事务的回滚仅限于当前事务,即只能回滚到最近一个的保存点。
  • 嵌套事务
    • 是一个层次结构框架。由一个顶层事务控制着各个层次的事务。顶层事务之下嵌套的事务被称为子事务,其控制每一个局部的变换。
    • 实际的工作交由叶子节点来完成,只有叶子节点的事务才能访问数据库、发送消息、获取其他类型的资源。而高层的事务仅负责逻辑控制,决定何时调用相关的子事务。
  • 分布式事务
    • 在一个分布式环境下运行得扁平事务,因此需要根据数据所在位置访问网络中的不同节点

八、备份和恢复

备份方法的不同分类:

  • 热备份(在线备份)
    • 在数据库运行中直接备份
  • 冷备份(离线备份)
    • 数据库停止的情况下
  • 温备份
    • 在数据库运行中进行,但会对数据库操作有营销

按照备份后文件的内容分类:

  • 逻辑备份
    • 文件内容可读,一般是文本文件,内容由一条条SQL语句或者是表内实际数据组成
  • 裸文件备份
    • 物理文件

按照备份数据库的内容分类:

  • 完全备份
  • 增量备份
  • 日志备份

九、性能调优

  • 选择合适的CPU
  • 内存的重要性
  • 硬盘对数据库性能的影响
  • 合理地设置RAID
  • 操作系统的选择也很重要
  • 不同文件系统对数据库的影响
  • 选择合适的基准测试工具

标签:事务,读取,lock,备份,完结,锁定,数据库
From: https://www.cnblogs.com/lhxBlogs/p/17749972.html

相关文章

  • ChatGPT入门实战课 AI时代更具竞争力的开发者(完结)
    点击下载:ChatGPT入门实战课AI时代更具竞争力的开发者(完结)提取码:bx1lFlink是一款基于流处置的散布式计算框架,能够完成高性能、低延迟的实时数据处置和剖析。下面是一个示例代码,用于展现如何运用Flink从零开端构建实时风控系统。首先,我们需求在pom.xml文件中添加Flink的依......
  • [完结22章]2023版全新高质量商业级小程序全栈项目实战
    点击下载——[完结22章]2023版全新高质量商业级小程序全栈项目实战  提取码:ztnk[完结22章]2023版全新高质量商业级小程序全栈项目实战,又名:Vue3+Uni+Node+MySQL从零实现跨端小程序的全栈应用!在现代社会中,移动互联网的发展必将为人们的生活产生重要影响。微信小程序全栈开发是......
  • Python多领域场景实战课 快速成为多面手[完结22章]
    点击下载——Python多领域场景实战课快速成为多面手[完结22章] 提取码:xi9j [完结22章]Python多领域场景实战课快速成为多面手,Python在各个编程语言中比较适合新手学习,Python解释器易于扩展,可以使用C、C++或其他可以通过C调用的语言扩展新的功能和数据类型。Python也可用于可定......
  • [完结22章]Python多领域场景实战课 快速成为多面手
    点击下载——[完结22章]Python多领域场景实战课快速成为多面手  提取码:ith6Python多领域场景实战课快速成为多面手2023,完结22章,理论+实战相结合,融合5大领域(如办公自动化、数据分析、爬虫、人工智能、Web开发)Python多领域场景实战课快速成为多面手,Python是一种动态的、高级......
  • JAVA SE 完结
    JAVASE基本的Dos命令#盘符切换 D:#查看当前目录下的所有文件dir#切换目录(/d换盘符写在cd后)cd文件夹#返回上一级cd..#清理屏幕cls#打开应用calc计算机,notepad记事本,mspaint画图#ping命令可以获得IP地址延迟一般用来测试网络,是否正常pingwww.baidu.com......
  • 运算符完结补充
    运算符完结逻辑运算符&&||!andor反义&&:你我都对才有true||:你我有一个对就是true!:将运算结果反转true变falsefalse变true备注:用逻辑运算符进行运算是遵从短路原则,假设使用a&&b,a一旦不成立b中的内容也不会被执行,如果我们给c赋值为5,在a不成立的条件......
  • 【python自动化】pytest系列(完结)
    pytest系列文章一共有四篇,本文为第四篇完结篇。应各位小伙伴留言,希望可以把这几篇pytest文章进行汇总。公众号:梦无矶的测试开发之路,回复pytest可以领取对应汇总资料本章知识点文章目录Pytest高阶用法(1)参数化(2)pytest.ini①marks标记②addopts配置(3)pytest.mark.相关1、直接跳过执......
  • [完结13章]SpringBoot打造企业级一体化SaaS系统
    点击下载——[完结13章]SpringBoot打造企业级一体化SaaS系统提取码:p8kmSpringBoot打造企业级一体化SaaS系统教程,已完结13章下载,附源码!1、什么是saas系统?SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,......
  • [完结25章]Java七大热门技术框架源码解析
    点击下载:[完结25章]Java七大热门技术框架源码解析提取码:ygnz《Java七大热门技术框架源码解析》已完结25章,任何框架都是有助于更快更好地开发软件解决方案的工具之一。框架的基本原理不必重新发明轮子。框架使开发人员的工作变得更轻松,并帮助他们专注于业务逻辑,而不必担心通用的......
  • [完结8章]程序员的 AI 启蒙课,ChatGPT 辅助开发 Vue3 项目
    点击下载:程序员的AI启蒙课:ChatGPT让你1人顶3人提取码:8zwd Vue是一款用于构建用户界面的JavaScript框,它基于标准的HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,用以帮助开发者高效地开发用户界面。目前,Vue3.0正式版也发布了两年的时间,越......