Innodb存储引擎

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

特点:支持事务。锁定机制的改进,Innodb改变了MylSAM的锁机制,实现了行锁。实现外键。.frm文件来存放结构定义相关的元数据,但是表数据和索引数据是存在一起的,每个表单独存放还是表存放在一起,完全由用户来决定。

理论:Innodb的物理结构分为两大部分

        数据文件(表数据和索引数据)

            存放表中的数据和所有的索引数据,包括主键和其他普通索引。Innodb中,存在了表空间这样的概念,和oracle的表空间又有较大的不同。Innodb的表空间分为两种形式。一种是共享表空间,就是所有表和索引数据存放在同一个表空间中,通过Innodb_data_file_path来指定,增加数据文件需要停机重启。独享表空间就是每个表的数据和索引被存放在一个单独的.idb文件中。虽然可以自行设定使用共享表空间还是独享表空间来存放我们的表,但是共享表空间必须存在,Innodb的undo信息和其他一些元数据信息都是存放在共享表空间里的。共享表空间的数据文件可以设置为固定大小和可自动扩展大小。

            当文件表空间用完时,必须为其增加数据文件,只有共享表空间可以增加数据文件。操作就是在Innodb_data_file_path参数都没安装标准格式设置好文件路径和相关属性即可。Innodb在创建新数据文件时是不会创建目录的,指定目录不存在,则会报错。

        日志文件(和oracle的redo日志比较,同样可以设置多个日志组,同样采用轮循策略来顺序写入。

            Innodb是事务的存储引擎,系统carsh对他来说并不能造成严重的损失,由于有redo日志的存在,checkpoint机制的保护,Innodb完全可以通过redo日志将数据库crash时刻已经完成但没有来得及将数据写入磁盘的事务恢复,也能够将所有部分完成并已经写入磁盘的未完成事务回滚并将数据还原。

            Innodb在功能特性方面和MylSAM存储引擎有较大的区别,在配置上面也是单独处理的。在mysql启动参数文件设置中,Innodb的所有参数基本上都带有前缀innodb_,和所有Innodb相关的系统变量一样,所有的innodb相关的系统状态值也同样全部以innodb_前缀。

    MylSAM和Innodb区别

            MylSAM不支持事务,而Innodb支持。Innodb的autocammit默认是打开的,即每条sql语句都会默认被封装成一个事务,自动提交,会影响速度,所以最好把多余的sql语句显示放在begin和commit之间,组成一个事务提交。

            查看Innodb的事务是否打开:show variables like '%autocommit%';

            Innodb至此数据行锁定,MylSAM不支持,只支持锁定整个表。即MylSAM同一个表上的读锁和写锁是互斥的,MylSAM并发读写是如果等待队列中既有读请求又有写请求,默认写请求的优先级高,集使独请求先到,所以MyLSAM不适合于有大量查询和修改并存的情况,查询进程会长时间阻塞,因为MylSAM是锁表。

            Innodb支持外键,MylSAM不支持

            Innodb不支持全文索引,而MylSAM支持

    Mysqlslap性能测试MySQL两种存储引擎

        Mysqlslays是mysql自带的基准测试工具,优点:查询数据,语法简单,灵活容易使用,可以模拟多个客户端同时并发的想服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的新学年比较.mysqlslay为mysql性能优化前后提供了直观的验证依据。

            压力测试工具mysqlslap,关于选项手册以及--help介绍:

                --concurrency代表并发数量,多个可以用逗号隔开。

                --engines代表要测试的引擎,可以多个,用分隔符隔开

                --itertions代表运行这些测试多少次,集运行多少次后,得到结果。

                --auto-generate-sql代表用系统自己生成SQL脚本来测试

                --auto-generate-sql-load-type测试的是读还是写还是两者混合

                --number-of-queries代表总共要运行多少次查询,每个客户运行的查询数量可以用查询总数并发数来计算。

                --debug-info代表额外输出CPU以及内存的相关信息

                --number-int-cols代表测试表中的INTEGER类型的属性有几个

                --create-schema代表自己定义的模式(在mysql总也就是库即创建测试的数据库)

                --query代表自己的sql脚本

                --only-print如果只想打印sql语句是什么,可以用这个选项

                --csv=name生产CSV格式数据文件

                    查看数据库默认最大连接数:show variables like '%max_connections%';

                    不同版本默认最大连接不差别。一般生成环境下添加max_connectoins=1024

                    查看mysql默认使用存储引擎:show engines;

                    用自带的sql脚本来测试:mysqlslap --default-file=/etc/my.cnf --concurrency=100,200 --iterations=1 --number-int-cols=20 --number-char-cols=30 --auto-generate-sql --auto-generate-sql-add-autoincerement --auto-generate-sql-load-type=mixed --engine=myisam,innodb --number-of-queries=2000 -uroot- p123455 -verbose    说明:模拟测试两次读写并发,第一次100,第二次200,自动生成sql脚本,测试表包含20个init字段,30个char字段,每次执行2000查询请求,测试引擎分别是myisam,innodb


本文转自   宏强   51CTO博客,原文链接:http://blog.51cto.com/tanhong/1903943
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
存储 SQL 关系型数据库
Mysql系列-4.Mysql存储引擎-InnoDB(下)
Mysql系列-4.Mysql存储引擎-InnoDB
88 0
|
8月前
|
存储 缓存 关系型数据库
MySQL - 存储引擎MyISAM和Innodb
MySQL - 存储引擎MyISAM和Innodb
107 0
|
13天前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
18天前
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
64 7
|
8月前
|
存储 SQL 关系型数据库
MySQL存储引擎之MyISAM和InnoDB
MySQL存储引擎之MyISAM和InnoDB
78 0
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
【赵渝强老师】MySQL的InnoDB存储引擎
|
2月前
|
存储 关系型数据库 MySQL
数据库引擎之InnoDB存储引擎
【10月更文挑战第29天】InnoDB存储引擎以其强大的事务处理能力、高效的索引结构、灵活的锁机制和良好的性能优化特性,成为了MySQL中最受欢迎的存储引擎之一。在实际应用中,根据具体的业务需求和性能要求,合理地使用和优化InnoDB存储引擎,可以有效地提高数据库系统的性能和可靠性。
52 5
|
4月前
|
存储 SQL 缓存
InnoDB 存储引擎以及三种日志
InnoDB 存储引擎以及三种日志
33 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
206 0
|
7月前
|
存储 算法 关系型数据库
【MySQL技术内幕】5.7- InnoDB存储引擎中的哈希算法
【MySQL技术内幕】5.7- InnoDB存储引擎中的哈希算法
65 1