当前位置: 首页 > article >正文

【innodb阅读笔记】之 表空间文件、重做日志文件

一、表空间文件

        innodb 采用将存储的数据按照表空间进行存放的设计。默认情况下会初始化一个大小为10MB,名为ibdata1的文件,该文件就是默认的表空间文件,可以通过参数innodb_data_file_path进行设置,如:

# 基础设置,设置表空间文件大小为 12MB
innodb_data_file_path = ./ibdata1:12M

# 设置两个表空间文件
innodb_data_file_path = ./ibdata1:12M;./ibdata2:12M

# 设置ibdata2 自动扩容
innodb_data_file_path = ./ibdata1:12M;./ibdata2:12M:autoextend

# 设置 ibdata2 自动扩容 并指定扩容大小 
innodb_data_file_path = ./ibdata1:12M;./ibdata2:12M:autoextend:max:20M

        这里使用ibdata1和ibdata2两个文件来组成表空间,若这两个文件在不同磁盘,磁盘的负载可能均衡,因此提高数据库性能。

        设置innodb_data_file_path后,所有的数据都会记录到表空间文件中,这会导致表空间文件过大,所以引入了innodb_file_per_table参数,当开启此参数后(默认是开启的),数据库会为每个表设置一个独立的表空间文件,命名规则为:表名.ibd,通过这样的方式,减少共享表空间的大小。

        需要注意的是,独立表空间只存储该表的数据、索引和插入缓存BITMAP等信息。其他数据如:插入缓存,undo log,锁信息等都存储在共享表空间中。

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set, 1 warning (0.00 sec)

二、重做日志文件 

        再默认情况下,Innodb存储引擎目录下会有 ib_logfile0 和 ib_logfile1 的文件,这些文件就是重做日志文件,当数据库发生错误或者系统宕机,innodb会使用重做日志来恢复数据库的数据,以此来保障数据的完整性。

        每个Innodb存储引擎至少有两个重做日志,当文件1写完,切换到文件2,做到循环使用的效果。重做日志文件不能设置的太大,设置太大时,恢复的时候可能需要很长时间,另一面也不能设置的太小,太小会导致一个事务多次切换日志文件,导致频繁的async checkpoint,引起性能的抖动。

# 每个重做日志文件的大小 默认为48MB
mysql> show variables like 'innodb_log_file_size';
+----------------------+----------+
| Variable_name        | Value    |
+----------------------+----------+
| innodb_log_file_size | 50331648 |
+----------------------+----------+
1 row in set, 1 warning (0.00 sec)


# 一个重做日志组下面有多少个重做日志文件 默认为 2
mysql> show variables like 'innodb_log_files_in_group';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| innodb_log_files_in_group | 2     |
+---------------------------+-------+
1 row in set, 1 warning (0.00 sec)


# 重做日志文件存放的位置默认存放在mysql数据存放位置
mysql> show variables like 'innodb_log_group_home_dir';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| innodb_log_group_home_dir | .\    |
+---------------------------+-------+
1 row in set, 1 warning (0.00 sec)

        重做日志缓存往磁盘写入时,是按照512个字节,也就是一个扇区写入的,因此保障写入必定是成功的。所以在写入过程中不需要doublewrite。

        重做日志写入的时机有:

                1. 主线程每秒会将重做日志写入到磁盘

                2. 事务提交时,通过参数 innobd_flush_log_at_trx_commit 来控制,(默认为1)表示当事务提交的时候,将当前事务的重做日志刷新到磁盘,0 表示等待主线程的刷新,2表示将重做日志写入到文件系统中,等待文件系统将数据刷新到磁盘。

mysql> show variables like 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+
1 row in set, 1 warning (0.00 sec)


http://www.kler.cn/a/414891.html

相关文章:

  • 【网络安全设备系列】12、态势感知
  • 1 ISP一键下载
  • 富文本编辑器图片上传并回显
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】
  • flink学习(6)——自定义source和kafka
  • Elasticsearch与CCS跨集群搜索:深入讲解与实战演练
  • 网络安全拟态防御技术
  • 【计算机网络安全】信息收集扫描
  • 【分享】PPT打开密码的设置与移除方法
  • Neo4j图形数据库-Cypher中常用指令
  • Spring Security6 OAuth2 实现流程
  • Oracle, PostgreSQL 字符串排序不一致及调整
  • docker 僵尸进程问题
  • 构建 LLM (大型语言模型)应用程序——从入门到精通(第七部分:开源 RAG)
  • 使用 Go 语言封装 MinIO 相关操作
  • 40分钟学 Go 语言高并发:Pipeline模式(二)
  • 网络安全-AAA介绍与配置
  • 【k8s深入理解之 Scheme】全面理解 Scheme 的注册机制、内外部版本、自动转换函数、默认填充函数、Options等机制
  • Blender 运行python脚本
  • 跨平台应用开发框架(3)-----Qt(样式篇)
  • 泷羽sec学习打卡-shell命令4
  • 从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
  • PHP后台微信医院预约挂号小程序设计与实现(论文+作品)
  • visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具
  • 如何在 Ubuntu 上部署一个属于自己的 Plex 媒体服务器
  • Jest 测试异步函数