美文网首页
MySQL基础理论一

MySQL基础理论一

作者: 开心的蛋黄派 | 来源:发表于2024-07-17 16:25 被阅读0次

1. Innodb引擎和Myisam引擎区别

  • Innodb支持事务,具有ACID(原子性、一致性、隔离性、持久性)特性,而Myisam不支持事务。
  • Innodb使用行级锁,Myisam使用表级锁。
  • Innodb支持外键,Myisam不支持外键。

2.Checkpoint
1、Checkpoint机制的核心职责是将内存中的脏页(即那些已被修改但尚未写入磁盘的数据页)刷新到磁盘上,并确保在Checkpoint点之前的所有数据更改都已安全持久化。这样设计的好处是,即使在Checkpoint点之后系统发生崩溃,也只有该点之后的更改可能会丢失,从而显著减少了数据库恢复时所需处理的数据量。

  • Fuzzy checkpoint:这种类型的Checkpoint会进行部分脏页的刷新,有助于有效循环利用Redo日志空间,减少对系统性能的影响。
  • Sharp checkpoint:通常发生在数据库关闭时,此时会将所有脏页刷回磁盘,以确保数据的完整性。
    2、Checkpoint的触发时机多种多样,具体包括:
  • 重做日志空间不足时触发。
  • 缓冲池中的脏页数量达到设定的阈值(由innodb_max_dirty_pages_pct参数控制)时触发。
  • 缓冲池空间不足,需要为新的数据页腾出空间时触发。
  • 由周期性的线程定时触发,这些线程负责清理和刷新脏页(与innodb_page_cleaners参数相关)。
  • 数据库执行关机操作时触发。
    3、可以通过执行SHOW ENGINE INNODB STATUS\G命令来查看当前Checkpoint的LSN号,这是衡量数据库恢复进度的重要指标。
    4、innodb_fast_shutdown参数设置为0时,表示在InnoDB存储引擎关闭时,需要进行全面的清理工作。这包括:
  • purge all:清除不再需要的undo日志页,以释放空间并减少恢复时的负担。
  • merge insert buffer:将插入缓冲区中的更改合并到数据文件中,确保数据的完整性。
  • flush dirty pages:将所有脏页刷新到磁盘上,以确保数据的持久化。
    这是最慢的一种关闭方式,因为它需要执行大量的磁盘I/O操作。然而,这种关闭方式在数据库重新启动时能够提供最快的恢复速度,因为所有的数据都已经是最新的,无需进行额外的恢复工作。

3.事务隔离级别
隔离级别的实现通常是通过加锁方式实现的,不同的隔离级别对应不同的锁策略和可见性规则。
MVCC(多版本并发控制)机制是通过undo日志和read view来实现的,它允许事务在读取数据时访问数据的旧版本,从而提高了并发性能并减少了锁的需求。

  • RU (读未提交)**:事务可以读取尚未提交的数据,这可能导致脏读、不可重复读和幻读。
  • RC (读已提交)**:事务只能读取已提交的数据,从而避免了脏读。不能避免幻读和不可重复读。RC模式下也存在MVCC机制,只不过每次读取都会生成新的read view。
  • RR (可重复性读)**:在此级别下,同一事务中的多次读取将看到相同的数据行,从而避免了脏读和不可重复读(这是通过MVCC机制实现的)。通过间隙锁机制避免大部分场景的幻读。
  • SERIALIZABLE (串行化执行)**:这是最高的隔离级别,通过强制事务串行执行来防止脏读、不可重复读和幻读。它确保了事务的完全隔离,但可能降低并发性能。
  • 幻读:指的是同一个查询在不同的时间产生不同的结果集时,出现幻象问题。这通常是由于其他事务插入了新的行或删除了行导致的。
  • 不可重复性读:指的是在同一事务内两次查询同一个数据集合时,可能得到不同的结果。这通常是由于其他事务更新了这些数据导致的。
    您描述的“crash recovery”(崩溃恢复)过程大体上是正确的,但可以进行一些细化和补充,以确保涵盖所有关键步骤和考虑因素。以下是一个更详细的版本:

4. Crash Recovery(崩溃恢复)

  1. 一致性恢复
    • 获取数据库最新的checkpoint点,从checkpoint点之后开始,顺序扫描redo log,应用已经提交的redo log到数据页上,以恢复崩溃前的数据库状态。
  2. 事务重做/回滚
    • 使用redo log中的事务ID(xid)来获取对应的binlog记录并判断事务记录的完整性。如果事务记录完整(即包含了所有必要的操作和xid),则进行事务重做,将事务中的操作应用到数据库上。如果事务记录不完整,则利用undo log(回滚日志)进行回滚。undo log记录了事务执行前的数据状态,可以用于将数据恢复到事务开始之前的状态。

