MySQL — InnoDB介绍

这篇具有很好参考价值的文章主要介绍了MySQL — InnoDB介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


InnoDB是一款兼顾高可靠性和高性能的通用存储引擎。也是默认的MySQL存储引擎。

InnoDB 主要特点

  1. 它的DML操作遵循ACID模型,事务具有提交、回滚和崩溃恢复功能,以保护用户数据。
  2. 行级锁定和oracle风格的一致性读取提高了多用户并发性和性能。
  3. InnoDB表在磁盘上排列数据,以优化基于主键的查询。每个InnoDB表都有一个主键索引,称为集群索引,它组织数据以最小化主键查找的I/O。
  4. 为了维护数据的完整性,InnoDB支持FOREIGN KEY约束。对于外键,将检查插入、更新和删除,以确保它们不会导致相关表之间的不一致。

InnoDB特性:
MySQL — InnoDB介绍,MySQL,mysql,数据库

InnoDB 架构

MySQL — InnoDB介绍,MySQL,mysql,数据库

In-Memory Structures

Buffer Pool

Buffer Pool 是InnoDB在访问表和索引数据时缓存的主内存区域。缓冲池允许直接从内存访问频繁使用的数据,这加快了处理速度。在专用服务器上,通常会将多达80%的物理内存分配给缓冲池。

为了提高大容量读操作的效率,缓冲池被划分为可能包含多行的页面。为了提高缓存管理的效率,Buffer Pool 被实现为页面链表; 很少使用的数据使用LRU算法的变体从缓存中老化。

Change Buffer

Change Buffer 是一种特殊的数据结构,当二级索引页不在缓冲池中时,它将更改缓存到二级索引页。缓冲的更改可能来自INSERT、UPDATE或DELETE操作(DML),之后当其他读操作将页面加载到缓冲池中时,这些更改将被合并。

Adaptive Hash Index

自适应哈希索引使InnoDB在不牺牲事务特性或可靠性,且工作负载和缓冲池足够的情况下,在系统上更像一个内存数据库。自适应哈希索引由innodb_adaptive_hash_index变量启用,或者在服务器启动时通过——skip-innodb-adaptive-hash-index关闭。

Log Buffer

日志缓冲区是存储要写入磁盘上的日志文件的数据的内存区域。日志缓冲区大小由innodb_log_buffer_size变量定义。默认大小为16MB。日志缓冲区的内容定期刷新到磁盘。大的日志缓冲区允许运行大型事务,而不需要在事务提交之前将重做日志数据写入磁盘。因此,如果您有更新、插入或删除许多行的事务,那么增加日志缓冲区的大小可以节省磁盘I/O。

On-Disk Structures

System Tablespace

系统表空间是变更缓冲区的存储区域。如果表是在系统表空间中创建的,而不是在每个表文件或一般表空间中创建,则它还可能包含表和索引数据。

系统表空间可以包含一个或多个数据文件。默认情况下,在data目录中创建一个系统表空间数据文件ibdata1。系统表空间数据文件的大小和数量由innodb_data_file_path启动选项定义。

File-Per-Table Tablespaces

每个表文件的表空间包含单个InnoDB表的数据和索引,并存储在文件系统中的单个数据文件中。

General Tablespaces

通用表空间是使用CREATE tablespace语法创建的共享InnoDB表空间。

Undo Tablespaces

Undo表空间包含Undo日志,这些日志是记录的集合,其中包含有关如何撤消事务对聚集索引记录的最新更改的信息。

Temporary Tablespaces

包含 session Temporary Tablespaces 和 global temporary tablespace:

  1. session Temporary Tablespaces

    当InnoDB被配置为磁盘上的内部临时表的存储引擎时,会话临时表空间存储由用户创建的临时表和优化器创建的内部临时表。磁盘上的内部临时表使用InnoDB存储引擎。

  2. global temporary tablespace
    全局临时表空间(ibtmp1)存储对用户创建的临时表所做更改的回滚段。

Doublewrite Buffer

Doublewrite Buffer是一个存储区域,InnoDB在将页面写入到InnoDB数据文件中的适当位置之前,会将从缓冲池中刷新的页面写入该存储区域。如果操作系统、存储子系统或mysqld进程在写页面的过程中意外退出,InnoDB可以在崩溃恢复期间从doublewrite缓冲区中找到一个好的页面副本。

