一、服务器硬件。

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性能的因素的更多相关文章

  1. mysql中影响数据库性能的因素讲解

    mysql中影响数据库性能的因素讲解 在本篇文章中我们给大家讲述了mysql中影响性能的因素以及相关知识点内容,有兴趣的朋友参考下 关于数据库性能的故事 面试时多多少少会讲到数据库上的事情,“你对数据 ...

  2. 影响MySQL性能的五大配置参数

    我们今天主要和大家分享的是对MySQL性能影响关系紧密的五大配置参数,以下就是文章的具体内容描述,希望会给你带来一些帮助在此方面. 以下的文章主要是对MySQL性能影响关系紧密的五大配置参数的介绍,我 ...

  3. Java技术学习之影响MySQL性能的配置参数

    本文将介绍MySQL参数的五大类设置,平时我们一般都很少碰它们,在进行MySQL性能调优和故障诊断时这些参数还是非常有用的. (一)连接连接通常来自Web服务器,下面列出了一些与连接有关的参数,以及该 ...

  4. redis性能测试以及影响性能的因素

    redis-benchmark测试工具的命令使使用方法及参数如下:redis-benchmark [-h <host>] [-p <port>] [-c <clients ...

  5. MySQL性能优化(二):优化数据库的设计

    原文:MySQL性能优化(二):优化数据库的设计 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.n ...

  6. redmine在linux上的mysql性能优化方法与问题排查方案

    iredmine的linux服务器mysql性能优化方法与问题排查方案     问题定位:   客户端工具: 1. 浏览器inspect-tool的network timing工具分析   2. 浏览 ...

  7. 初窥MySQL性能调优

    本文涉及:MySQL自带的性能测试工具mysqlslap的使用及几个性能调优的方法 性能测试工具—mysqlslap mysqlslap是MySQL自带的一款非常优秀的性能测试工具.使用它可以 模拟多 ...

  8. mysql性能调优与架构设计(一)商业需求与系统架构对性能的影响

    这里我们就拿一个看上去很简单的功能来分析一下. 需求:一个论坛帖子总量的统计附加要求:实时更新 在很多人看来,这个功能非常容易实现,不就是执行一条SELECT COUNT(*)的Query 就可以得到 ...

  9. Java EE (11) - 影响性能的因素

    垂直层(Tier)影响性能的因素 资源层数据库性能通常考虑以下方面的优化(MySQL为例):--使用哪种存储引擎:MyISAM vs. InnoDB, MERGE, MEMORY, Federated ...

随机推荐

  1. go语言入门(8)异常处理

    1,error接口 Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型,该接口的定义如下: type error interface { Error() strin ...

  2. redis—django-redis

    自定义连接池 这种方式跟普通py文件操作redis一样,代码如下: views.py import redis from django.shortcuts import render,HttpResp ...

  3. Centos使用光盘yum源

    yum查看所有源 yum repolist all 方法一:本机使用光盘源安装软件的设置 mkdir /media/cdrom mount /dev/cdrom  /media/cdrom vim / ...

  4. 关于Linux连接工具mobaxterm显示中文乱码问题

    本人用的是MobaXterm Personal 9.1版本.近期发现连接上服务器,查看日志时,发现中文乱码,无法正常显示.甚是苦恼.百度搜索该工具显示乱码问题,无一人解决.提倡更换连接工具.无意间发现 ...

  5. java线程基础巩固---如何给你的应用程序注入钩子程序

    这次做一个比较有意思的实验,我们知道当一个程序如果抛异常了其程序肯定会挂掉,那有木有可能在程序异常退出时能执行一段咱们自己的代码,比如说服务器在异常退出时需要做一些额外的资源清理,像这种场景就正好是这 ...

  6. 【2019 CCPC 秦皇岛】J - MUV LUV EXTRA

    原题: 题意: 给你两个整数a和b,再给你一个正小数,整数部分忽略不计,只考虑小数部分的循环节,对于所有可能的循环节,令其长度为l,在小数部分循环出现的长度为p,最后一个循环节允许不完整,但是缺少的部 ...

  7. iOS RAC使用补充

    1  延迟执行 [[RACScheduler mainThreadScheduler] afterDelay: schedule:^{ NSLog(@"延迟执行.."); }]; ...

  8. 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 ...

  9. @Transactional(转)

    概述@Transactional 是声明式事务管理 编程中使用的注解 添加位置 接口实现类或接口实现方法上,而不是接口类中访问权限:public 的方法才起作用 @Transactional 注解应该 ...

  10. Spring Security 自定义 登陆 权限验证

    转载于:https://www.jianshu.com/p/6b8fb59b614b 项目简介 基于Spring Cloud 的项目,Spring Cloud是在Spring Boot上搭建的所以按照 ...