影响mysql性能的因素
一、服务器硬件。
CPU不够快,内存不够多,磁盘IO太慢。
对于计算密集型的应用,CPU越可能去影响系统的性能,此时,CPU和内存将越成为系统的瓶颈。
当热数据大小远远超过系统可用内存大小时,IO资源可能成为系统的瓶颈。
网络对性能的影响往往发生在数据被大量查询时,特别是当我们用 redis等缓存层时,当缓存大量失效时,救护产生大量的网络传输,从而影响服务器的性能。
解决办法:
升级IO子系统,增加更多的内存。
1、如何选择CPU?
我们究竟是需要更多的CPU还是更快的CPU(频率&数量)?
- a、我们的应用是否是CPU密集型的,如果是CPU密集型的,那么我们需要的是更好的CPU而不是更多的CPU。因为目前的mysql版本还不支持多CPU对同一SQL的并发处理。
- b、我们系统的并发量如何?如果要提供系统的并发处理量,那么CPU越多越好。加入我们有32个CPU,那么就可以同时处理32条sql。
- c、还要看所使用mysql的版本。
QPS:同时处理SQL的数量。
web类应用,核心数量比频率更重要一些。因为这类应用并发量都比较大。
mysql5.0以前的版本对多核CPU的支持不怎么好,mysql5.6/5.7之后的版本对多核CPU的支持有了很大的改善,我们可以选择16核/32核的CPU。所以要使用多核CPU,尽量使用新版的mysql。
注意:
在64位架构的CPU上运行32位的操作系统,特别是云服务器和虚拟主机上。32位的操作系统意味着我们不能使用太大的内存,任何一个单独的进程都不能寻址到4G以上的内存。mysql是一个单进程的服务器,如果使用了32位的操作系统,将对mysql的性能有很大的限制。
3、内存
内存的IO效应要远远高于磁盘,就算和SSD、Fusion-IO这种高速磁盘相比,内存的速率也要高的多。
MyISAM存储引擎是将索引缓存在内存中,而将数据通过操作系统来缓存。
InnoDB存储引擎会同时在内存中缓存数据和索引
提示:
虽然内存是越多越好,但是对内存的影响也是有限的。并不能通过不断的增加内存来无限的增加系统的性能。当磁盘中所有数据都缓存到内存中时,在增加内存就没有意义了。
但是多余的内存可以增加操作系统其它服务的性能。
缓存不仅对读有益处,对写同样有益。虽然不能影响写操作,但是可以让写操作延缓。还可以把多次写入并成一次写入(界面的操作先更新内存,等内存中的某个值达到一定的值后,在一起写入)。
4、如何选择内存?
- 内存的主频和CPU的主频是类似的,建议选则主板支持的最大内存频率。频率越高内存的读取速度也越快。
- 每个通道内存尽量选择相同品牌,相同颗粒, 相同电压,相同校验技术和相同型号的内存条。
- 单条内存条的内存尽量足够大。
- 根据数据库数据量的大小和数据的增量速度来选择。
虽然内存对系统很重要,而且通过增加内存可以解决系统大部分的IO问题,单不能忽视IO子系统对系统的影响,有时候我们需要以牺牲内存为代价来提供IO子系统的性能。因为我们最终都是要实现数据在磁盘上持久存储。
5、磁盘的配置和选择
磁盘的性能的瓶颈一般体现在延迟和吞吐量两个方面。
- 使用传统机器磁盘。
- 使用RAID增强传统机器磁盘的性能。
- 使用固态存储SSD和PCIe卡。
- 使用网络存储NAS和SAN。
使用传统机器磁盘是最常见且使用最多的一种存储设备。
特点
- 价格较低
- 单盘的存储空间较大
- 读写速度相对较慢。
读取过程
- 移动磁头到磁盘表面上的正确位置。
- 等待磁盘旋转,使得所需数据在磁头之下。
- 等待磁盘旋转过去,所有所需数据都被磁头读出。(取决于主轴转动的速度和数据存储的密度)
如何选择传统机器磁盘
- 磁盘容量
- 传输速度(读取过程的第三步)
- 访问时间(读取过程的一二步)
- 主轴的转速(常见:7200/10000/15000转/s)
- 物理尺寸(磁盘的物理尺寸越小,磁头移动的时间也就会较短)
6、使用RAID技术增加传统机器磁盘的性能
什么是RAID?
RAID时磁盘冗余队列的简称(Redundant Arrays Of Independent Disks)
作用
可以把多个容量较小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术。拓展了传统磁盘的存储空间,减少了因为传统磁盘的损坏导致的数据丢失的问题。
RAID0
RAID0一般用在不担心数据丢失的情况,它的性价比最高。
RAID1
特点
- 当其中一块儿磁盘损坏后,系统会忽略已损坏的磁盘。
- RAID1可以提供很好的读性能,比RAID0的读性能更快,可以用来存储日志。而且可以在不同的磁盘间冗余数据。
RAID5
Ap,Bp,Cp,Dp分别代表各个区的奇偶检验值,如果磁盘0出现问题,可以通过其它三块儿磁盘上的数据和奇偶校验值来计算出磁盘0的数据,但是如果两块儿磁盘同时出现问题,则无法恢复数据。就每个存储单元的成本而言,这是最经济的一种冗余配置,因为整个阵列值需要一块儿额外的存储空间。
特点
在RAID5上随机写比较慢,因为每次写都需要在底层磁盘上发生2次读和2次写,一计算存储位检验位的数值。但是随机读和顺序读都很快,因为读取时并不需要计算奇偶校验位,因此RAID5比较适合以读为主的数据库业务。
RAID5最大的性能问题发生在磁盘数据大量失效的时候,因为数据需要重新分布到其它磁盘上,就会验证影响磁盘的性能,如果要用RAID5的话,用在从服务器上。
RAD10
最好的一种数据库配置
RAID级别的选择
固态存储
也称为闪存(Flash Menory)
特点
- 相比于机械磁盘,固态磁盘有更好的随机读写性能(对于数据库来说,随机读写性能相当重要)。
- 能更好的支持并发(能在大并发下提供很好的IO性能)。
- 固态磁盘比机械磁盘更容易损坏。
SSD(固态硬盘)
特点
- 使用SATA接口,替换传统磁盘而不需要任何改变。即可以把SSD直接插在服务器或者个人PC的SATA接口上就可以使用。
- SATA接口的SSD同样支持RAID技术。
PCI-E SSD (PCIE卡)
Fusion-IO就是一种使用闪存的PCIE卡设备。
特点
- 无法使用SATA接口,需要PCIE接口,独特的驱动和配置。
- 价格相对于SSD要贵,但是性能比SSD更好。
- 多数情况下,Fusion-IO卡还需要使用服务器的内存和CPU资源(即提升服务器的IO性能有时候需要牺牲服务器的内存,用内存换IO性能)。
- 不用配置RAID,成本是不能接受的。
适用场景
- 适用于存在大量随机IO的场景。
- 适用于解决单线程负载的IO瓶颈。
当我们只有一块儿固态磁盘时,我们应该怎么适用?
我们应该把它用在从服务器上,而不是主库上,因为从服务器的复制是单线程的,而主DB的写入时多线程的,为了产生更少的延迟,我们应该增加从服务器的IO性能,而且固态存储有易损耗的特点,在主服务器上使用也不太安全,容易损坏。
网络存储SAN和NAS
SAN和NAS是两种外部文件存储设备加载到服务器上的方法。
SAN(Storage Area Network)
SAN设备通过光纤连接到服务器,设备通过块儿接口访问,服务器可以将其当做硬盘使用。
SAN的顺序读写还比较快,但是随机读写就不如本地RAID磁盘快。
NAS(Network-Attached Storage)
NAS设备使用网络连接,通过基于文件的协议如NFS或SMB来访问(由于使用网络文件传输协议来访问,通常会有一些网上的延时)。
网络存储有随机读写性能不好,故不太适合用来存放数据库文件,但是可以用来存放数据库备份。因为数据库备份一般需要很大的存储空间。
网络
网络的性能瓶颈一般体现在延迟和带宽上。
对于网络来说,没有什么比带宽带来的影响更大。
就算是在内网环境下千兆内网,如果是在双十一大促中,前端有50台web服务器,每台有2M的数据传输,也就耗尽了所有的带宽。
网络的质量对性能的影响。
如果网络的质量不好,经常丢包,就会产生大量的重复发送,这也从另一个方面增加了网络的负担。更有甚者,可能产生网络风暴,把网络带宽占满,对整个服务器系统都产生影响。
建议
- 采用高性能和高带宽的网络接口设备和交换机(核心交换机最好使用万兆的设备)。
- 对多个网卡进行绑定,增加可用性和带宽。
- 尽可能的进行网络隔离,特别是内外网的隔离。
总结
CPU
- 64位的CPU一定要工作在64位的系统下。
- 对于并发比较高的场景,CPU的数量比频率重要。
- 对于CPU密集性场景和复杂sql则频率越高越好。
内存
- 选择主板能使用的最高频率的内存。
- 内存的大小对性能很重要,所以尽可能大。
I/O子系统
- PCI-E > SSD > RAID10 > 机械磁盘 > SAN.
二、操作系统。
3、数据库存储引擎的选择。
mysql最大的特定就是插件式的存储引擎。
4、数据库参数配置。
某些参数对数据库有决定性影响(该因素比前面三个加起来影响都大)。
5、数据库结构设计和SQL语句。
慢查询是大多数数据库问题的罪魁祸首。
库表结构的设计。
本文为袋鼠学习中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/protected/p/11437571.html