2.mysql存储引擎
常见的mysql存储引擎有MyISAM,InnoDB
1.存储引擎MyISAM
(1)它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表
(2)每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:
.frm(表结构信息)
MYD(MYData,数据信息)
MYI(MYIndex,索引信息)
特性:
并发性与锁级别:表级锁(并发性差,对只读还可以)
表损坏修复:check table tableName; repair table tableName
支持的索引类型
支持数据压缩:myisampack –b –f myIsam.MYI命令(对已经压缩的表不能进行写操作)
限制:
使用场景:非事务型应用(非财务应用);只读类应用(报表应用);空间类应用(空间函数jps等)
2.存储引擎InnoDB
(1)Innodb使用表空间进行数据存储
使用表空间配置参数:innodb_file_per_table
ON:每一个独立表空间:tablename.ibd;
OFF:系统表空间:ibdataX
系统表空间和独立表空间如何选择:
比较:
1.系统表空间无法简单的收缩文件大小;独立表空间可以通过optimize table命令收缩文件。
2.系统表空间会产生IO瓶颈;独立表空间可以同事向多个文件刷新数据。
3.建议使用独立表空间(6以后为默认配置)
把原来在系统表空间的表转移到独立表空间中的方法,步骤:
1.使用mysqldump导出所有数据表数据;
2.停止Mysql服务,修改参数,并删除Innoda相关文件;
3.重启mysql服务,重建Innodb系统表空间;
4.重新导入数据。
(2)存储引擎Innodb特性
Innodb数据字典信息,frm是mysql系统产生的,Undo回滚段,支持外键,AUTO_INCREMENT自动增加列属性
Innodb是一种事务性存储引擎,完全支持事务的ACID特性(atomicity,consistency,isolation,durability),Redo Log(持久性)和Undo Log(未提交事务的回滚)
(3)支持行级锁,可以最大程度支持并发,行级锁是由存储引擎层实现的;
锁对主要作用是管理共享资源的并发访问,锁用于实现事务的隔离性;
锁的类型:1.共享锁(也称读锁)2.独占锁(也称写锁)
锁的粒度:粒度越小并发性越高1.表级锁,在mysql服务层实现2.行级锁,在存储引擎中实现
阻塞和死锁:
阻塞:一个事务等在另一个是事务的锁释放,称为阻塞
死锁:两个或两个以上的事务,在执行过程中,相互占用对方的等待的资源出现的异常。系统会对其自动处理。选取对其占用资源最少的进行回滚。
Inoodb状态检查:show engine inoodb status
(4)适用场景:适用大多数OLTP应用
数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLTP :系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
OLAP :系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。