重做日志缓存

  • 重做日志缓冲(redo log buffer)
    • 重做日志缓冲同样也在innodb内存区。innodb存储引擎会将重做日志信息先放到重做日志缓冲区,然后以一定的频率刷新到重做日志中。
    • 重做日志缓冲不必太大。因为一般每一秒都会刷新到重做日志文件中。默认为8MB,该值可以由innodb_log_buffer_size控制
    • 重做日志缓冲刷新的三种情况。1.master thread每一秒都会刷新一次。 2.每次事务提交时都会刷新一次。 3.重做日志缓冲池剩余空间小于1/2时,会刷新。

额外的内存池

  • 额外的内存池
    • innodb存储引擎采用一种称为内存堆的方式进行。在给一些数据结构分配内存时,会从额外的内存池中申请,但该内存中的内存不足时,会从缓冲池中申请。

SQL语句的分类

  • 数据库查询语言DQL
    -各种查询
  • 数据操纵语言DML
    • 增删改
  • 数据定义语言DDL
    • 用来创建数据库中的各种对象,如表,视图,索引等
  • 数据控制语言DCL
    • 授权,回滚数据库等

checkpoint技术

  • checkpoint技术的目的
    • 缩短数据库恢复时间
    • 缓冲池不够用时,将脏页刷新到磁盘
    • 重做日志不可用时,刷新脏页
  • 两种checkpoint
    • sharp checkpoint(默认);在数据库关闭时将所有脏页刷新到磁盘,配置参数为innodb_fast-shutdown=1
    • fuzzy checkpoint发生的几种情况
      • master thread checkpoint
      • FLUSH_LRU_LIST checkpoint
      • Async/Sync Flush checkpoint
      • dirty page too much checkpoint

master thread 的工作方式

  • 1.0.x之前的版本
    • master thread既有最高的线程优先级。内部包括多个循环。有主循环,后台循环,刷新循环,暂停循环。master thread会根据数据库的运行状态在这几个循环之间切换
      • 主循环以一定的频率执行。每秒执行一次:1.将日志缓冲刷新到磁盘,即使事务还没有提交 2.可能会合并插入缓冲 3.最多刷新100个缓冲池中的脏页到磁盘。 4.没有用户执行任何操作时切换到后台循环
      • 每10秒执行一次:1.刷新100个脏页到磁盘(可能)。 2。合并至多20个插入缓冲(总是) 3.将日志缓冲刷新到磁盘(总是) 4.删除无用的undo页(总是) 5.刷新100个或者10个脏页到磁盘(总是)
      • 为了解决innodb硬编码规定的每秒刷新100个脏页合并20个插入缓冲的问题。可以使用innodb_io_capacity来控制刷新到磁盘的脏页的百分比。参数innodb_max_dirty_pages_pct调整脏页所占的比例。
    • background loop
      • 刷新无用的undo页(总是)
      • 合并20个插入缓冲(总是)
      • 跳回到主循环(总是)

索引

  • 索引是一种特殊的文件,它包含着对数据表里所有记录的引用指针。
  • 索引分为聚簇索引和非聚簇索引。聚簇索引是按数据存放的物理顺序为顺序的,而非聚簇索引则不是。聚簇索引能提高多行数据的检索速度,而非聚簇索引对单行数据检索更有效
  • MySQL索引的分类
    • 普通索引,没有任何限制
    • 唯一索引,索引列的值必须唯一,但可以为空。
    • 全文索引,仅可用于myisam表
    • 单列索引,多列索引
    • 组合索引

innodb的关键特性

插入缓存
  • 插入缓存
    • 为了解决非聚集索引页的离散性访问会使性能下降。在插入时,先判断该页是否在缓冲池中,如果在则之间插入。否则,加入插入缓存,再以一定的频率进行插入合并操作。
    • 插入缓存的使用条件
      • 索引是辅助索引
      • 索引不是唯一的
两次写
  • 两次写
    • 为了提高可靠性,会牺牲一点性能
    • 为了避免部分写失效时,无法使用重做日志缓存恢复数据(因为重做日志缓存记录的是对页的修改,当页被破坏后,将无法用其恢复数据。)
    • 基本原理:1.当刷新缓冲区的脏页时,不直接写到磁盘。而是送到两次写缓冲区。2.从两次写缓冲区分两次写入共享表空间(每次写1MB)。3.最后将两次写缓冲区中的数据写入磁盘。
    • 原理图ATNJL8.md.png
自适应哈希索引
  • 自适应哈希索引
    • 为了提高查找的效率,innodb会自动的为某些热点页建立哈希索引。
    • 访问模式:是指查询条件一样
    • 建立哈希索引的条件
      • 该模式访问了100次
      • 页通过该模式访问了N次,其中N=页记录*1/16
异步IO
  • 异步IO
    • 为了提高磁盘操作的性能,采用了异步的IO,即AIO
刷新邻接页
  • 刷新邻接页
    • 当innodb存储引擎在刷新脏页到磁盘时,会检测该页所在的区是否还有脏页需要刷新到磁盘,有的话则一并刷新到磁盘。对应传统的机械硬盘性能提示较大。