MySQL数据库(六):数据库存储引擎

1、数据库存储引擎

一共四层:第一层为网络连接层,第二层为服务层,第三层为存储引擎层,第四层为文件存储层
在这里插入图片描述

1.1服务层

在这里插入图片描述

1.2存储引擎层

负责MySQL中数据的存储与提取。 服务器中的查询执行引擎通过API与存储引擎进行通信,通过接口屏蔽了不同存储引擎之间的差异。MySQL采用插件式的存储引擎。MySQL为我们提供了许多存储引擎,每种存储引擎有不同的特点。我们可以根据不同的业务特点,选择最适合的存储引擎。如果对于存储引擎的性能不满意,可以通过修改源码来得到自己想要达到的性能。例如阿里巴巴的X-Engine,为了满足企业的需求facebook与google都对InnoDB存储引擎进行了扩充。
查看存储引擎show engines;
查看使用的是什么引擎show variables like '%storage_engine%'

2、MySQL引擎之MyISAM

①定义:MySQL5.5之前的版本默认存储引擎,MyISAM存储引擎表由MYD(数据文件)和MYI(索引文件)组成
在这里插入图片描述
在这里插入图片描述
②锁的概念:锁主要作用是管理共享资源的并发访问,用于实现事务的隔离性
③锁的类型,它的力度为表级和行级锁
共享锁(也称读锁):针对同一份数据,多个读操作可以同时进行而不会互相影响
独占锁(也称写锁):当前写操作没有完成前,它会阻断其他写锁和读锁
④myisam引擎的特性:1.它的锁是表级锁,所以它的并发性不是很好,2.它的表损坏之后可以去修复,检查表状态check table 表名;修复表repair table 表名;3.它支持表的压缩myisam -b -f myisam.MYI节约空间使得查询速度更快(如果表中的数据发生了变化,那么就要重新进行压缩),它的应用场景为1.非事务型应用2.只读类应用,财务报表,选择密集型和插入密集型等
在这里插入图片描述

3、MySQL引擎之InnoDB

MySQL5.5 及之后版本默认存储引擎,支持事务的ACID特性,Innodb使用表空间进行数据存储通过查看innodb_file_per_table来看存储的状态,如果是系统表空间则不会再文件不会再当前数据库下,而是在系统中
ON:独立表空间,tablename.ibd
OFF:系统表空间:ibdataX X是一个数字
在这里插入图片描述
在这里插入图片描述
①系统表空间和独立表空间如何选择:1.系统表空间会产生IO瓶颈,刷新数据的时候是顺序进行的所以会产生文件的IO瓶颈 2.独立表空间可以同时向多个文件刷新数据
②Innodb存储引擎的特性:1.支持事务的ACID特性2.Innodb支持行级锁,可以最大程度的支持并发
在这里插入图片描述

4、其它的引擎

4.1MySQL引擎之CSV

①创建表的时候,不支持自增字段的创建,不支持索引的创建(主键),不支持非空字段
②数据以文本方式存储在文件中,.CSV文件存储表内容,.CSM文件存储表的元数据如表状态和数据量,.frm文件存储表结构信息

4.2MySQL引擎之Memory

①定义:也称HEAP存储引擎,所以数据保存在内存中,如果MySQL服务重启数据会丢失,但是表结构会保存下来,容易丢失数据
②特点:支持HASH索引和BTree索引,所有字段都为固定长度 varchar(10)=char(10),不支持BLOB和TEXT等大字段,Memory存储引擎使用表级锁
③选择情况:大部分情况下,InnoDB都是正确的选择,可以简单地归纳为一句话“除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎

5、MySQL的基准测试

5.1定义

①基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以评估变化对性能的影响
②基准测试是针对系统设置的一种压力测试

5.2特点

直接、简单、易于比较,用于评估服务器的处理能力
可能不关心业务逻辑,所使用的查询和业务的真实性可以和业务环境没关系

5.3压力测试特点

对真实的业务数据进行测试,获得真实系统所能承受的压力,需要针对不同主题,所使用的数据和查询也是真实用到的,基准测试是简化了的压力测试

5.4目的

①建立MySQL服务器的性能基准线,确定当前MySQL服务器运行情况,确定优化之后的效果
②模拟比当前系统更高的负载,已找出系统的扩展瓶颈,可以增加数据库并发,观察QPS(每秒处理的查询数),TPS(每秒处理的事务数)变化,确定并发量与性能最优的关系
③测试不同的硬件、软件和操作系统配置
④证明新的硬件设备是否配置正确

5.5对整个系统进行基准测试的优缺点

5.5.1优点

①能够测试整个系统的性能,包括web服务器缓存、数据库等
②MySQL并不总是出现性能问题的瓶颈,如果只关注MySQL可能忽略其他问题,能反映出系统中各个组件接口间的性能问题体现真实性能状况

5.5.2缺点

①基准测试最重要的就是简单,可能对不同的方案进行测试,找到最优的方案,基准测试进行的时间一定要短,否则就要花费大量的时间进行基准测试
②测试设计复杂,消耗时间长

5.6对MySQL进行基准测试的优缺点

优点:测试设计简单,所耗费时间短
缺点:无法全面了解整个系统的性能基线
单位时间内处理的事务数(TPS)
单位时间内处理的查询数(QPS)

5.7MySQL基准测试之mysqlslap

再数据库外面输入mysqlslap --help可以查看下面的信息
–auto-generate-sql 由系统自动生成SQL脚本进行测试
–auto-generate-sql-add-autoincrement 在生成的表中增加自增ID
–auto-generate-sql-load-type 指定测试中使用的查询类型 读写或者混合,默认是混合
–auto-generate-sql-write-number 指定初始化数据时生成的数据量
–concurrency 指定并发线程的数量 1,10,50,200
–engine 指定要测试表的存储引擎,可以用逗号分割多个存储引擎
–no-drop 指定不清理测试数据
–iterations 指定测试运行的次数 指定了这个不能指定no-drop
–number-of-queries 指定每一个线程执行的查询数量
–debug-info 指定输出额外的内存及CPU统计信息
–number-int-cols 指定测试表中包含的INT类型列的数量
–number-char-cols 指定测试表中包含的varchar类型的数量
–create-schema 指定了用于执行测试的数据库的名字,测试完成后就会删除这个库
–query 用于指定自定义SQL的脚本
–only-print 并不运行测试脚本,而是把生成的脚本打印出来
例子如下 :

mysqlslap --concurrency=1,50,100,200 --iterations=3 --number-int-cols=5 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-add-autoincrement --engine=myisam,innodb --number-of-queries=10 --create-schema=test

5.8innodb和myisam的区别

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值