《mysql技术内幕:innodb存储引擎》笔记

news/2024/4/25 6:58:08/文章来源:https://blog.csdn.net/zaimeiyeshicengjing/article/details/119936534
  • 任何时候Why都比What重要;
  • 不要相信任何的“神话”,学会自己思考;
  • 不要墨守成规,大部分人都知道的事情可能是错误的;
  • 不要相信网上的传言,去测试,根据自己的实践做出决定;
  • 花时间充分地思考,敢于提出质疑。

        1.MYSQL被设计为一个单进程多线程架构的数据库,MYSQL数据库实例在系统上的表现就是一个进程。

        2.Oracle中如果没有参数文件,在启动实例时会提示找不到该参数文件,数据库启动失败。而在 MYSQL数据库中,可以没有配置文件,在这种情况下, MYSQL会按照编译时的默认参数设置启动实例。

        3.从概念上来说,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。

        4.MYSQL由以下几部分组成:

  • 连接池组件
  • 管理服务和工具组件
  • SQL接口组件
  • 查询分析器组件
  • 优化器组件
  • 缓冲(Cache)组件
  • 插件式存储引擎
  • 物理文件

        5.MYSQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。

        6.存储引擎是基于表的,而不是数据库。

        7.裸设备(raw device),也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备文件。由应用程序负责对它进行读写操作。不经过文件系统的缓冲。它是不被操作系统直接管理的设备

        8.如果没有显式地在表定义时指定主键, Innodb存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。

        9.MyISAM存储引擎的另一个与众不同的地方是它的缓冲池只缓存(cache)索引文件,而不缓冲数据文件,这点和大多数的数据库都非常不同。

        10.MYISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。

        11.可以通过使用myisampack工具来进一步压缩数据文件,因为myisampack工具使用赫夫曼(Huffman)编码静态算法来压缩数据,因此使用myisampack工具压缩后的表是只读的,当然用户也可以通过myisampack来解压数据文件。

        12.NDB存储引擎是一个集群存储引擎,其结构是share nothing的集群架构,因此能提供更高的可用性。NDB的特点是数据全部放在内存中(从MYSQL5.1版本开始,可以将非索引数据放在磁盘上),因此主键查找(primary key lookups)的速度极快,并且通过添加NDB数据存储节点(Data Node)可以线性地提高数据库性能,是高可用、高性能的集群系统。

        13.关于NDB存储引擎,有一个问题值得注意,那就是NDB存储引擎的连接操作(JOIN)是在MYSQL数据库层完成的,而不是在存储引擎层完成的。

        14.Memory存储引擎默认使用哈希索引,而不是我们熟悉的B+树索引。

        15.此外有一点容易被忽视, MYSQL数据库使用 Memory存储引擎作为临时表来存放查询的中间结果集( intermediate result)。如果中间结果集大于 Memory存储引擎表的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,则 MYSQL数据库会把其转换到 MYISAM存储引擎表而存放到磁盘中。之前提到 MYISAM不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。

        16.Maria存储引擎是新开发的引擎,设计目标主要是用来取代原有MyISAM存储引擎,从而成为MYSQL的默认存储引擎。因此,它可以看做是MyISAM的后续版本。Maria存储引擎的特点是:支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事务和非事务安全的选项,以及更好的BLOB字符类型的处理性能。

        17.可以通过SHOW ENGINES语句查看当前使用的 MYSQL数据库所支持的存储引擎,也可以通过查找information_schema架构下的ENGINES表。

        18.MYSQL提供了一个非常好的用来演示MYSQL各项功能的示例数据库。

        19.连接MySQL操作是个连接进程和MySQL数据库实例进行通信,本质上是进程通信

        20.常用的进程通信方式有管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字。

        21.TCP/IP套接字方式是MySQL数据库在任何平台下都提供的连接方式。

        22.在通过TCP/IP连接到MySQL实例时, MySQL数据库会先检查一张权限视图,用来判断发起请求的客户端IP是否允许连接到MySQL实例。该视图在mysql架构下,表名为user

        23.BDB是第一个支持事务的 MySQL存储引擎。

        24.Innodb存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池。

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

        26.InnoDB存储引擎是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务。

  • Master Thread是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插人缓冲(INSERT BUFFER)、UNDO页的回收等。
  • 在Innodb存储引擎中大量使用了AIO( Async IO)来处理写IO请求,这样可以极大提高数据库的性能。而IO Thread的工作主要是负责这些IO请求的回调(call back)处理。分别是write、read、insert buffer和log IO thread。
  • 事务被提交后,其所使用的undolog可能不再需要,因此需要Purge Thread来回收已经使用并分配的undo页。
  • Page Cleaner Thread是在 Innodb1.2x版本中引入的。其作用是将之前版本中脏页的刷新操作都放入到单独的线程中来完成。

        27.在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,这个过程称为将页“FIX”在缓冲池中。下一次再读相同的页时,若在缓冲池中,称该页在缓冲池中被命中,直接读取该页。

        28.对于数据库中页的修改操作,则首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上。Checkpoint

        29.具体来看,缓冲池中缓存的数据页类型有:索引页、数据页、undo页、插入缓冲(insert buffer)、自适应哈希索引(adaptive hash index)、Innodb存储的锁信息(lock info)、数据字典信息(data dictionary)等。

        30.从InnoDB 1.0.x版本开始,允许有多个缓冲池实例。每个页根据哈希值平均分配到不同缓冲池实例中。

        31.从MySQL56版本开始,还可以通过information_schema架构下的表INNODB_BUFFER_POOL_STATS来观察缓冲的状态。

        32.在InnoDB存储引擎中,缓冲池中页的大小默认为16KB,同样使用LRU算法对缓冲池进行管理。LRU列表中还加入了midpoint位置。新读取到的页放入到LRU列表的midpoint位置。这个算法称为midpoint insertion strategy。在默认配置下,该位置在LRU列表长度的5/8处。

        33.在Innodb存储引擎中,把midpoint之后的列表称为old列表,之前的列表称为new列表。可以简单地理解为new列表中的页都是最为活跃的热点数据。

        34.InnoDB存储引擎引入了另一个参数来进一步管理LRU列表这个参数是innodb_old_blocks_time,用于表示页读取到mid位置后需要等待多久才会被加人到LRU列表的热端。

        35.Buffer pool hit rate,表示缓冲池的命中率,通常该值不应该小于95%。若发生Buffer pool hit rate的值小于95%这种情况,用户需要观察是否是由于全表扫描引起的LRU列表被污染的问题。

        36.InnoDB存储引擎从1.0.x版本开始支持压缩页的功能,即将原本16KB的页压缩为1KB、2KB、4KB和8KB。对于非16KB的页,是通过unzip_LRU列表进行管理的。

        37.首先,在unzip_LRU列表中对不同压缩页大小的页进行分别管理。其次,通过伙伴算法进行内存的分配。

        38.在LRU列表中的页被修改后,称该页为脏页(dirty page),即缓冲池中的页和磁盘上的页的数据产生了不一致。这时数据库会通过CHECKPOINT机制将脏页刷新回磁盘,而Flush列表中的页即为脏页列表。需要注意的是,脏页既存在于LRU列表中,也存在于Flush列表中。LRU列表用来管理缓冲池中页的可用性, Flush列表用来管理将页刷新回磁盘,二者互不影响。

        39.InnoDB存储引擎的内存区域除了有缓冲池外,还有重做日志缓冲(redo log buffer)。 Innodb存储引擎首先将重做日志信息先放入到这个缓冲区,然后按一定频率将其刷新到重做日志文件。

        40.下列三种情况下会将重做日志缓冲中的内容刷新到外部磁盘的重做日志文件中。

  • Master Thread每一秒将重做日志缓冲刷新到重做日志文件;
  • 每个事务提交时会将重做日志缓冲刷新到重做日志文件;
  • 当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件。

        41.在InnoDB存储引擎中,对内存的管理是通过一种称为内存堆(heap)的方式进行的。在对一些数据结构本身的内存进行分配时,需要从额外的内存池中进行申请,当该区域的内存不够时,会从缓冲池中进行申请。

        42.为了避免发生数据丢失的问题,当前事务数据库系统普遍都采用了Write Ahead Log策略,即当事务提交时,先写重做日志,再修改页。当由于发生宕机而导致数据丢失时,通过重做日志来完成数据的恢复。这也是事务ACID中D(Durability持久性)的要求。

        

  1. 即使某个事务还没有提交, INNODB存储引擎仍然每秒会将重做日志缓冲中的内容刷新到重做日志文件。这一点是必须要知道的,因为这可以很好地解释为什么再大的事务提交(commit)的时间也是很短的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_71628.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch也能“分库分表“,rollover实现自动分索引

