数据库性能

影响性能的几个方面

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

CPU资源和可用内存大小

计算密集型的应用,CPU资源影响整个系统的性能,成为系统的瓶颈

热数据的大小远远超过可用内存大小,IO系统成为瓶颈

网络:大量的数据被查询,memache,当缓存大量生效时,产生大量的网络传输

升级IO子系统

如何选择CPU

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

更好的CPU,而不是更多的CPU

当前版本不支持多CPU对同一SQL并发处理

系统的并发量如何

Web类应用:核心数量比频率更重要

64位使用32位的服务器版本

MyISAM

索引—内存
数据—OS

InnoDB

内存,数据—内存

磁盘的配置和选择

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

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

  1. 移动磁头到磁盘表面上的正确位置
  2. 等待磁盘旋转,使得所需的数据在磁头之下
  3. 等待磁盘旋转过去,所有所需要的数据都被磁头读出

访问时间(1+2)
传输速度(3)

如何选择传统机器硬盘

  1. 存储容量
  2. 传输速度
  3. 访问时间
  4. 主轴转速
  5. 物理尺寸

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

RAID

磁盘冗余队列的简称(Redundant Arrays of Independent Disk)

把多个容量较小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术

RAID 0(Baidu)

简单来说:多个磁盘串联到一起

写入数据:可以并发的向多个磁盘中写入

mysqlcpu 使用 mysql对cpu要求_mysqlcpu 使用

RAID 1

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

mysqlcpu 使用 mysql对cpu要求_服务器_02

RAID 5

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

RAID 10

分片的镜像,RAID1—>两组RAID1—>RAID0

读写良好

mysqlcpu 使用 mysql对cpu要求_mysqlcpu 使用_03

mysqlcpu 使用 mysql对cpu要求_数据_04

RAID5出现磁盘损坏时,IO大幅下降,造成主从延迟问题

固态存储

设备

  • SSD
  • PCI-E SSD

更好的随即读写能力

更好的支持并发

更容易损坏

SSD

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

PCI-E SSD

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

固态存储的使用场景

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

网络存储SAN和NAS

外部文件存储设备加载到服务器上的方法

SAN:Storage Area Network

通过光纤连接到服务器,设备通过块接口访问,服务器可以将其当做硬盘来使用

大量顺序读写

NAS:Network Attached Storage

使用网络连接,通过基于文件的协议如NFS或SMB来访问

适合场景

顺序IO性能比较好,随即IO差强人意

  • 数据库备份

磁盘性能的限制:延迟,吞吐量
网络性能的限制:延迟,带宽
网络质量对性能的影响:丢包问题,网络风暴造成带宽被占满

建议

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

总结

CPU

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

内存

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

IO子系统

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