INNODB存储引擎-MySql体系结构

# MySql体系结构

先祭出经典图


 

从上到下依次是

  1. 1. 连接层 与其他编程语言中的sql进行交互
  2. 2. 管理层 系统管理和控制工具
  3. 3. 数据库连接池 为了防止频繁的创建连接过度的损耗系统资源 而使用的一种池化技术 如c3p0 druid dbcp
  4. 4. SQL 接口 你输入的东西就传给他 并返回查询结果
  5. 5. 解析器 对你传入的内容进行解析 让存储引擎读明白
  6. 6. 查询优化器 将sql语句进行优化(一般的sql优化都是针对这步)
  7. 7. 查询缓存 第一次查询的结果 第二次在查询 直接可以在查询缓存中调用 从而节省查询时间  (在新版本已经默认关闭,原因查询命中率太低 可以通过相关sql命令启动查询缓存 后面说)
  8. 8. 插件式 存储引擎 如INNODB MyISAM (可以像插件一样自由切换存储引擎 不同的存储引擎 的 数据结构 是不一样的)

# INNODB体系架构

## 1. 关于INNODB的线程


关于它的职责我们逐代介绍

INNODB1.0.x版本之前

```c

while(loop主循环){

    i = 0

    while(i<10){

        执行操作:a

        线程休眠1s

        i++;

        //执行完成这个正好过去10s

    }

    每10秒执行

        执行操作:b

}

```
  • 工作a:

    日志刷新到磁盘 [一定会发生]

    合并插入缓冲(什么是插入缓冲后面讲)[有可能]

    刷新脏页[有可能]

    进入和后台循环[有可能]

  • 工作b:

    刷新脏页[有可能]

    合并插入缓冲[总是]

    日志刷新到磁盘[总是]

    删除无用Undo页[总是]

    刷新脏页到磁盘[总是]

其中发现工作a(1秒执行一次) 和 工作b(10秒执行一次)其中由很多雷同的工作 其实他们也有不同

关于不同点:

  1.     1. 合并插入缓冲

    工作a

        存储引擎会判断 一秒内的IO次数是不是小于

        5次 如果小于5次 会认为当前压力很小 可以进行插入缓冲操作

    工作b

        会判断钱10秒内(也就是工作a执行的时间内)IO次数是不是小于200次

        如果小于200次会认为压力小接着会进行合并插入缓冲

  1.     2. 刷新脏页

    工作a

        会让存储引擎会判断当前缓冲池中脏页的比例

        如果脏页比例大于90%(默认值 可以通过buf_get_modified_ratio_pit 进行更改)

    工作b

        总是刷新脏页到磁盘,查看缓冲池脏页比例大于70%(buf_get_modified_ratio_pit)

        刷新100个脏页到磁盘 如果脏页的比例少于70%只刷新10%的脏页到磁盘

  1.     3. 刷新日志

        两个工作一样的

看看 后台循环 backgroud loop

后台循环一般会执行下面的操作

1. 删除Undo页

2. 合并插入20个缓冲

3. 跳回主循环

这三个执行可能性 都是 [总是]

4. 不断刷新100个页知道符合条件(用户操作)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值