![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL 技术内幕与InnoDB存储引擎
文章平均质量分 66
MySQL 技术内幕 InnoDB读书报告
QunKrys
这个作者很懒,什么都没留下…
展开
-
InnoDB 存储引擎(10)——一致性非锁定读
一致性非锁定读含义是指InnoDB 存储引擎通过 行多版本控制 的方式读取当前执行时间数据库中行的数据 如果读取的行正在执行delete或update 操作,此时读取操作不会因此去等待行上的锁的释放 相反的,InnoDB 存储引擎会去读取行的一个快照数据 快照数据是指该行的之前版本的数据,该实现是通过undo段来完成 undo 是用来在事务中回滚数据,因此快照数据本身是没有额外的开销;另外快照是历史数据,是不可能有事务会对历史数据进行修改的 下图即为一致性非锁定读,之所以有该名称,因为不原创 2021-11-13 20:28:03 · 705 阅读 · 0 评论 -
InnoDB 存储引擎(9)——InnoDB 逻辑存储结构
InnDB 逻辑存储结构图示组成 表空间(tablespace) 段(segment) 区(Extent) 页(Page) 行(Row) 表空间InnoDB 存储引擎逻辑存储结构的最高层,所有的数据都存放在表空间中 默认情况下,InnoDB 有一个共享表空间ibdata1,即所有数据(包括表数据)都存放在这个表空间 如果用户设置了参数innodb_file_per_table,则每张表内的数据可以单独放在一个表空间 注:启用了独立表空间,每张表的独立表空间内存放的只.原创 2021-11-13 18:41:39 · 524 阅读 · 0 评论 -
InnoDB 存储引擎(8)——InnoDB 存储引擎文件
1. 表空间文件InnoDB 采用将存储的数据按表空间进行存放的设计 在默认配置下,会有一个初始大小为10MB,名为ibdata1的文件 该文件就是默认的表空间文件 用户可以通过多个文件组成一个表空间所有基于InnoDB 存储引擎的表的数据都会记录到该共享表空间(innodb_data_file_path指向的表空间);innodb_file_per_table 参数用于指定独立表空间。 独立表空间存储的是该表的数据、索引和插入缓存BITMAP 等信息 其余信息存放在共享表空间,例如原创 2021-11-13 16:22:47 · 1231 阅读 · 0 评论 -
InnoDB 存储引擎(7)——日志文件
1. 错误日志错误日志文件对mysql 的启动、运行、关闭过程进行了记录 不仅记录了所有错误信息,也记录了一些警告信息或正确的信息 如果MySQL 数据库不能正常启动时,第一个必须查找的文件就是该文件2. 慢查询日志记录执行超过设定阈值的SQL 语句 能够定位存在问题的SQL 语句,从而进行SQL 语句层面的优化3. 查询日志记录所有对MySQL 数据库请求的信息(无论是否得到了正确的执行)4. 二进制日志(binary log,BINLOG)记录对MySQL 数据库执行更改的.原创 2021-11-13 15:55:40 · 133 阅读 · 0 评论 -
InnoDB 存储引擎(6)——异步IO
异步IO 简介Asynchronous IO,AIO 用户发出一个IO 请求后立即再发另一个IO请求,当全部IO 请求发送完毕后,等到所有IO操作的完成,就是AIO。 AIO 的另一个优势是可以进行IO Merge 操作,也就是可以将多个IO 合并为1 个IO,这样可以提高 IOPS的性能。例如: 用户需要访问页(space, page_no) 序列为(8, 6),(8, 7),(8, 8),每页大小为16KB 同步IO 需要进行3次IO 操作,而AIO 会判断到这三个页是连续的,因此AIO原创 2021-11-13 14:52:51 · 306 阅读 · 0 评论 -
InnoDB 存储引擎(5)——自适应哈希索引
自适应哈希索引简介Adaptive Hash Index,AHI InnoDB 会监控对表上各索引页的查询,根据访问的频率和模式自动为某些热点页建立哈希索引,从而提高访问速度自适应哈希索引建立的条件对建立哈希索引的页的连续访问模式必须是一样的。例如对于(a, b)这样的联合索引页,其访问模式可以是以下的情况 where a=xxx where a= xxx and b=xxx 访问模式一样指的是查询的条件一样,若交替进行以上的两种查询,那么InnoDB 存储引擎不会对该页构造AHI原创 2021-11-13 14:38:05 · 497 阅读 · 0 评论 -
InnoDB 存储引擎(4)——二次写(doublewrite)
目的带给InnoDB 存储引擎的是数据页的可靠性解决的问题当数据库宕机时,可能InnoDB 存储引擎正在写入某个页到表中,而这个页只写了一部分,比如16KB的页,只写了前4KB,之后就发生了宕机,这种情况被称为部分写失效(partial page write)。 如果没有二次写机制,出现部分写失效就会导致数据丢失的情况。二次写的概念发生写失效并不能使用redo 日志进行恢复,redo 日志记录的是对页的操作。如果本身这个页已经发生损坏,在对其进行重做是没有意义的 因此在redo log.原创 2021-11-13 00:07:56 · 478 阅读 · 0 评论 -
InnoDB 存储引擎(3)——插入缓冲(Insert Buffer)
目的提高对于非聚集索引插入的性能原因在一个具有非聚集且非唯一索引的表中做插入时,数据页的存放还是按主键(primary key)进行顺序存放的,但是对于非聚集索引叶子节点的插入不再是顺序的了,这时就需要离散的访问非聚集索引页,由于随机读取的存在而导致了插入操作性能下降,所以需要使用插入缓冲步骤对于非聚集索引的插入或更新操作,首先判断插入的非聚集索引页是否在缓冲池中 若在,则直接插入 若不在,则先放入一个Insert Buffer 对象中 然后再以一定频率和情况进行Insert .原创 2021-11-12 19:30:38 · 825 阅读 · 0 评论 -
InnoDB存储引擎(2)—— InnoDB 体系架构
1. 内存池 由多个内存块组成,负责的工作如下:维护所有进程 / 线程需要访问的多个内部数据结构 缓存磁盘上的数据,方便快速读取,同时在对磁盘文件的数据修改之前在这里缓存 重做日志(redo log)缓冲 ....2. 后台线程作用 负责刷新内存池中的数据,保证缓冲池中的内存缓存是最近的数据。 将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB 能恢复到正常运行状态 分类 Master Thread 是一个非常核心的后台线程 ...原创 2021-11-12 15:39:29 · 2522 阅读 · 0 评论 -
InnDB 存储引擎(1)——简介
1. 特点支持事务 支持行锁 支持外键 支持类似于Oracle 的非锁定读,即默认读取操作不会产生锁2. InnoDB 中的数据InnoDB 存储引擎将数据放在一个逻辑的表空间中,由InnoDB 存储引擎自身进行管理,对外透明 从MySQL 4.1 版本开始,可以将每个InnoDB 存储引擎的表单独存放到一个独立的ibd 文件中 InnoDB 存储引擎支持用裸设备(row disk)来建立其表空间3. InnoDB 与高并发性、高性能、高可用InnoDB 通过使用多版本并发控制(M原创 2021-11-11 23:13:06 · 341 阅读 · 0 评论