影响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
影响mysql性能的因素的更多相关文章
- mysql中影响数据库性能的因素讲解
mysql中影响数据库性能的因素讲解 在本篇文章中我们给大家讲述了mysql中影响性能的因素以及相关知识点内容,有兴趣的朋友参考下 关于数据库性能的故事 面试时多多少少会讲到数据库上的事情,“你对数据 ...
- 影响MySQL性能的五大配置参数
我们今天主要和大家分享的是对MySQL性能影响关系紧密的五大配置参数,以下就是文章的具体内容描述,希望会给你带来一些帮助在此方面. 以下的文章主要是对MySQL性能影响关系紧密的五大配置参数的介绍,我 ...
- Java技术学习之影响MySQL性能的配置参数
本文将介绍MySQL参数的五大类设置,平时我们一般都很少碰它们,在进行MySQL性能调优和故障诊断时这些参数还是非常有用的. (一)连接连接通常来自Web服务器,下面列出了一些与连接有关的参数,以及该 ...
- redis性能测试以及影响性能的因素
redis-benchmark测试工具的命令使使用方法及参数如下:redis-benchmark [-h <host>] [-p <port>] [-c <clients ...
- MySQL性能优化(二):优化数据库的设计
原文:MySQL性能优化(二):优化数据库的设计 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.n ...
- redmine在linux上的mysql性能优化方法与问题排查方案
iredmine的linux服务器mysql性能优化方法与问题排查方案 问题定位: 客户端工具: 1. 浏览器inspect-tool的network timing工具分析 2. 浏览 ...
- 初窥MySQL性能调优
本文涉及:MySQL自带的性能测试工具mysqlslap的使用及几个性能调优的方法 性能测试工具—mysqlslap mysqlslap是MySQL自带的一款非常优秀的性能测试工具.使用它可以 模拟多 ...
- mysql性能调优与架构设计(一)商业需求与系统架构对性能的影响
这里我们就拿一个看上去很简单的功能来分析一下. 需求:一个论坛帖子总量的统计附加要求:实时更新 在很多人看来,这个功能非常容易实现,不就是执行一条SELECT COUNT(*)的Query 就可以得到 ...
- Java EE (11) - 影响性能的因素
垂直层(Tier)影响性能的因素 资源层数据库性能通常考虑以下方面的优化(MySQL为例):--使用哪种存储引擎:MyISAM vs. InnoDB, MERGE, MEMORY, Federated ...
随机推荐
- go语言入门(8)异常处理
1,error接口 Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型,该接口的定义如下: type error interface { Error() strin ...
- redis—django-redis
自定义连接池 这种方式跟普通py文件操作redis一样,代码如下: views.py import redis from django.shortcuts import render,HttpResp ...
- Centos使用光盘yum源
yum查看所有源 yum repolist all 方法一:本机使用光盘源安装软件的设置 mkdir /media/cdrom mount /dev/cdrom /media/cdrom vim / ...
- 关于Linux连接工具mobaxterm显示中文乱码问题
本人用的是MobaXterm Personal 9.1版本.近期发现连接上服务器,查看日志时,发现中文乱码,无法正常显示.甚是苦恼.百度搜索该工具显示乱码问题,无一人解决.提倡更换连接工具.无意间发现 ...
- java线程基础巩固---如何给你的应用程序注入钩子程序
这次做一个比较有意思的实验,我们知道当一个程序如果抛异常了其程序肯定会挂掉,那有木有可能在程序异常退出时能执行一段咱们自己的代码,比如说服务器在异常退出时需要做一些额外的资源清理,像这种场景就正好是这 ...
- 【2019 CCPC 秦皇岛】J - MUV LUV EXTRA
原题: 题意: 给你两个整数a和b,再给你一个正小数,整数部分忽略不计,只考虑小数部分的循环节,对于所有可能的循环节,令其长度为l,在小数部分循环出现的长度为p,最后一个循环节允许不完整,但是缺少的部 ...
- iOS RAC使用补充
1 延迟执行 [[RACScheduler mainThreadScheduler] afterDelay: schedule:^{ NSLog(@"延迟执行.."); }]; ...
- fwrite() and UTF8 转载
4 down vote If you know the data is in UTF8 than you want to set up the header. I wrote a solution a ...
- @Transactional(转)
概述@Transactional 是声明式事务管理 编程中使用的注解 添加位置 接口实现类或接口实现方法上,而不是接口类中访问权限:public 的方法才起作用 @Transactional 注解应该 ...
- Spring Security 自定义 登陆 权限验证
转载于:https://www.jianshu.com/p/6b8fb59b614b 项目简介 基于Spring Cloud 的项目,Spring Cloud是在Spring Boot上搭建的所以按照 ...