IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL存储引擎InnoDB详解(二)存储引擎文件 -> 正文阅读

[大数据]MySQL存储引擎InnoDB详解(二)存储引擎文件

??每个表存储引擎有自己独有的文件。

一、表空间文件

??InnoDB采用将存储的数据按表空间(tablespace)进行存放的设计。
??默认配置下有一个初识大小为10M,名为ibdata1的文件,默认的表空间文件(tablespace file)。
??通过参数innodb_data_file_path设置文件

	innodb_data_file_path=/db/ibdata1:2000M;/dr2/db/ibdata2:2000M:autoextend

??表示将/db/ibdata1和/dr2/db/ibdata2两个文件来组成表空间,其中ibadata1的大小为2000M,文件ibdata2的大小为2000MB,如果用完了这2000MB,该文件可以自动增长(autoextend)。

??除了共享表空间,还可以设置独立表空间,通过参数innodb_file_per_table控制,生成的文件名为:表名.ibd

	show variables like 'innodb_file_per_table'

二、重做日志文件

??记录InnoDB存储引擎事务日志的文件称作重做日志文件(redo log file)。

2.1 概述

??每个InnoDB存储引擎至少有1个重做日志文件组(group),每个文件组下至少有2个重做日志文件,如默认的ib_logfile0和ib_logfile1。为了得到更高的可靠性,用户可以设置多个的镜像日志组(mirrored log groups),将不同的文件组放在不同的磁盘上。

??相同组内的文件是循环写入日志的。

2.2 相关参数

  • innodb_log_file_size 指定每个重做日志文件的大小。

  • innodb_log_files_in_group 指定日志文件组中重做日志文件的数量,默认为2。

  • innodb_mirrored_log_groups 指定日志镜像文件组的数量,默认为1。

  • innodb_log_group_home_dir 指定日志文件组所在的路径,默认为./,表示在MYSQL数据路的数据目录下。

??查看配置

	show variables like 'innodb%log%'

2.3 与二进制日志文件的区别

??1、范围不同。二进制日志会记录所有与MYSQL数据库有关的日志记录,包括InnoDB、MyISAM、Heap等其他存储引擎的日志。而InnoDB存储引擎的重做日志只记录有关该存储引擎本身的事务日志。

??2、记录的内容不同。二进制日志记录的都是关于一个事务的具体操作内容,即该日志是逻辑日志。而InnoDB存储引擎的重做日志记录的是关于每个页(Page)的更改物理情况。

??3、写入的时间不同,二进制日志文件仅在事务提交前进行提交,即只写磁盘一次,不论这时该事务多大。而在事务进行的过程中,却不断有重做日志条目(redo entry)被写入到重做日志文件中。

2.4 重做日志条目结构

??redo_log_type | space | page_no | redo_log_body

  • redo_log_type 占用1字节,表示重做日志的类型。

  • space表示表空间的ID,采用压缩的方式,因此占用的空间可能小于4字节。

  • page_no 表示页的偏移量,同样采用压缩的方式

  • redo_log_body 表示每个重做日志的数据部分,恢复时需要调用相应的函数进行解析。

2.5 重做日志文件的写入过程

??写入重做日志文件的操作不是直接写,而是先写入一个重做日志缓冲(redo log buffer)中,然后按照一定的条件顺序地写入日志文件。

??从重做日志缓冲往磁盘写入时,是按512个字节,也就是一个扇区的大小进行写入。因为扇区是写入的最小单位,因此可以保证写入必定是成功的。因此在重做日志的写入过程中不需要有doublewrite。

??从日志缓冲写入磁盘上的重做日志文件的条件

??1、主线程会每秒将重做日志缓冲写入磁盘的重做日志文件中,不论事务是否已经提交。

??2、另一个触发写磁盘是由 innodb_flush_log_at_trx_commit 控制,表示在提交(commit)操作时,处理重做日志的方式。0,1,2值所代表的含义:

  • 0,表示当提交事务时,并不将事务的重组哦日志写入磁盘,而是等待主线程每秒的刷新。

  • 1,表示在执行commit时将重做日志缓冲同步写到磁盘,即伴有fsync的调用。为了保证事务的ACID,必须选1。

  • 2,表示将重做日志异步写到磁盘,并不能完全保证在执行cmomit时肯定会写入。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 23:09:15  更:2022-01-29 23:11:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:58:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码