mysql---优化概述、架构与存储引擎

衡量指标

TPS: Transactions Per Second(每秒传输的事物处理个数),这是指服务器每秒处理的事务数,支持事务的存储引擎如InnoDB等特有的一个性能指标。

QPS: Queries Per Second(每秒查询处理量)同时适用于InnoDB和MyISAM引擎。

计算:
TPS = (COM_COMMIT + COM_ROLLBACK)/ UPTIME
COM_COMMIT : 表示事务提交数量
COM_ROLLBACK :表示事务回滚数量
UPTIME :引擎处理的时间

QPS = QUESTTIONS/UPTIME
QUESTTIONS:查询的处理数量
UPTIME:查询处理的时间

MySqlSlap

MySqlSlap是从MySQL的5.1.4版本开始官方提供的压力测试工具。
运行步骤:
1、创建schema、table、test、data。
2、运行负载测试,可以使用多个并发客户端连接。
3、测试环境清理(删除创建的数据、表等,断开连接。)

参数的使用

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

测试一

1000个客服端,重复10次,自动生产SQL语句,总共1000个查询。

mysqlslap -uroot-p123456 --concurrency=1000 --iterations 10 -a --auto-generate-sql-add-autoincrement --engine=innodb --number-of-queries=1000

测试结果
在这里插入图片描述

测试二

1,50,100,200个客服端,每一个测试3次,并打印内存,CPU信息。

mysqlslap -uroot -p123456 --concurrency=1,50,100,200 --iterations=3 --number-char-cols=5 --number-int-cols=5 --auto-generate-sql --auto-generate-sql-add-autoincrement --engine=myisam,innodb --create-schema='testmysql' --debug-info

在这里插入图片描述

测试三

500个客户端,分别使用myisam,innodb两种存储引擎,比较效率。

mysqlslap -uroot -p123456 --concurrency=500 --iterations=3 --number-char-cols=5 --number-int-cols=5 --auto-generate-sql --auto-generate-sql-add-autoincrement --engine=myisam,innodb --create-schema='testmysql' --debug-info

在这里插入图片描述
测试结果可以看出innodb的引擎效率比myisam的要快。

架构

在这里插入图片描述

MySQL逻辑架构-连接层

在这里插入图片描述
  当MySQL启动(MySQL服务器就是一个进程),等待客户端连接,每一个客服端连接请求,服务器都会新建一个线程处理(如果是线程池的话,则是分配一个空的线程),每个线程独立,拥有各自的内存处理空间,但是,如果这个请求只是查询,没关系,但是若是修改数据,很显然,当两个线程修改同一块内存是会引发数据同步问题的。
在这里插入图片描述
  连接服务器,服务器需要对其进行验证,也就是用户名、IP、密码验证,一旦连接成功,还要验证是否具有执行某个特定查询的权限(例如,是否允许客服端对某个数据库某个表的某个操作)

SQL处理层

在这里插入图片描述
  这一层主要功能有:SQL语句的解析、优化,缓存的查询,MySQL内置函数的实现,跨存储引擎功能(所谓跨存储引擎就是说每个引擎都需要提供的功能(引擎对外提供接口)),例如:存储过程、触发器、视图等。
  1、如果是查询语句(select语句),首先会查缓存是否已有相应结果,有则返回结果,无则进行下一步(如果不是查询语句,同样调到下一步)。
  2、解析查询,创建一个内部数据结构(解析树),这个解析树主要用来SQL语句的语义与语法解析。
  3、优化:优化SQL语句,例如重写查询,决定表的读取顺序,以及选择需要的索引等。这一阶段用户是可以查询的,查询服务器优化器是如何进行优化的,便于用户重构查询和修改相关配置,达到最优化。这一阶段还涉及到存储引擎,优化器会询问存储引擎,比如某个操作的开销信息、是否对特定索引有查询优化等。

缓存

MySQL中缓存,一个是缓存SQL语句(默认开启的),一个是查询结果缓存(虽然这个可以大大加快了查询速度,但是不建议开启,可能会把机器搞宕机了)。不过从8.0开始,查询结果缓存被弃用了。
如果是5.6可以通过下面语句查询是否开启,和设置缓存区大小。

