影响性能的几个方面

  • CPU,内存,磁盘IO
  • 服务器系统
  • 数据库存储引擎的选择(mysql的插件式存储引擎):MyISAM-不支持事务,表级锁;InnoDB-事务级存储引擎,完美支持行级锁,事务ACID特性
  • 数据库参数配置(4>>1+2+3)
  • 数据库结构设计和SQL语句
mysqlopti

CPU资源和可用内存大小

  • 计算密集型的应用,CPU资源影响整个系统的性能,成为系统的瓶颈
  • 热数据的大小远远超过可用内存大小,IO系统成为瓶颈
  • 网络:大量的数据被查询,memache,当缓存大量生效时,产生大量的网络传输;网络可以看成另外一种IO资源
    升级IO子系统

如何选择CPU

频率&数量?
cpu
成本因素,预算有限,老板想着要降低成本…

我们的应用是否是CPU密集型

  • 更好的CPU,而不是更多的CPU
  • 当前版本不支持多CPU对同一SQL并发处理(…不知道什么时候能够推出)

系统的并发量如何

  • Web类应用:核心数量比频率更重要
  • 64位使用32位的服务器版本(需要注意 ^ ^)
衡量数据库处理能力的指标:QPS 同时处理SQL的数量

内存

store
将数据加载到内存中,更能提高效率

MyISAM

  • 将索引加载到内存上
  • 将数据通过OS进行缓存

InnoDB

  • 内存,数据都放在内存上

磁盘的配置和选择

  • 使用传统机器硬盘
  • 使用RAID增强传统机器硬盘的性能
  • 使用固态存储SSD和PCIe卡
  • 使用网络存储NAS和SAN

传统机器磁盘读取数据的过程

  • 移动磁头到磁盘表面上的正确位置
  • 等待磁盘旋转,使得所需的数据在磁头之下
  • 等待磁盘旋转过去,所有所需要的数据都被磁头读出
访问时间(1+2)  
传输速度(3)  

如何选择传统机器硬盘

  • 存储容量
  • 传输速度
  • 访问时间
  • 主轴转速
  • 物理尺寸

使用RAID增加传统机器磁盘的性能

RAID

  • 磁盘冗余队列的简称(Redundant Arrays of Independent Disk)
  • 把多个容量较小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术

RAID0(Baidu)

  • 称之为条带
  • 简单来说:多个磁盘串联到一起
  • 写入数据:可以并发的向多个磁盘中写入
raid0

RAID1

– 磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一个磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能的情况下最大限度的保证系统的可靠性和可修复性
raid1

RAID5

– 分布式奇偶校验磁盘阵列,把数据分散到多个磁盘上,任何一个盘数据失效,都可以从奇偶校验中重建.但是如果两个盘失效,则整个卷的数据都无法恢复
 raid10

RAID10

– 分片的镜像,RAID1—>两组RAID1—>RAID0
– 读写良好
– RAID1和RAID0的结合
raid10
raidcom
RAID5出现磁盘损坏时,IO大幅下降,造成主从延迟问题

固态存储

设备
  • SSD
  • PCI-E SSD
特点
  • 更好的随即读写能力
  • 更好的支持并发
  • 更容易损坏

SSD

  • 使用SATA接口,可以替代传统磁盘而不需要任何改变(受限于接口的影响)
  • 同样支持RAID技术

PCI-E SSD

  • 无法使用SATA接口,需要独特的驱动和配置
  • 价格相对于SSD要贵,性能比SSD要好
  • 需要牺牲CPU和内存,提升IO性能

固态存储的使用场景

  • 适用于存在大量随机IO的场景
  • 解决单线程负载的IO瓶颈

网络存储SAN和NAS

外部文件存储设备加载到服务器上的方法
SAN:Storage Area Network
  • 通过光纤连接到服务器,设备通过块接口访问,服务器可以将其当做硬盘来使用
  • 大量顺序读写
NAS:Network Attached Storage
使用网络连接,通过基于文件的协议如NFS或SMB来访问

适合场景

  • 顺序IO性能比较好,随即IO差强人意
  • 数据库备份
磁盘性能的限制:延迟,吞吐量
网络性能的限制:延迟,带宽
网络质量对性能的影响:丢包问题,网络风暴造成带宽被占满

建议

  • 采用高性能和高带宽的网络接口设备和交换机,核心交换机采用万M
  • 对多个网卡进行绑定,增强可用性和带宽
  • 尽可能的进行网络隔离(不建议数据库暴露在外网环境,不安全)

总结

CPU

  •  64位的CPU一定要工作在64位的系统下
  • 对于并发比较高的场景CPU的数量比频率重要
  • 对于CPU密集型场景和复杂SQL则频率越高越好

内存

  • 选择主板所能使用的最高频率的内存
  • 内存的大小对性能很重要,所以尽可能的大

IO子系统

PCIe > SSD > Raid10 > 磁盘 > SAN(备份)