一、自动创建新索引的方法 MySQL的分库分表大家是非常熟悉的,在Elasticserach中有存在类似的场景需求。为了不让单个索引太过于庞大,从而引发性能变差等问题,我们常常有根据索引大小、时间等创建新索引的需求,解决方案一般有两个…

虚拟 DOM 详解

什么是虚拟 dom? 虚拟 dom 本质上就是一个普通的 JS 对象,用于描述视图的界面结构 在vue中,每个组件都有一个render函数,每个render函数都会返回一个虚拟 dom 树,这也就意味着每个组件都对应一棵虚拟 DOM 树 查看虚拟…

C#中多态、抽象类、虚方法

多态、重装、重写 •多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。抽象类、虚函数、接口三种方法实现的可以是多态性。•重载(overload):对象中同名函数&…

JSP 质量管理系统myeclipse定制开发sqlserver数据库网页模式java编程jdbc

一、源码特点 JSP 质量管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发,数据库为SQLServer2008&#xff0c…

二、最基本的vuex的使用

二、最基本的vuex的使用: 学习任何技术,先找到没有用这个技术时,给我们带来了什么麻烦 而这个新技术是怎么帮我们解决这些问题的。 理解方式: state:装数据的一个对象 mutations:装方法的一个对象&#…

hydra常见端口服务穷举