5. DML具体流程

  1. 语法语义解析,权限验证
  2. 生成执行计划树
  3. 读取所需要数据页到内存中
  4. 在数据页修改之前生成对应的undo log
  5. 数据页修改并生成具体的redo log,binlog
  6. 事务在存储引擎层提交
  7. 返回客户端commit ok
  8. 将脏页定期刷新到磁盘上,到达数据的一致性

6. 二阶段提交
Prepare阶段:事务修改首先生成redo log,随后被标记为prepare状态。接着,事务的修改也会被记录到binlog中。
Commit阶段:在存储引擎层,事务被提交,并且redo log的记录被标记为commit状态。

7.组提交技术
目的:合并多个事务的redo log/binlog刷盘动作,以减少磁盘顺序写的次数。
背景

  • 未开启binlog时
    • Redo log的刷盘操作是影响MySQL TPS的瓶颈。
    • 为缓解此问题,MySQL采用组提交技术,将多个刷盘操作合并为一个。
  • 开启binlog时
    • 为保证Redo log和binlog的数据一致性,MySQL使用二阶段提交,并引入binlog的组提交技术,分为flush、sync、commit三个阶段。
    • 每个阶段设有队列,先进先出,且每个队列由锁保护。
    • 队列中的第一个事务成为leader,负责整队的操作,并在完成后通知其他事务。
      阶段描述
  • Flush阶段
    • 获取队列中的事务组。
    • 将redo log中prepare阶段的数据刷盘。
    • 将binlog数据写入文件系统缓存。
  • Sync阶段
    • 将binlog数据从文件系统缓冲刷入磁盘,以确保事务的持久性。
    • 为提高刷盘收益,MySQL使用binlog_group_commit_sync_delaybinlog_group_commit_sync_no_delay_count两个参数控制事务组的获取时机。
  • Commit阶段
    • 获取队列中的事务组。
    • 依次将redo log中已经prepare的事务在引擎层提交。

8. UUID作为主键的影响
UUID是无序的,因此,当使用UUID作为主键时,新插入的数据有很大的可能性会被插入到已有数据的中间位置。这种情况会导致索引树频繁地进行重新平衡和节点分裂操作。这些操作不仅会引起数据页的频繁分裂和合并,从而产生额外的I/O消耗,而且还可能增加磁盘碎片,影响数据库的整体性能。

9. B+树的优势
B+树具有以下显著优势:

  • 高效的范围查找和排序操作:B+树的所有叶子节点通过指针相互连接,形成了一个有序链表。这种结构使得范围查询、顺序扫描以及排序操作都可以在这个有序链表上高效地进行,从而大大提高了这些操作的效率。
  • 减少磁盘I/O操作:B+树的高度相对较低,因此在查找数据时所需的I/O操作次数也相应减少。此外,B+树的每个节点都可以包含多个子节点,这使得在树的相同层级下能够容纳更多的数据。这种设计不仅提高了查询效率,还使得B+树在数据库和文件系统中得到了广泛应用,特别是在需要进行大量数据读取和查询的场景中。

相关文章

  • MySQL基础理论

    MySQL基础理论 mySQL (关系型数据库管理系统) 编辑 MySQL是一个关系型数据库管理系统,由瑞典MyS...

  • MySQL基础理论

    关系型数据库和非关系型数据库特点对比 关系型数据库 非关系型数据库 Oracle典型版本 大版本经典版本号77.3...

  • OpenGL ES 基础理论

    OpenGL ES基础理论 (一) —— 缓存、帧缓存、上下文与坐标系等OpenGL ES基础理论 (二) —— ...

  • 注意

    最近出现手术失误原因来源于基础理论缺陷。加强基础理论的学习,才能减少失误!

  • 中医基础第一遍

    中医基础理论翻了第一遍~

  • 赶紧消化消化吧

    素描基础理论知识(下)

  • 德鲁克理论—《可以量化的管理学》

    第五章管理学基础理论 德鲁克的管理学理论是管理学的基础理论,他创立了现代管理学,他是基础理论学派的代表。 5.1管...

  • 《说医不二》《医本正经》《医学就会》––懒兔子

    * 最近在学习中医基础理论知识,看了懒兔子一系列的有关中医基础理论的书籍,我把关爱身体健...

  • 通知

    最近出现手术失误,分析来源于对基础理论欠缺所致! 重视基础理论的学习,才能立于不败之地!

  • 2 知识需要基础吗?(2)

    二、基础理论 (一)核心观点 基础理论和其他信念理论的区别在于,它们认为某些有限的“认识论上基本的”信念有着特殊的...

网友评论

      本文标题:MySQL基础理论一

      本文链接:https://www.haomeiwen.com/subject/gqvkhjtx.html