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