InnoDB存储引擎(一)

InnoDB体系结构

在这里插入图片描述

后台线程

后台线程的主要作用是刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态。
InnoDB是多线程的模型,是为了负责不同的任务。

1、Master Thread

通过线程名字就能看出来,Master Thread是一个非常核心的线程,它主要负责将缓存中的数据异步刷新到磁盘中,保证数据的一致性。master thread的线程优先级别最高。其内部几个循环(loop)组成:主循环(loop),后台循环(background loop),刷新循环(flush loop),暂停循环(suspend loop).master thread会根据数据运行的状态在loop,background loop,flush loop和suspend loop中进行切换。

2、IO Thread

InnoDB采用了很多的AIO(Async IO)来处理IO请求,IO Thread的的主要工作就是处理这些异步IO请求的回调。IO Thread主要包含四种:

  • write
  • read
  • insert buffer
  • log

可以通过innodb_read_io_threadsinnodb_write_io_threads参数进行设置read和write线程的数量
我使用SHOW VARIABLES LIKE ‘innodb_%io_threads’;命令查看了一下自己的mysql的IO thread 情况
在这里插入图片描述

3、Purge Thread

Purge Thread用于回收事务提交后不再需要的undolog页。

4、Page Cleaner Thread

其作用是将之前版本中脏页的刷新操作都放入到单独的线程中来完成。而其目的是为了减轻原MasterThread的工作及对于用户查询线程的阻塞,进一步提高InnoDB存储引擎的性能。

内存

缓冲池

InnoDB存储引擎是基于磁盘存储的,并将其中的数据按照页的方式进行管理。我们知道cpu的计算速度远远高于磁盘的读写速度,所以mysql为了提高性能,使用了缓冲池技术。
缓冲 其实就是内存重的一小块区域,内存的读写速度快于磁盘的读写速度,所以使用内存来减少磁盘速度较慢对数据库性能的影响。
查询
在数据库进行读取数据的时候,mysql数据库首先会将数据所在的页加载进内存的缓冲池中,这个操作成为将页“FIX”在缓冲池中,这样做的好处为当下次读取该页的数据时,先查找缓冲池,如果找到该页则直接从缓冲池中读取该页。从缓冲池中找到该页,成为命中。
修改
当对数据进行修改的时候,也会先在缓冲池中查找该页,然后修改其数据。这个修改实际上是发生在缓冲池当中的,并没有直接修改到数据库中,mysql数据库会已固定的频率将缓冲池中发生修改的数据刷新到数据库磁盘中。
缓冲池中缓存的数据页类型有:

  • 索引页
  • 数据页
  • undo页
  • 插入缓冲
  • 自适应哈希索引
  • 锁信息
  • 字典信息
    具体的如下图所示:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLLDa_&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值