目录 工具介绍 参数说明 官方示例 官方字典 ssh爆破 ftp爆破 mysql爆破 smb爆破 rdb爆破 http爆破 redis爆破 工具介绍 hydra 是一个支持众多协议的爆破工具,已经集成到KaliLinux中,直接在终端打开即可 参数说明 -l : 指定破…

mybatis狂神(附自学过程中疑问解决)

首先先附上mybatis的官方文本链接mybatis – MyBatis 3 | 简介一、Mybatis介绍MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来…

RK3288 GPIO记录

1、引脚对应的GPIO 编号第一种 使用/sys/kernel/debug/gpio查询所有gpio引脚的基数第二种 cat /sys/class/gpio/gpiochip248/label对应的label就是GPIO引脚,例如下图GPIO8对应的基数就是2482、计算编号编号 基数 PIN脚如GPIO8的基数是248, GPIO8_A6的编…

django项目实战三(django+bootstrap实现增删改查)进阶分页

目录 一、分页 1、修改case_list.html页面 2、修改views.py的case_list方法(分页未封装) 二、分页封装 1、新建类Pagination 2、修改views.py的case_list方法 三、再优化,实现搜索分页qing情况 四、优化其他查询页面实现分页和查询 五…

MySQL —— 内外连接

目录 表的内外连接 一、内连接 二、外连接 1. 左外连接 2. 右外连接 表的内外连接 表的连接分为内连和外连 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面博客中的查询都是内连接,也是在开发过程中使用的最多…

Java面试题--熔断和降级的区别

熔断和降级都是系统自我保护的一种机制,但二者又有所不同,它们的区别主要体现在以下几点: 概念不同 触发条件不同 归属关系不同 1.概念不同 1.1熔断概念 “熔断”一词早期来自股票市场。熔断(Circuit Breaker)也…

JavaWab开发的总括以及HTML知识

一、Web开发的总括在这里我来给大家介绍一下Wab开发需要配合哪些前后端的对应语言:首先是Java(Java通常的工作):Wab开发android开发大数据开发另外,Wab开发想要学好就需要配合之前博客中的内容,如:多线程/IO/网络/数据结构/数据库......这里建议学懂前面的内容再往下走.JavaWab…

Python采集双色球数据,做数据分析,让我自己实现自己的富豪梦

来唠点嗑? 咳咳,最近是咋的了,某站掀起了一股双色球热潮?一般我自己的账号上,是很少看到关于python这些内容的,都是小姐姐和热梗,或者其他搞笑视频 由于💴的吸引力…手不自觉的就点…

2023年TS4 入门笔记【慕课网imooc】【Vue3+React18 + TS4考勤系统】

目录 安装ts 基础 类型声明和变量声明 类型注解和类型判断 类型分类与联合类型与交叉类型​编辑 never类型与any类型与unknown类型 类型断言与非空断言 数组类型和元祖类型 对象类型与索引签名 函数类型与void类型 函数重载与可调用注解 枚举类型与const枚举 进阶…

2023年美国大学生数学建模A题:受干旱影响的植物群落建模详解+模型代码(二)

前言 资源放CSDN上面过不了审核,都快结束了都没过审真的麻了,订阅专栏的同学直接加我微信直接发你。我只打造优质专栏。专注建模四年,博主参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使…

【2023-02-20】JS逆向之翼支付

提示:文章仅供参考,禁止用于非法途径 文章目录前言分析总结前言 真的好久没更了…… 提示:以下是本篇文章正文内容,下面案例可供参考 分析 进到网页,加载两个接口 applyLoginFactor 接口返回一个RSA公钥&#xff0…

工业4.0和工业物联网如何协同工作

虽然许多公司已经接受了工业物联网,但他们现在必须接受工业4.0对数据驱动的数字化转型的承诺。随着制造业、能源、公用事业和供应链应用迅速采用工业物联网(IIoT),这些行业的新现实正在形成。工业物联网提供了企业管理数千个活动部件所需的数据类型&…

【部署】项目正式服部署更新

chihiro-notes 千寻简笔记 v0.1 内测版 📔 笔记介绍 大家好,千寻简笔记是一套全部开源的企业开发问题记录,毫无保留给个人及企业免费使用,我是作者星辰,笔记内容整理并发布,内容有误请指出,笔…

第一章 初识 Spring Security

第一章 初识 Spring Security 1、权限管理 权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现了对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资…

计算机网络学习笔记02

学习视频:https://www.bilibili.com/video/BV1c4411d7jb/?p7&spm_id_frompageDriver&vd_source75dce036dc8244310435eaf03de4e330 一、计算机网络体系结构 1 常见的计算机网络体系结构 OSI体系结构和TCP/IP体系结构 TCP/IP体系结构的网络接口层并没有规…