0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MySQL中的InnoDB是什么?

哲想软件 来源:哲想软件 2023-04-13 09:09 次阅读

有许多强大的MySQL存储引擎可供我们使用,而InnoDB无疑是最受欢迎的存储引擎之一。它高度可靠和高效,因此它成为5.5版本以后所有MySQL的默认存储引擎也就不足为奇了。让我们更仔细地看看它的优点和功能。

MySQL中的InnoDB是什么?

现在我们想确定MySQLInnoDB 存储引擎的特殊之处。以下是它的主要优点:

InnoDB基于ACID,支持提交和回滚操作。此外,它不太可能崩溃,因此用户的数据仍然受到保护。

由于行级锁定,多用户性能成为可能。

由于InnoDB表有效地组织数据,因此优化了基于主键的查询。每个InnoDB表中都有一个称为聚集索引的主键索引。此索引排列数据以减少主键查询的I/O。

MySQLInnoDB 支持外键约束,可以实现和维护数据完整性。

InnoDB也可以与MariaDB服务器一起使用。在这种情况下,InnoDB提供外键、XA事务和带有保存点的事务。

InnoDB集群

每家公司的政策都以提供最安全、最稳定的数据流为前提。但是如何才能实现和保证呢?答案在于MySQLInnoDB Cluster,它为MySQL提供了一个方便的解决方案。在AdminAPI和MySQLShell 的参与下,您可以轻松管理多个MySQL服务器实例以作为单个InnoDB集群中工作。

MySQLInnoDB Cluster 的组件包括以下内容:

MySQL路由器(安全路由到数据库节点)

MySQL组复制(多个相互复制的数据库服务器)

MySQLShell(MySQL的配置工具,有助于启用具有容错功能的拓扑)

查看它如何在单个InnoDB集群中协同工作:

4ea4781e-d98f-11ed-bfe3-dac502259ad0.png

创建InnoDB表

为了创建InnoDB表,您只需在CREATETABLE 语句中指定ENGINE= InnoDB。例如:

4ebd452e-d98f-11ed-bfe3-dac502259ad0.png

InnoDB服务器变量和性能调优技巧

以下是可用的InnoDB服务器变量列表,这些变量有助于加速和优化MySQL数据库和InnoDB存储引擎之间的性能和交互:

innodb_flush_log_at_trx_commit

innodb_buffer_pool_size

innodb_buffer_pool_instances

innodb_file_per_table

innodb_force_recovery

innodb_lock_wait_timeout

innodb_large_prefix

innodb_flush_method

innodb_thread_concurrency

innodb_log_buffer_size

innodb_io_capacity

innodb_strict_mode

innodb_autoinc_lock_mode

innodb_read_io_threads

innodb_data_file_path

innodb_flush_log_at_trx_commit

此命令的基本语法是--innodb-flush-log-at-trx-commit=#.它配置事务刷新到重做日志的频率。

innodb_buffer_pool_size

此命令的基本语法是--innodb-buffer-pool-size=#.InnoDB 缓冲池是一个内存域,InnoDB存储引擎在其中缓存其表和索引数据。默认值为134217728字节(128MB)。CPU架构定义了最大值,在32位系统上等于4294967295(232-1),在64位系统上等于18446744073709551615(264-1)。

innodb_buffer_pool_instances

此命令的基本语法是--innodb-buffer-pool-instances=#.它表示InnoDB缓冲池必须包含的区域数量。对于数GB范围内的缓冲池,将整个缓冲池划分为多个单独的实例可以提高并发性。

innodb_file_per_table

此命令的基本语法是--innodb-file-per-table[={OFF|ON}].启用该变量后,默认情况下会在每个表的文件表空间中生成表。如果禁用,则在系统表空间中生成表。

innodb_force_recovery

此命令的基本语法是--innodb-force-recovery=#.它是一种崩溃恢复模式,通常用于解决问题。允许的值范围为0到6。

innodb_lock_wait_timeout

此命令的基本语法是--innodb-lock-wait-timeout=#.默认持续时间为50秒。之后,InnoDB事务被中断。如果超过时间限制,会报如下错误:

4ed7985c-d98f-11ed-bfe3-dac502259ad0.png

在这种情况下,仅回滚语句。如果要回滚整个事务,请使用–innodb-rollback-on-timeout命令。

innodb_large_prefix

此命令的基本语法是--innodb-large-prefix[={OFF|ON}].如果启用此选项,则对于行格式为DYNAMIC或COMPRESSED的InnoDB表,允许使用超过767字节(最多3072字节)的索引键前缀。对于行格式为REDUNDANT或COMPACT的表,此命令不会影响允许的索引键前缀长度。

