栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL技术内幕:InnoDB存储引擎阅读笔记(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL技术内幕:InnoDB存储引擎阅读笔记(一)

MySQL技术:InnoDB存储引擎阅读笔记(一)
  • 第一章以及第二章前半部分
    • 数据库和数据库实例的区别
    • 数据库体系结构
    • InnoDB引擎的特点
    • InnoDB体系架构
      • 线程
      • 内存

第一章以及第二章前半部分 数据库和数据库实例的区别

数据库是二进制文件,存放在二级存储器,数据库实例是程序进程,用来完成对数据库的一系列操作。

数据库体系结构


包括以下几部分:

  1. 连接池组件
  2. 管理服务和工具组件
  3. SQL接口组件
  4. 查询分析器组件
  5. 优化器
  6. 缓冲
  7. 插件式存储引擎
  8. 物理文件
InnoDB引擎的特点
  • 存储引擎是基于表的,而不是数据库
  • 行锁设计
  • 支持外键
  • 支持非锁定读(默认读操作不会产生锁)
  • InnoDB使用MVCC(多版本并发控制)来获得高并发性。实现了SQL标准的4种隔离级别
  • 使用next-key locking的策略避免幻读产生
  • 提供插入缓冲、二次写、自适应哈希索引、预读等功能
  • 可以查看MySQL官方手册了解几个不同存储引擎的区别
InnoDB体系架构

InnoDB存储引擎有多个内存块,可以认为这些内存块组成一个大的内存池,负责:

  • 维护所有进程/线程需要访问的多个内部数据结构
  • 缓存磁盘上数据,方便快速地读取,同时对磁盘文件的数据修改之前在这里缓存
  • 重做日志缓冲

后台线程的主要作用是刷新内存池中的数据,保证缓冲池中内存缓存的是最新的数据,此外将已经修改的数据文件刷新到磁盘文件,保证在数据库发生异常的情况下InnoDB能回复到正常运行状态。

线程

InnoDB是多线程的模型。所以后台有多个不同的后台线程,处理不同任务。

  • Master thread:核心的后台线程,负责将缓冲池中的数据异步刷新到磁盘,保证数据一致性。包括1脏页的刷新,2合并插入缓冲,3UNDO页的回收。
  • IO Thread:InnoDB中大量使用AIO处理IO请求。IO Thread负责这些IO请求的回调处理。
  • Purge Thread:事务被提交后,其锁使用的undo_log可能不再需要,因此需要Purge Thread来回收已经使用并分配的undo页。Purge Thread以前是在Master Thread中的,现在可以单独作为线程使用,使用 innodb_purge_threads = 1来启用,且支持多个线程。
  • Purge Cleaner Thread :将之前版本中脏页的刷新操作都放入到单独的线程中来完成,减轻Master Thread的工作,以及对于用户查询线程的阻塞。
内存

InnoDB存储引擎是基于磁盘存储的。将记录按照页的方式进行管理。
缓冲池的作用是为了缓解cpu速度和磁盘读取速度的差距。
缓冲池简单说 就是 一块内存区域。通过内存速度来弥补磁盘速度较慢对数据库性能影响。

  • 读取操作:先将磁盘的页放入缓冲池,如果下一次再读取相同的页,判断是否在缓冲池中,如果在,就是命中,不在,则从磁盘读取。
  • 修改操作:先修改在缓冲池中的页,以一定频率刷新到磁盘上。以一种Checkpoint机制刷新回到磁盘。
  • 缓冲池大小可以通过 参数 innodb_buffer_pool_size 设置。
  • 缓冲池中具体缓存的数据页,不能简单地认为只有索引页和数据页。如下图:
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号