mysql innodb体系结构--初级
MySQL innodb体系结构
<!--more-->
2015年9月20日星期日 20:00—20:40,我观看了博森瑞的关于mysql体系结构网络公开课,这次课程简单介绍了innodb存储引擎的一些内部结构,只是抛砖引玉,给大家开了头,更多的内容还需要再学习,这些显然是不够的。
期待博森瑞的下次网络公开课。
上图中的parse是查询分析器组件。
Enterprise management services是管理服务和工具组件
mysql的体系结构包括server层和存储层。其中server 层包含连接层和sql层。
下面来看客户发出一条select语句经过的路径。
1、一条sql先进内存池query cache(在oracle先进library cache,library cache里面会缓存这条sql语句的执行计划)。在mysql query cache中,先判断这个sql语句在query cache里面有没有缓存。如果有缓存,那么还要判断这条sql有没有权限访问数据库(mysql.user表判断,即用户名密码是否对等),如果有权限,直接把内存中的结果返回给用户。
2、如果query cache没有这个sql。那么这个sql就进入解析器(因为计算机只认识二进制语言,而不认识select这种文本语言,所以需要mysql的解析器把sql文本语句解析成计算机认识的二进制语言,即解析数)。
3、然后这条sql进入预处理环节,用来处理解析器没有把sql解析好的,预处理再把这样的sql重新处理一下。
4、然后sql进入查询优化器,在此环节对sql语句中的join,排序进行优化。
5、然后通过程序的api接口调用这条sql。
6、最后sql进入存储层,通过存储引擎到最底层去提取数据,然后把数据返回给用户。
innodb包含innodb buffer pool,buffer pool是决定数据库性能的。
purge thread是用来管理undo数据的保留时间的(oracle是默认保存undo 15分钟)。
master thead 用来管理子线程,提醒子进程什么时候去工作。
oracle花费74亿美元收购Mysql,足以说明mysql的价值。
innodb log buffer就是redo log buffer。
一条sql先到内存中找数据,如果内存中没有数据,就需要到磁盘上去找数据。在磁盘上找到数据后,再把数据缓存到内存中,以便下次直接从内存中读取数据。
数据真正存储在页中,当sql找到数据后,再把页中数据放到内存中,页中的数据进入内存中后,就叫 buffer了。简单的说,数据在磁盘中叫page页,把页中数据放到内存中,就叫buffer了。内存是由一个一个buffer组成的。
内存中的buffer是由链(即chain)来管理
内存命中率:我们希望内存缓冲更多的热数据。
innodb通过逻辑存储单元(即段、区、页)来存储数据。
一个表就是一个段。
一个大段可以由4个区组成,一个区又是由64个连续的页组成,一个页是16k。
一张表就是一个段。所以一个区大概是1M(64*16k=1M),一个段大概是4M。
页是Mysql innodb存储引擎 i/o的最小单位。
页里包含页头,页中,页尾。
页头包含事务信息,指针信息。
把页信息映射到内存的buffer中。一个buffer包含前后指针的信息,能够通过后一个指针去找下一个buffer。所以我们就可以根据链表结构把buffer串起来。
innodb是双向链表(即buffer前后都有指针),把buffer串起来。
buffer有三种状态:
a、 free,从来没有被用过的buffer;
b、 clean,干净的,磁盘上的数据和内存buffer中的数据是完全一样的;
c、 dirty,内存buffer中的数据和磁盘数据不一致,即内存buffer中的数据还没来得及刷到磁盘中。
mysql的零碎知识点太多了,但是入门简单。
当然,链也有三种状态:
a、 free list(针对free buffer来说),这种链会把从来没有使用过的buffer给串起来(不过,对于生产中跑起来的数据库,基本不存在free list了);
b、 lru list(针对clean buffer来说的),该链是用来串和磁盘数据一样的buffer。在lru list会把最近最少使用的放在lru链表中。我们知道,有的数据经常被访问,有的数据是很少被访问。那么,对于很少被访问的buffer可以被新进来的buffer数据覆盖掉。所以,可以用lru list把clean buffer串起来。在lru list上的是clean buffer,这些buffer可以被新buffer数据覆盖,以循环使用内存空间。
c、 flush list (针对dirty buffer来说的), flush list上放的是脏块,用来告诉哪些buffer该刷新到磁盘上了。write thread会到flush list上去找哪些buffer该刷到磁盘上了。flush list也分为最近最少被脏的。数据库会把最近最少使用的脏数据挂到flush list上,等数据库不繁忙的时候,write thread就会把flush list上的脏块写到磁盘上。
以上是三种buffer状态和三种链表状态。
innodb三大特性也在内存池中。
不要小看mysql数据库。
mysql是单进程多线程的数据库。
段、区、页(oracle是块)。
附件列表
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-1805592/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28916011/viewspace-1805592/
mysql innodb体系结构--初级相关推荐
- mysql innodb架构_Mysql Innodb体系结构
Innodb体系结构 Innodb存储引擎主要包括内存池以及后台线程. 内存池:多个内存块组成一个内存池,主要维护进程/线程的内部数据.缓存磁盘数据,修改文件前先修改内存.redo log 后台线程: ...
- mysql dba系统学习(12)mysql的数据文件 mysql dba系统学习(13)mysql的体系结构
mysql的数据文件 一,系统参数datadir 在MySQL 中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名字命名的文件夹,用来存放该数据库中各种表数据文件 datadir指定 ...
- 面试题:一条 sql 语句是如何经过 MySQL 的体系结构的?
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:有了这 4 款工具,老板再也不怕我写烂SQL了个人原创+1博客:点击前往,查看更多 作者:李福春 来源:http ...
- mysql怎么刷题_面试刷题mysql1:一条sql语句是如何经过mysql的体系结构的?
{port} -u${user} -p ,输入密码. 使用连接器连接服务端: 连接成功之后,权限修改不会影响当前连接,连接的有效期默认是8个小时: 连接之后,执行过程中使用内存会持续增加,应该定时重置 ...
- linux sql命令行查询语句不要换行_面试刷题mysql1:一条sql语句是如何经过mysql的体系结构的?...
mysql执行一条sql查询语句背后发生了什么呢? 我是李福春,我在准备面试,今天的题目是: mysql的体系结构是怎样的?一条sql语句在mysql的体系结构中经历了什么? 答: mysql体系结构 ...
- MySQL InnoDB 存储引擎原理浅析
前言 本文主要基于MySQL 5.6以后版本编写,多数知识来着书籍<MySQL技术内幕++InnoDB存储引擎>,本文章仅记录个人认为比较重要的部分,有兴趣的可以花点时间读原书. 一.My ...
- wdcp php5.3 pdo_mysql,WDCP常用组件(memcache、mysqli、PDO_MYSQL、mysql innodb、libmcrypt、php zip)的安装方法...
一般来说WDCP安装之后就可以正常使用了,不过对于一些朋友来说还无法满足,现在收集了有关WDCP常用组件,比如memcache.mysqli.PDO_MYSQL.mysql innodb.libmcr ...
- mysql回表_到底什么情况下mysql innodb会发生回表操作?
谢邀 MySQL innodb的主键索引是簇集索引,也就是索引的叶子节点存的是整个单条记录的所有字段值,不是主键索引的就是非簇集索引,非簇集索引的叶子节点存的是主键字段的值.回表是什么意思?就是你执行 ...
- MySQL/InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁概念的理解
MySQL/InnoDB的加锁,一直是一个面试中常问的话题.例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?我在工作过程中,也会经常用到,乐观锁,排它锁,等.于是今天就对 ...
最新文章
- 密码太多记不住?SSO帮你轻松访问VDI及外部资源
- 如何解一元一次方程视频_七年级数学教学视频-小邵课堂
- go 同一个参数传入不同struct_struct的基本介绍-go篇
- 【python】openstack管理小工具(增删查改,批量ping)
- 分享一个好用的函数吧,将js中的对象转成url参数
- chromebook刷机_如何为不支持Chrome操作系统的网站欺骗Chromebook用户代理
- 静茹docker容器的几种方法_1-容器和docker基础知识
- Spring容器创建流程(3)对beanFactory设置
- java怎么看提示错误,Mabatis错误提示Parameter index out of range的处理方法
- Java虚拟机知识点【栈帧】
- ImportError: No module named MySQLdb
- java语言没有保留结构和联合,java选择题判断题题库.doc
- 云网融合:中国电信国际公司的海外野心
- Handler消息机制详解,另对于MessageQueue阻塞线程的详解
- Kali-linux-2020 sqli-labs环境配置(含网上最全Less-29在Kali上的配置)
- Excel 文件的扩展名 .xls 与 .xlsx 的区别
- 企业内部即时通讯系统项目总结
- 思维导图怎么画?简单易学的思维导图绘制教程
- 决策树模型——鸢尾花分类
- X的N次方求解——pow(x,n)实现