//数据缓存是否开启
show variables like '%query_cache_type%'
//缓存的大小
show variables like '%query_cache_size%'

//设置缓冲区大小
SET GLOBAL query_cache_size = 4000; 
SET GLOBAL query_cache_size = 134217728;

解析查询

在这里插入图片描述
我们平时写的查询语句,MySQL并不一定是按照我们的写的顺序去执行的,它会解析SQL语句,然后得到一个新的查询语句进行查询。解析SQL语句顺序的逻辑。
在这里插入图片描述

MySQL本身优化

在这里插入图片描述
通过explain分析查询过程,语句的类型是SIMPLE,表示product_info,总行数rows,执行条件using where。

在这里插入图片描述
通过explain分析查询过程,因为1=1是永TRUE,所以可以优化掉后面的部分,所以Extra是空的。
在这里插入图片描述
通过explain分析查询过程,因为id是主键,不能为空,所以Extra提示错误。

存储引擎

//查看当前MySQL已提供什么存储引擎,可以看到默认使用的引擎
show engines;

MyISAM

MySQL5.5之前默认的存储引擎。
MyISAM存储引擎由MYD和MYI组成。
在这里插入图片描述
在MySQL的data中找打这个表,发现下面有这三个文件。
在这里插入图片描述
frm :存储表结构,是任何存储引擎都具备的
myd:存储数据库文件
myi:存储索引文件
也是数据和索引是分开。

特性

1、并发性与锁级别-表级锁
2、支持全文检索
3、支持数据压缩(压缩索引文件)myisampack -b -f testmysam.MYI

适用场景

非事务型应用(数据仓库,报表,日志数据)
只读类应用
空间类运用(空间函数、坐标)

Innodb

MySQL5.5以及以后版本默认存储引擎。

//查看表空间的类型
show VARIABLES like 'innodb_file_per_table'

在这里插入图片描述
ON:独立表空间:tablename.ibd 就是每一个表都有自己的空间。
在这里插入图片描述
OFF:系统表空间:ibddataX 所有的表共用一个表空间
在这里插入图片描述

MySQL5.6以前默认为系统表空间。
系统表空间和独立表空间区别
1、系统表空间无法简单的收缩文件大小。
2、独立表空间可以通过optimize table 收缩系统文件。
3、系统表空间会产生IO瓶颈。
4、独立表空间可以同时向多个文件刷新数据。
建议:Innodb使用独立表空间。

特性

1、innodb是一种事务性存储引擎。
2、完全支持事务的ACID特性。
3、innodb支持行级锁(并发程度更高)

适用场景

innodb适合于大多数OLTP应用。

和MyISAM的对比。

在这里插入图片描述

以下存储引擎了解即可

CSV

组成

数据以文本方式存储在文件。
.csv文件存储内容。
.csm文件存储表的单元数据如表状态和数据量。
.frm 表结构。
在这里插入图片描述

特点

1、以CSV格式进行数据存储。
2、所有列都不能为null。
3、不支持索引(不适合大表,不适合在线处理)。
4、可以对数据文件直接编辑(保存文本文件内容)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Archive

组成

以zlib对表数据进行压缩,磁盘i/o更少,数据存储在ARZ为后缀的文件中。
在这里插入图片描述

特点

1、只支持insert和select操作。
2、只允许在自增ID列上加索引。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用场景:
日志和数据采集应用。

Memory

特点

1、文件系统存储特点,也称HEAP存储引擎,所有数据保存在内存中。
2、支持HASH索引和BTree索引。
3、所有字段都是固定长度varchar(10)= char(10)。
4、不支持Blog和Text等大字段。
5、Memory存储引擎使用表级锁。
6、最大最小由max_heap_table_size参数决定。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用场景:
1、hash索引用于查找或者是影射表(邮编和地区的对应表)。
2、用于保存数据分析中产生的中间表。
3、用于缓存周期性聚合数据的结果表

memory数据易丢失,所以要求数据可再生。

Ferderated

特点

1、提供了访问远程MySQL服务器上表的方法。
2、本地不存储数据,数据全部放到远程服务器上。
3、本地需要保存表结构和远程服务器的连接信息。

使用场景

偶尔的统计分析及手工查询。
如何使用:
默认禁止,启用需要在启动时增加Ferderated参数。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值