innodb_flush_method

使用--innodb-flush-method=value该命令指定将用于将数据刷新到InnoDB文件的方法。请注意,I/O吞吐量可能会受到影响。

innodb_thread_concurrency

此命令的基本语法是--innodb-thread-concurrency=#.它定义了InnoDB允许的最大线程数。无限并发由值0定义,默认设置。

innodb_log_buffer_size

此命令的基本语法是--innodb-log-buffer-size=#.这是尚未提交的事务的缓冲区大小。如果您使用大字段(如BLOB或TEXT),则应更改此参数的值。

innodb_io_capacity

此命令的基本语法是--innodb-io-capacity=#.它指定了InnoDB后台操作可访问的每秒I/O事务数(IOPS)。

innodb_strict_mode

此命令的基本语法是--innodb-strict-mode[={OFF|ON}].严格模式起到了屏蔽不同SQL语句序列和操作模式的各种意外结果的作用。当启用innodb_strict_mode时,InnoDB会针对特定条件发出错误。

innodb_autoinc_lock_mode

此命令的基本语法是--innodb-autoinc-lock-mode=#.自动递增值在锁定模式下生成。允许的值为0、1或2(分别用于传统、连续或交错锁定模式)。默认设置为1(连续)。

innodb_read_io_threads

使用--innodb-read-io-threads=#该命令定义InnoDB文件I/O流的数量。

innodb_data_file_path

此命令的基本语法是–innodb-data-file-path=file_name.它指定有关InnoDB系统表空间数据文件的信息。如果尚未定义innodb_data_file_path的值,则默认生成单个自动扩展数据文件。该数据文件名为ibdata1,大小约为12MB。

数据文件的完整语法如下:

file_name:file_size[:autoextend[max_file_size]]

它由文件名、文件大小、自动扩展属性和最大属性组成。

请注意:在执行您的操作时,确保InnoDB没有使用它自己的内存而不是操作系统的内存是很重要的。在这种情况下,您将看到InnoDB内存堆被禁用的通知,并会显示错误。可以通过将innodb_use_sys_malloc的值设置为ON或1而不是0来解决。

处理InnoDB中最常见的错误

InnoDB中错误的处理并不总是与指定的SQL标准相同。例如,SQL语句中的错误必须导致所述语句的回滚。对于InnoDB,在某些情况下,失败的语句会被回滚;在其他情况下,整个事务会回滚。

表空间空间不足会导致Tableis full错误,并且SQL语句会回滚。

除非在所述语句中指定了IGNORE选项,否则重复键错误会导致语句回滚。

锁等待超时导致正在等待锁但面临超时的语句回滚。

rowtoo long该错误还会回滚相应的语句。

事务死锁会导致整个事务回滚,之后应重试。

其他错误一般由MySQL代码层检测到,从而导致相关语句回滚。

使用InnoDB和dbForgeStudio for MySQL 获得最高性能

现在我们想推荐一个IDE,它将促进您使用MySQL数据库和InnoDB引擎– dbForgeStudio for MySQL的工作。虽然它与所有流行的 MySQL数据库引擎完全兼容,但InnoDB是值得特别提及的一个。

首先,dbForgeStudio 支持InnoDB提供的每一个优势,包括我们文章开头提到的那些。此外,您还可以获得许多优秀的功能,这些功能将加速和简化您的日常工作(例如自动提交操作)。还值得注意的是,dbForgeStudio 在创建表时默认使用InnoDB。

其次,您可以通过到Database菜单-> ServerVariables找到上述服务器变量,如下面的屏幕截图所示。

4ee743c4-d98f-11ed-bfe3-dac502259ad0.png

打开类别:InnoDB,您将找到所有这些。

4f267332-d98f-11ed-bfe3-dac502259ad0.png

最后,dbForgeStudio 支持XtraDB,它是InnoDB的向后兼容分支,由Percona为MariaDB和PerconaServer 数据库开发。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 路由器
    +关注

    关注

    22

    文章

    3503

    浏览量

    111345
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26006
  • MYSQL数据库
    +关注

    关注

    0

    文章

    95

    浏览量

    9277

原文标题:MySQL中的InnoDB是什么?包含示例和性能调优技巧的教程

