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

Mysql的InnoDB存储引擎

        简介:InnoDB是Mysql数据库管理系统中的一种存储引擎,他是Mysql的默认存储引擎之一。InnoDB的最大特色是支持了ACID兼容的事务功能,类似于postgreSQL,提供了行级锁和多版本并发控制等高级特性。与传统的ISAM和MyISAM相比,InnoDB具有更好的性能和可靠性,是事务型数据库的首选引擎。InnoDB是为处理巨大数据量时的最大性能设计的,完全与Mysql服务器整合,维持他自己的缓冲池以在内存中缓存数据和索引,InnoDB采用双轨制授权,包括GPL授权和专有软件授权。InnoDB的设计考虑了高性能和大规模数据处理的场景,通过其内部的缓冲池、行级锁定和多版本并发控制等技术,确保了在高并发环境下的数据一致性和系统性能,这些特点使得InnoDB成为许多需要高性能、高可靠性数据库应用的首选引擎。

一丶InnoDB的主要特点和优势

优势:

  • InnoDB兼顾高可靠性和高性能的通用引擎,Mysql8.0就是默认InnoDB为存储引擎;
//查看搜索引擎
show engines

 

  • 支持 B+树索引,支持备份与恢复,支持聚簇索引,支持数据压缩,支持数据缓存,支持地理空间数据类型,经纬度,支持数据加密,支持地理空间索引。
  • 锁粒度-行级锁,修改一行的时候,别的不能修改,多并发控制,支持事务;

特点:

  • 事务支持:InnoDB支持ACID事务,即原子性、一致性、隔离性个持久性,这使得InnoDB能够在复杂的业务场景下提供可靠的数据处理。
  • 行及锁定:与表级锁定相比,行及锁定可以最大程度地支持并发,挺高系统的并发处理能力。
  • 数据恢复:InnoDB支持事务日志和崩溃恢复,确保在系统崩溃或其他故障的情况下,数据一致性和完整性得到保护。
  • 数据完整性:通过提供外键约束等机制,InnoDB增强了数据的完整性保护,防止了数据的不一致性状态。

二丶InnoDB的内存结构

        InnoDB内存结构主要包括四个部分:Buffer Pool(缓冲池)、Change Buffer(更改缓冲区)、Adaptive Hash Index (自适应哈希索引)、Log Buffer(日志缓冲区)。

  • Buffer Pool:这是InnoDB位于主存储器中的一片区域,用于缓存访问过的表和索引数据。缓冲池允许直接从内存处理频繁使用的数据,这加快了处理速度。在专用服务器上,通常高达80%的物理内存会分配给缓冲池,为了提高大容量读操作的效率,缓冲池被分割成一个个可以容纳多行的页(pages),并且使用LRU算法的一种变体来管理这些页,以确保最频繁访问的数据始终在内存中可用。
  • Change Buffer:这是一个特殊的数据结构,用于缓存不在缓冲池中的哪些二级索引页的变更。由Insert 和Update或者Delete这些DML操作导致被缓存的变化,将在当这些页被其他读操作加载到缓冲池后合并。
  • Adaptive Hash Index:自适应哈希索引特性使InnoDB在具有适当的负载组合和充足的缓冲池内存的系统上,执行得更像内存数据库,而不会牺牲事务特性或可靠性。自适应哈希索引通过观察到的搜索模式,使索引key的前缀来创建哈希索引,以提高查询性能。
  • Log Buffer:日志缓冲区用于存储redo log 和undo log的日志记录,这些日志记录在内存中暂存,然后适当的时候被写入磁盘,以确保数据的持久性和事务的原子性。

三丶InnoDB的磁盘结构

        InnoDB的磁盘结构主要由表空间(Tablespaces)组成,这些表空间包括系统表空间(System Tablespace)、独立表空间(File-per-table Tablespaces)、通用表空间(General Tablespaces)、撤销表空间(Uodo Tablespaces)和临时表空间(Temporary Tablespaces)。

  • System Tabalespace:系统表空间是一个共享的表空间,其物理文件默认名称ibdata1。它包含了数据字典、双写缓冲、修改缓冲和回滚日志等,系统表空间的大小可以自动扩展,但一旦设定后,不可缩减。
  • File-per-table Tablespaces:独立表空间为每张表提供独立的存储空间,每个表的数据和索引存储在单独的文件中。这种表空间通过参数Innodb_file_per_table控制,默认情况下该参数是开启的。
  • Undo Tablespaces:撤销表空间主要用于undo logs,这些日志用于事务回滚和多并发控制。
  • Temporary Tablespaces:临时表空间用于存储临时的数据和索引,这些数据在事务完成后可能会被清除。

结尾:喜欢的朋友点个赞吧 


http://www.kler.cn/news/284749.html

相关文章:

  • Unity-高版本的 bundle 资源路径的变化
  • 在大语言模型中,生成文本的退出机制,受max_generate_tokens限制,并不是所有的问答都完整的跑完整个transformer模型
  • 红黑树模拟实现STL中的map与set——C++
  • React 学习——zustand切片拆分
  • BUUCTF PWN wp--jarvisoj_level0
  • 入行「游戏策划」,该从何处下手?
  • 【FPGA】入门学习路线
  • 【QNX+Android虚拟化方案】114 - QNX /dev/switch 节点创建 及 读写功能实现实例
  • 3d网格补洞算法
  • 实测数据处理(RD算法处理)——SAR成像算法系列(十)
  • Python编码系列—Python中的安全密码存储与验证:实战指南
  • 每日一题,零基础入门FPGA——逻辑门
  • NFC射频--天线设计
  • 集成电路学习:什么是BIOS基本输入/输出系统
  • pytorch 均方误差损失函数
  • C_08_动态内存申请
  • 未来城市生活:科技与人文的交响
  • Docker 实战加速器(紧急情况!镜像库全面失效,一招解决Docker无法下载)
  • 云轴科技ZStack产品升级,浙江分公司产品发布会成功举办
  • tailwindcss
  • 《黑神话:悟空》:30%抽成真相
  • 如何使用 AWS CLI 为私有 AWS S3 存储桶中的对象创建预签名 URL
  • 2016年系统架构师案例分析试题五
  • 前端面试——八股文
  • 又一个免费代码生成工具
  • C++ TinyWebServer项目总结(11. 定时器)
  • 【C++】OJ习题 篇2
  • Spring 是什么
  • AD19基础应用技巧:捕捉对象功能的讲解鼠标”绿色十字”大光标、小光标切换
  • Java基础(6)- Java代码笔记3