虽然数据写入两次,但doublewrite缓冲区并不需要两倍的I/O开销或两倍的I/O操作。数据在一个大的顺序块中写入到doublewrite缓冲区,只需对操作系统调用一次fsync(),除非innodb_flush_method被设置为O_DIRECT_NO_FSYNC。

Redo Log

redo log是一种基于磁盘的数据结构,用于在崩溃恢复期间纠正由不完整事务写入的数据。在正常的操作过程中,redo log对由SQL语句或低级API调用引起的更改表数据的请求进行编码。在意外关机之前未完成更新数据文件的修改将在初始化期间和接受连接之前自动执行。

Undo Log

undo logs 是与单个读写事务相关联的撤消日志记录的集合。undo log 记录包含有关如何撤销事务对聚集索引记录的最新更改的信息。如果另一个事务需要将原始数据作为一致读操作的一部分查看,则从撤销日志记录中检索未修改的数据。撤销日志存在于撤销日志段中,撤销日志段包含在回滚段中。回滚段位于undo表空间和全局临时表空间中。

位于全局临时表空间中的撤销日志用于修改用户定义临时表中的数据的事务。这些撤销日志不会重新记录,因为崩溃恢复不需要它们。它们仅用于服务器运行时的回滚。这种类型的撤销日志通过避免重做日志I/O来提高性能。文章来源地址https://www.toymoban.com/news/detail-629543.html

到了这里,关于MySQL — InnoDB介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql 数据库引擎介绍

    一、数据库引擎     数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建

    2024年02月14日
    浏览(59)
  • mysql 数据库 基本介绍

    描述事物的符号记录 包括数字,文字、图形、图像、声音、档案记录气 以“记录”形式按统一的格式进行存储 1,结构化的数据 即有固定格式和有限长度的数据。例如填的表格就是结构化的数据,国籍:中华人民共和国,民族:汉,性别:男,这都叫结构化数据 2,非结构化

    2024年03月23日
    浏览(47)
  • MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明

    MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明 MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计 MySQL案例——多表查询以及嵌套查询 MySQL笔记——数据库当中的事务以及Java实现对数据库进

    2024年01月16日
    浏览(75)
  • MySQL的数据库引擎介绍

        数据库引擎就是操作数据库的一段程序或程序段,用于存储、处理和保护数据的核心服务。     利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。数据库应用项目是通过数据库引擎与数据库链接的。     何为

    2024年02月06日
    浏览(56)
  • 【Mysql】数据库第二讲(数据库中数据类型的介绍)

    数值越界测试: 说明: 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的 无符号案例: 注意 注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将

    2024年02月09日
    浏览(55)
  • MySQL数据库,JDBC连接数据库操作流程详细介绍

    在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程整理下来分享给大家。 目录 1. 啥是JDBC? 2. JDBC依赖包 2.1 依赖包

    2024年02月06日
    浏览(104)
  • MySQL数据库性能优化技巧介绍

    MySQL是目前最流行和广泛使用的开源关系型数据库之一,随着数据量的增长和访问负载的提高,优化数据库性能变得至关重要,以确保系统能够高效地处理大量的并发请求。本文将记录一些MySQL数据库性能优化的技巧,提高数据库的运行效率,提升系统性能。 对于MySQL,最简单

    2024年02月08日
    浏览(134)
  • mysql 默认的4个数据库 介绍

    mysql 存储MySQL的用户账号和权限信息,一些存储过程、事件的定义信息 一些运行过程中产生的日志信息,一些帮助信息以及时区信息等 information_schema 存储Mysql服务器 维护的所有其它数据库的信息 ,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引, 这些信息并不是

    2024年02月11日
    浏览(57)
  • 学习笔记-MySql数据库介绍与连接

    一.MySQL数据库介绍 MySQL是一个关系型数据库管理系统,在 WEB 应用方面,MySQL是最好的 RDMS (Relational Database Management System,关系数据库管理系统) 应用软件,它是由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品,MySQL 是最流行的关系型数据库管理系统中的一个。 1.特点 开源,

    2024年01月19日
    浏览(45)
  • MySQL基础篇——MySQL数据库的介绍、下载、安装【文末送书】

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.数据库相关概念 1.什么是数据库  2.什么是数据库管理系统  3.SQL是什么 4. 数据库市场占有率 二.mysql安装 1. 安装

    2024年02月05日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包