什么影响了mysql性能

什么影响了mysql性能

一、影响性能的几个方面
1.服务器硬件(CPU、内存、磁盘I/O)
2.操作系统
3.数据库存储引擎的选择(myisam,innodb)
4.数据库参数配置
5.数据库结构设计和sql语句


二、硬件对mysql性能的优化

CPU:
1.对于cpu密集型的应用,我们需要加快sql语句的处理速度。由于mysql的sql语句处理是单线程的,因此我们需要更好cpu而不是更多的cpu。
2.一个cpu同时只能处理一条sql语句。所以,高并发量的情况下,就需要更多的cpu而不是更快的cpu。
3.64位已经是默认配置了。


内存的选择:
1.内存的io要远高于磁盘,即便是SSD或者Fusion_IO。所以把数据缓存到内存中读取,可以大大提高性能。 常用的mysql引擎中,MyISAM把索引缓存到内存,数据不缓存。而InnoDB同时缓存数据和索引。
2.缓存不仅对读取有益,对写入也是可以优化的,我们可以通过缓存,将多次写入合并成一次写入操作。
3.怎么选择内存:主频尽量大,型号尽量相同,单条内存容量尽量打。


磁盘的选择:
1.传统机械磁盘
2.RAID增强传统机械磁盘(把多个容量小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术)
3.固态存储SSD和PCIe卡
4.网络存储NAS和SAN


网络性能
网络带宽的影响,不必多说。可能很多人认为数据库服务器与Web服务器的通信是在内网下的,带宽影响不大。其实在大促的情况下,我们有50台服务器,同时向数据库请求2M的数据,那么就需要100M的带宽了。 
1.采用高性能和高带宽的网络接口设备和交换机。
2.对多个网卡进行绑定,增强可用性和带宽。
3.尽可能的进行网络隔离


三、mysql体系结构

1.连接管理与安全验证(验证连接信息)
a.每个客户端都会建立一个与服务器连接的线程,服务器会有一个线程池来管理这些连接。
b.如果客户端需要连接到MYSQL数据库还需要进行验证,包括用户名、密码、主机信息等。

2.解析器
a.SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
b.将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
c.如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的。

3.优化器
a.SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。
b.用一个例子就可以理解: select uid,name from user where gender = 1;
1.这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤。
2.这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤。
3.将这两个查询条件联接起来生成最终查询结果。

4.查询缓存
a.如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
b.这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。

5.执行器
a.执行器包括执行查询语句,返回查询结果,生成执行计划包括与存储引擎的一些处理操作。

6.存储引擎
b.存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。


四、mysql执行流程

1.客户端连接mysql服务。
2.【连接管理机制】会建立一个与服务器连接的线程并进行校验客户端的信息。
3.如果验证通过,会进入【解析器】进行sql语句的分解和校验。
4.如果sql(查询语句)语句校验成功会进入【缓存器】进行命中,如果缓存命中成功,直接进入【执行器】返回结果。
5.如果缓存没有命中,或者非查询sql语句会进入【优化器】进行sql语句优化操作,之后会进入【执行器】进行执行。

五、mysql储存引擎(主要)
1.innoDB存储引擎
(1)innodb存储引擎的mysql表提供了事务,回滚以及系统崩溃修复能力和多版本迸发控制的事务的安全。
(2)innodb支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空的话怎会进行自动存现有的值开始增值,如果有但是比现在的还大,则就保存这个值。
(3)innodb存储引擎支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。
(4)innodb存储引擎最重要的是支持事务,以及事务相关联功能。
(5)innodb存储引擎支持mvcc的行级锁。
(6)innodb存储引擎索引使用的是B+Tree

2.MyISAM存储引擎
1、MyISAM   这种存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁,主要用于高负载的select。
2、MyISAM   类型的表支持三种不同的存储结构:静态型、动态型、压缩型。
(1)静态型:就是定义的表列的大小是固定(即不含有:xblob、xtext、varchar等长度可变的数据类型),这样mysql就会自动使用静态myisam格式。使用静态格式的表的性能比较高。
(2)动态型:如果列(即使只有一列)定义为动态的(xblob, xtext, varchar等数据类型)。这时myisam就自动使用动态型,虽然动态型的表占用了比静态型表较少的空间,但带来了性能的降低,
(3)压缩型:如果在这个数据库中创建的是在整个生命周期内只读的表,则这种情况就是用myisam的压缩型表来减少空间的占用。
3、MyISAM也是使用B+tree索引但是和Innodb的在具体实现上有些不同。

3.MyISAM存储引擎和innoDB存储引擎主要区别:
1).MyISAM是非事务安全型的,而InnoDB是事务安全型的。
2).MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
3).MyISAM支持全文类型索引,而InnoDB不支持全文索引。
4).MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
5).MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
6).InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

应用场景:
1).MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
2).InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值