数据库性能
影响性能的几个方面
- CPU,内存,磁盘IO
- 服务器系统
- 数据库存储引擎的选择(mysql的插件式存储引擎):MyISAM-不支持事务,表级锁;InnoDB-事务级存储引擎,完美支持行级锁,事务ACID特性
- 数据库参数配置(4>>1+2+3)
- 数据库结构设计和SQL语句
CPU资源和可用内存大小
计算密集型的应用,CPU资源影响整个系统的性能,成为系统的瓶颈
热数据的大小远远超过可用内存大小,IO系统成为瓶颈
网络:大量的数据被查询,memache,当缓存大量生效时,产生大量的网络传输
升级IO子系统
如何选择CPU
我们的应用是否是CPU密集型
更好的CPU,而不是更多的CPU
当前版本不支持多CPU对同一SQL并发处理
系统的并发量如何
Web类应用:核心数量比频率更重要
64位使用32位的服务器版本
MyISAM
索引—内存
数据—OS
InnoDB
内存,数据—内存
磁盘的配置和选择
- 使用传统机器硬盘
- 使用RAID增强传统机器硬盘的性能
- 使用固态存储SSD和PCIe卡
- 使用网络存储NAS和SAN
传统机器磁盘读取数据的过程
- 移动磁头到磁盘表面上的正确位置
- 等待磁盘旋转,使得所需的数据在磁头之下
- 等待磁盘旋转过去,所有所需要的数据都被磁头读出
访问时间(1+2)
传输速度(3)
如何选择传统机器硬盘
- 存储容量
- 传输速度
- 访问时间
- 主轴转速
- 物理尺寸
使用RAID增加传统机器磁盘的性能
RAID
磁盘冗余队列的简称(Redundant Arrays of Independent Disk)
把多个容量较小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术
RAID 0(Baidu)
简单来说:多个磁盘串联到一起
写入数据:可以并发的向多个磁盘中写入
RAID 1
磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一个磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能的情况下最大限度的保证系统的可靠性和可修复性
RAID 5
分布式奇偶校验磁盘阵列,把数据分散到多个磁盘上,任何一个盘数据失效,都可以从奇偶校验中重建.但是如果两个盘失效,则整个卷的数据都无法恢复
RAID 10
分片的镜像,RAID1—>两组RAID1—>RAID0
读写良好
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(备份)