这次让我们从几个点认识一下Mysql的Innodb

MySQL 的 InnoDB 存储引擎是 MySQL 默认和最常用的存储引擎之一。它主要关注的是高可靠性、性能以及完整的事务支持。以下是对 InnoDB 存储引擎的详细介绍:

1. 数据库特性

1.1 事务支持

InnoDB 是完全支持事务的存储引擎,支持四种主要的事务隔离级别:

  • 读未提交(Read Uncommitted): 最高并发性但最低隔离级别,可能会看到其他事务的未提交更改。
  • 读提交(Read Committed): 通常情况下默认的隔离级别,每次读取时会看到事务已经提交的更改。
  • 可重复读(Repeatable Read): 默认的隔离级别,保证在同一事务中多次读取获取一致的结果,解决不可重复读问题,但不能解决幻读问题。
  • 可串行化(Serializable): 最强隔离级别,解决幻读问题,但性能较低。
1.2 锁机制

InnoDB 支持行级锁,而不是表级锁,从而能够在大部分情况下提供更高的并发性。主要的锁类型有:

  • 共享锁(S锁): 允许事务读取一行数据。
  • 排他锁(X锁): 允许事务删除或更新一行数据。

InnoDB 还支持意向锁(Intention Lock),意向锁分为意向共享锁(IS锁)和意向排他锁(IX锁),用来在执行表锁时减少锁之间的冲突。

1.3 外键约束

InnoDB 是 MySQL 中唯一一个支持外键约束的存储引擎,能够保证数据的完整性和一致性。它支持删除和更新时的级联操作。

2. 数据存储结构

InnoDB 使用了一种称为表空间(Tablespace)的存储结构,它可以存储多个表的数据和索引。具体数据文件结构如下:

2.1 表空间
  • 系统表空间: 存储所有数据库的元数据,以及自身的数据字典和双写缓冲(Doublewrite Buffer)等。
  • 独立表空间: 每个表都有一个单独的表空间文件(.ibd 文件),其中存储该表的数据和索引。
2.2 内部存储结构
  • 页(Page): InnoDB 的数据文件由页组成,每页大小通常为 16KB。
  • 区(Extent): 由 64 个连续的页组成,大小为 1MB。
  • 段(Segment): 可以包含多个区,用来存储表和索引的数据。

3. 数据一致性和恢复机制

3.1 重做日志(Redo Log)

InnoDB 使用重做日志记录对数据页的物理更改,确保即使在系统崩溃时也能恢复数据。重做日志按照顺序写入独立的日志文件(ib_logfile0 和 ib_logfile1)。

3.2 回滚日志(Undo Log)

回滚日志用于实现事务回滚和隔离级别。每当事务发生修改时,InnoDB 会记录这些更改的旧值,这样如果事务被回滚,可以通过这些旧值恢复之前的数据。

3.3 双写缓冲(Doublewrite Buffer)

双写缓冲是 InnoDB 存储引擎为了保障数据页写入磁盘时的原子性而设计的。数据页首先写入双写缓冲区,然后再从缓冲区写到实际数据文件中。这样可以避免因磁盘写入错误导致的数据页损坏。

4. 缓存和性能优化

4.1 缓冲池(Buffer Pool)

InnoDB 将数据和索引页缓存在内存中的缓冲池中,从而提升对数据页面的访问速度。缓冲池大小可以通过 innodb_buffer_pool_size 参数配置,通常需要分配系统内存的 70-80%。

4.2 自适应哈希索引(Adaptive Hash Index)

InnoDB 会根据工作负载自动创建哈希索引,可以显著提高某些查询的性能。自适应哈希索引的创建和维护不需要额外的管理开销。

4.3 LRU 列表和 Free 列表

InnoDB 使用 LRU(Least Recently Used)算法来管理缓冲池中的数据页。经常使用的数据页放在 LRU 列表的前面,而不常使用的数据页会被移到后面并最终被淘汰。此外,InnoDB 维护 Free 列表来管理空闲的缓冲池页面。

5. 高可用和扩展性

5.1 复制(Replication)

InnoDB 是 MySQL 内建复制的基础,支持主从复制(Master-Slave Replication)和多主复制(Multi-Master Replication),用于实现高可用性和数据冗余。

