Innodb存储引擎

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

特点:支持事务。锁定机制的改进,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
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 SQL 关系型数据库
Mysql系列-4.Mysql存储引擎-InnoDB(下)
Mysql系列-4.Mysql存储引擎-InnoDB
46 0
|
2月前
|
存储 缓存 关系型数据库
MySQL - 存储引擎MyISAM和Innodb
MySQL - 存储引擎MyISAM和Innodb
|
4月前
|
存储 SQL 关系型数据库
MySQL存储引擎之MyISAM和InnoDB
MySQL存储引擎之MyISAM和InnoDB
43 0
|
2月前
|
存储 SQL 关系型数据库
Mysql专栏 - mysql、innodb存储引擎、binlog的工作流程
Mysql专栏 - mysql、innodb存储引擎、binlog的工作流程
72 0
|
3月前
|
存储 关系型数据库 MySQL
MySQL存储引擎 InnoDB、MyISAM、Memory存储引擎的特点与区别
MySQL存储引擎 InnoDB、MyISAM、Memory存储引擎的特点与区别
54 0
|
3月前
|
存储 缓存 关系型数据库
Mysql系列-4.Mysql存储引擎-InnoDB(上)
Mysql系列-4.Mysql存储引擎-InnoDB
38 0
|
3月前
|
存储 SQL 关系型数据库
二十、MySQL技术体系之InnoDB存储引擎的索引
二十、MySQL技术体系之InnoDB存储引擎的索引
58 0
|
8月前
|
存储 SQL 缓存
InnoDB、MyISAM、Memory 存储引擎 的区别
InnoDB、MyISAM、Memory 存储引擎 的区别
71 0
|
4月前
|
存储 缓存 关系型数据库
MySQL技术内幕:InnoDB存储引擎
MySQL技术内幕:InnoDB存储引擎
|
4月前
|
存储 关系型数据库 MySQL
⑩【MySQL】存储引擎详解, InnoDB、MyISAM、Memory。
⑩【MySQL】存储引擎详解, InnoDB、MyISAM、Memory。
38 0