Innodb存储引擎-阿里云开发者社区

开发者社区> 技术小牛人> 正文

Innodb存储引擎

简介:
+关注继续查看

特点:支持事务。锁定机制的改进,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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
「Spark从精通到重新入门(一)」Spark 中不可不知的动态优化
Apache Spark 自 2010 年面世,到现在已经发展为大数据批计算的首选引擎。而在 2020 年 6 月份发布的Spark 3.0 版本也是 Spark 有史以来最大的 Release,其中将近一半的 issue 都属于 SparkSQL。这也迎合我们现在的主要场景(90% 是 SQL),同时也是优化痛点和主要功能点。我们 Erda 的 FDP 平台(Fast Data Platform)也从 Spark 2.4 升级到 Spark 3.0 并做了一系列的相关优化,本文将主要结合 Spark 3.0 版本进行探讨研究。
8 0
Angular jasmine TestBed.configureTestingModule的工作原理
Angular jasmine TestBed.configureTestingModule的工作原理
3 0
Angular jasmine单元测试框架spec的运行时数据结构
Angular jasmine单元测试框架spec的运行时数据结构
3 0
Angular jasmine单元测试框架里spyOn的创建原理
Angular jasmine单元测试框架里spyOn的创建原理
3 0
Angular Component代码和编译后生成的JavaScript代码
Angular Component代码和编译后生成的JavaScript代码
3 0
为什么Spartacus单元测试里对http返回的Observable对象调用subscribe时,会触发依赖注入的框架代码
为什么Spartacus单元测试里对http返回的Observable对象调用subscribe时,会触发依赖注入的框架代码
3 0
Angular 依赖注入 useClass 的实例创建位置
Angular 依赖注入 useClass 的实例创建位置
3 0
Angular单元测试框架里API toHaveBeenCalledTimes的工作原理
Angular单元测试框架里API toHaveBeenCalledTimes的工作原理
3 0
Angular jasmine单元测试框架spied method的调用记录数据结构
Angular jasmine单元测试框架spied method的调用记录数据结构
3 0
在Angular单个的单元测试里,调用多次detectChange,会重复执行ngAfterViewInit hook吗
在Angular单个的单元测试里,调用多次detectChange,会重复执行ngAfterViewInit hook吗
3 0
3320
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载