文章出处:【微信号:哲想软件,微信公众号:哲想软件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深度剖析MySQL/InnoDB的并发控制和加锁技术

    本文主要是针对MySQL/InnoDB的并发控制和加锁技术做一个比较深入的剖析,并且对其中涉及到的重要的概念,如多版本并发控制(MVCC),脏读(dirty read),幻读(phantom
    的头像 发表于 10-29 14:36 1927次阅读
    深度剖析<b class='flag-5'>MySQL</b>/<b class='flag-5'>InnoDB</b>的并发控制和加锁技术

    0基础学Mysql:mysql入门视频教程!

    0基础学Mysql:mysql入门视频教程!目前MySQL技术虽然在国内发展了许多年,但是一直都没有形成一个专门的学科,MySQL的数据库,在很多中小企业的流行做法就是让程序员来管。但
    发表于 07-08 10:51

    全球唯一:MySQL社区2018年度公司贡献奖颁给阿里云

    。6. 自增列值持久化MySQL AUTO_INCREMENT 字段实现了自增 ID 的生成,但只保存在内存,意外宕机或重启,就会丢失自增值,AliSQL 使用表 SEGMENT HEADER
    发表于 04-25 11:51

    详解Mysql数据库InnoDB存储引擎事务

    关于Mysql数据库InnoDB存储引擎事务的一点理解
    发表于 05-13 10:11

    InnoDB锁的特点和状态查询

    MySQL探秘(五)InnoDB锁的类型和状态查询
    发表于 08-07 11:45

    分布式MySQLInnoDB cluster

    分布式MySQL——InnoDB cluster和性能测试
    发表于 04-15 08:43

    MySQL存储引擎简析

    MySQL存储引擎InnoDB  InnoDB 的存储文件有两个,后缀名分别是.frm和.idb,其中.frm是表的定义文件,而.idb是数据文件。InnoDB
    发表于 09-06 06:07

    最有用的mysql问答

    想进大厂,mysql不会那可不行,来接受mysql面试挑战吧,看看你能坚持到哪里? 1. 能说下myisam 和 innodb的区别吗? myisam引擎是5.1版本之前的默认引擎,支持全文检索
    的头像 发表于 09-30 17:43 1518次阅读
    最有用的<b class='flag-5'>mysql</b>问答

    关于InnoDB的内存结构及原理详解

    除此之外还聊了一下MySQLInnoDB的日志,和两次写,总的来说算是一个入门级别的介绍,这篇文章就来详细介绍一下InnoDB的内存结构。
    的头像 发表于 04-16 16:15 2575次阅读
    关于<b class='flag-5'>InnoDB</b>的内存结构及原理详解

    MySQL中的redo log是什么

    前言 说到MySQL,有两块日志一定绕不开,一个是InnoDB存储引擎的redo log(重做日志),另一个是MySQL Servce层的 binlog(归档日志)。 只要是数据更新操作,就一定
    的头像 发表于 09-14 09:40 1792次阅读

    innodb究竟是如何存数据的

    前言如果你使用过mysql数据库,对它的存储引擎:innodb,一定不会感到陌生。 众所周知,在mysql5以前,默认的存储引擎是:myslam。但mysql5之后,默认的存储引擎已经
    的头像 发表于 10-09 15:41 1164次阅读
    <b class='flag-5'>innodb</b>究竟是如何存数据的

    MySQL的页结构及原理

    索引可以说是每个工程师的必备技能点,明白索引的原理对于写出高质量的 SQL 至关重要,今天我们就从 0 到 1 来理解下索引的原理,相信大家看完不光对索引还会对 MySQLInnoDB 存储引擎的最小存储单位「页」会有更深刻的认识
    的头像 发表于 11-05 12:56 915次阅读

    MySQL5.6 InnoDB支持全文检索

    在早期的 MySQL 中,InnoDB 并不支持全文检索技术,从 MySQL 5.6 开始,InnoDB 开始支持全文检索。
    的头像 发表于 11-12 15:14 1012次阅读

    剖析MySQL InnoDB存储原理(上)

    一、MySQL记录的存储结构: 1、Page的结构,如下图:
    的头像 发表于 02-15 15:45 294次阅读
    剖析<b class='flag-5'>MySQL</b> <b class='flag-5'>InnoDB</b>存储原理(上)

    剖析MySQL InnoDB存储原理(下)

    一、InnoDB存储引擎内存管理 1.1 概念: Buffer Pool:预分配的内存池; Page:Buffer Pool的最小单位; Free list:空闲Page组成的链表;
    的头像 发表于 02-15 15:47 282次阅读
    剖析<b class='flag-5'>MySQL</b> <b class='flag-5'>InnoDB</b>存储原理(下)