5.2 组复制(Group Replication)

InnoDB 支持 MySQL 的组复制(Group Replication),可以在一组服务器之间实现数据的自动化复制和故障转移,提高数据的可用性和一致性。

5.3 分区(Partitioning)

虽然分区是 MySQL 的一个特性,但 InnoDB 可以利用分区来提高查询性能和管理大型表。分区表会将数据分段存储在多个分区中,每个分区可以独立管理和优化。

6. 配置和调优

优化 InnoDB 性能通常涉及对以下参数的调整:

  • innodb_buffer_pool_size: 缓冲池大小,建议设置为系统可用内存的 70-80%。
  • innodb_log_file_size: 重做日志文件大小,较大的日志文件可以减少检查点的频率,提高性能。
  • innodb_flush_log_at_trx_commit: 控制事务提交时重做日志的刷新行为,可以在性能与数据安全之间权衡。
  • innodb_io_capacity: 配置 InnoDB 的 I/O 能力,适当调整该参数可以提高磁盘 I/O 密集型操作的性能。
[mysqld]
innodb_buffer_pool_size = 4G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000

通过合理的配置和持续的监控,可以有效优化 InnoDB 存储引擎的性能,满足各种业务场景需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【uniapp-ios】App端与webview端相互通信的方法以及注意事项

前言 在开发中,使用uniapp开发的项目开发效率是极高的,使用一套代码就能够同时在多端上线,像笔者之前写过的使用Flutter端和webview端之间的相互通信方法和问题,这种方式本质上实际上是h5和h5之间的通信,网上有非常多…

ios身份证实名认证接口开发示例助力电商物流实名认证

为了更好的利用货车资源,也方便企业正常的运送货物,“互联网电商”平台可谓风起云涌。货车司机和有发货需求的人们可以在物流平台注册,货车司机接单为有运送需求的用户提供有偿货运服务。那么,如何让企业放心的将货物安心的交予货…

物联网实训室建设可行性报告

一、建设物联网实训室的目的和意义 随着信息技术的快速发展,物联网(IoT)已成为推动社会进步和经济发展的关键技术之一。物联网技术的集成应用,不仅能够提高生产效率,还能促进智慧城市、智能家居、智能农业等多个领域的…

python04——类(基础new)

类其实也是一种封装的思想,类就是把变量、方法等封装在一起,然后可以通过不同的实例化对其进行调用操作。 1.类的定义 class 类名: 变量a def __init__ (self,参数2,参数2...):初始化函数!!&…

vivado DELAY_VALUE_XPHY、DIFF_TERM

延迟_值_XPHY PORT对象上的DELAY_VALUE_XPHY属性指定要添加的延迟量 Versal XPHY逻辑接口的输入或输出路径。在的早期阶段 opt_design在重新生成高级I/O向导IP时 DELAY_VALUE_XPHY值将从PORT复制到的XPHY实例上 输入或输出路径。Vivado设计套件中存在DRCs,以确保 DE…

简单实现联系表单Contact Form自动发送邮件

如何实现简单Contact Form自动邮件功能?怎样简单设置? 联系表单不仅是访客与网站所有者沟通的桥梁,还可以收集潜在客户的信息,从而推动业务的发展。AokSend将介绍如何简单实现一个联系表单,自动发送邮件的过程&#x…

java Collections类介绍

Java 的 java.util.Collections 类提供了一组静态方法,用于操作或返回集合(如列表、集合和映射)。Collections 类是一个实用工具类,旨在为集合提供便捷的算法和操作。以下是对 Collections 类及其常用方法的介绍。 常用方法总结 …

【游戏客户端】大话slg玩法架构(一)滚动基类

【游戏客户端】大话slg玩法架构(一)滚动基类 大家好,我是Lampard家杰~~ 今天我们兑现诺言,给大家分享SLG玩法的实现j架构,关于SLG玩法的介绍可以参考这篇上一篇文章:【游戏客户端】制作率土之滨Like玩法 PS…

保险理论与实践

《保险理论与实践》是由中国保险学会主办的学术集刊,于2016年1月正式创办,致力于发表权威、严谨、高质量的理论研究、政策研究和实务研究成果,强调学术性与政策性、理论性与实践性的有机结合。本刊由中国金融出版社公开出版,每月下…

postmessage()在同一域名下,传递消息给另一个页面

这里是同域名下&#xff0c;getmessage.html&#xff08;发送信息&#xff09;传递消息给index.html&#xff08;收到信息&#xff0c;并回传收到信息&#xff09; index.html页面 <!DOCTYPE html> <html><head><meta http-equiv"content-type"…

机器学习统计学基础 - 最大似然估计

最大似然估计&#xff08;Maximum Likelihood Estimation, MLE&#xff09;是一种常用的参数估计方法&#xff0c;其基本原理是通过最大化观测数据出现的概率来寻找最优的参数估计值。具体来说&#xff0c;最大似然估计的核心思想是利用已知的样本结果&#xff0c;反推最有可能…

Java并发编程工具包(JUC)详解

在现代软件开发中&#xff0c;多线程编程是一个不可避免的话题。为了更好地管理和利用多线程&#xff0c;Java提供了一个强大的工具包——java.util.concurrent&#xff08;简称JUC&#xff09;。JUC包含了许多用于并发编程的类和接口&#xff0c;帮助开发者高效、安全地处理线…

binutils ifunc 流程图

上图是x86 binutils 的流程图。 函数说明_bfd_x86_elf_link_hash_table_createInit local STT_GNU_IFUNC symbol hash.elf_x86_64_check_relocsAdd support for handling STT_GNU_IFUNC symbols_bfd_elf_x86_get_local_sym_hashFind and/or create a hash entry for local sym…

[Go] 字符串遍历数据类型问题

字符串遍历问题 在使用for i,v:range str遍历字符串时 str[i]是unit8&#xff08;byte&#xff09;类型&#xff0c;返回的是单个字节 字符串在Go中是以字节序列的形式存储的&#xff0c;而 str[i] 直接访问了这个字节序列中的第 i 个字节。如果字符串中的字符是单字节的ASCII…

Leetcode—97. 交错字符串【中等】

2024每日刷题&#xff08;140&#xff09; Leetcode—97. 交错字符串 2d动规实现代码 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int m s1.length();int n s2.length();int len s3.length();if(m n ! len) {return false;}vector<…

SpringBoot日常:封装rabbitmq starter组件

文章目录 逻辑实现RabbitExchangeEnumRabbitConfigRabbitModuleInfoRabbitModuleInitializerRabbitPropertiesRabbitProducerManagerPOM.xmlspring.factories 功能测试application.yml配置生产者&#xff1a;消费者&#xff1a;测试结果&#xff1a;总结 本章内容主要介绍编写一…

stm32 USB CDC类虚拟串口初体验

1. 目标 本文介绍CubeMX生成 USB CDC类虚拟串口工程的操作步骤。 2. 配置流程 时钟配置 usb外设需要48M时钟输入 stm32405使用外部时钟源HSE,否则配不出来48M时钟stm32h750内部有一个48M时钟 stm32f405时钟配置 stm32h750时钟配置 Connectivity ->USB_OTG_FS 和 Connect…

GEE代码实例教程详解:植被状况指数(VCI)与干旱监测

简介 在本篇博客中&#xff0c;我们将使用Google Earth Engine (GEE) 进行植被状况指数&#xff08;Vegetation Condition Index, VCI&#xff09;的计算和干旱监测。通过MODIS NDVI数据&#xff0c;我们可以评估2001年至2024年间的植被状况和干旱等级。 背景知识 MODIS NDV…

C++初阶:从C过渡到C++的入门基础

✨✨所属专栏&#xff1a;C✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ C发展历史 C的起源可以追溯到1979年&#xff0c;当时BjarneStroustrup(本贾尼斯特劳斯特卢普&#xff0c;这个翻译的名字不同的地⽅可能有差异)在⻉尔实验室从事计算机科学和软件⼯程的研究⼯作。⾯对项⽬中复…

第4章 Vite模块化与插件系统(二)

4.3 常用插件介绍 4.3.1 官方插件 vitejs/plugin-vue 用于支持 Vue.js 开发&#xff1a; npm install vitejs/plugin-vue --save-devimport vue from vitejs/plugin-vueexport default defineConfig({plugins: [vue()] })vitejs/plugin-react 用于支持 React 开发&#xf…