MySQL-性能优化_影响MySQL性能的因素分析及解决方案
影响性能的几个因素
-
硬件资源(CPU 、内存、磁盘等)
-
操作系统的区别
-
MySQL的存储引擎的选择
MyISAM: 不支持事务,表级锁
InnoDB: 事务级存储引擎,完美支持行级锁,事务ACID特性。但 比不是说 MyISAM比InnoDB差,看使用场景
-
数据库参数设置
-
数据库结构设计和SQL语句 ,毫无疑问 这个是最最重要的因素 —> mysql 可以开启慢查询监控耗时长的SQL
CPU
更多的CPU or 更快的CPU ?
主要从以下几个方面考虑:
- (1)CPU密集型的应用?
分析下我们的应用的类型,是的话,要提高SQL的运行效率,那就需要更快的CPU。
还有一点需要注意 MySQL不支持多CPU对同一SQL的并发处理,也就是说一个SQL只能运行在一个CPU的核上。
- (2) 系统的并发量如何 ?
一个SQL只能跑在一个CPU上,如果有32个CPU呢 ,是不是同时可以跑32个SQL呢? 就是我们前面说的QPS 。 一般web应用,CPU的核心数量比CPU的主频更重要。
- (3) MySQL的版本 ?
5.6、 5.7以上的版本,对多核CPU的支持更好。
- (4) 64位操作系统 OR 32位操作系统
32的操作系统,进程所能寻址的最大内存也就4G。
总结
- 对于并发较高的场景,CPU的数量比频率重要
- 对CPU密集型场景和复杂的SQL 频率越高越好
内存
MyISAM : 索引 缓存在内存 ,数据通过OS来缓存
InnoDB : 索引和数据都是通过内存来缓存
举个例子, 100G的数据量, 内存64G,这个时候增加内存对性能有提高。 如果内存是256G,还是慢,那就是其他问题了。
当然了,内存多了,对于数据的读和写都是好处的,都可以利用缓存来提高读写性能。
如何选择内存呢? ----> 建议选择主板支持的最大内存频率, 跟CPU一个道理。
内存的型号,保持一致, 单个内存尽可能的大,都是比较好的选择。
配置的时候,要考虑数据的增长,比如100G的数据, 128G内存可能已经满足了要求,但数据可能增长较快,这个时候256的更佳。
总结
- 选择主板所能使用的最高频率的内存
- 内存尽可能的多
磁盘的配置和选择
主流的4种
- 使用传统的机械硬盘
- 使用RAID增强传统硬盘的性能
- 使用固态存储SSD和PCIe卡
- 使用网络存储NAS和SAN
传统的机械硬盘
传统的机械硬盘的读取数据的过程
- 移动磁头到磁盘表面上正确的位置
- 等待磁盘旋转,使所需的数据在磁头之下 ----> 访问时间
- 等磁盘旋转过去,所需的数据被磁头读出 ------> 传输速度
考虑的话 1. 存储容量 2.传输速度 3 访问时间 4 主轴的转速(常见的7200转、1万5千转等等) 5. 物理尺寸
RAID
RAID : 磁盘冗余队列 (Redundant Arrays of Independent Disks )
RAID是一种将多个容量较小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术 。
Linux-Raid0、Raid1、Raid5、Raid10初探
SSD 或者 PCIe卡
SSD
- 比普通的机械盘有更好的随机读写性能
- 支持更好的并发, I/O 性能好
- 缺点: 长时间密集的写,容易造成损坏
特点:
- 可以使用SATA接口,可以替换传统的磁盘而不需要任何的改动。
- SATA接口的SSD同样支持RAID
- SATA的SSD 3.0 接口如果放到了 2.0接口上,受2.0接口的性能影响,性能会下降
举个例子 SATA3.0接口 6Gbps , 放到SATA2.0接口上 最多只能用到2.0的 3Gbps
PCIe 卡(Fushion IO)
- 无法使用SATA接口,需要独特的驱动和配置
- 比SSD性能好,但价格也比SSD贵
- PCIe 也会吃服务器的内存
- 支持PCIe的Raid控制器比较少,而且成本相当高
固态存储使用的场景
- 大量随机I/O的场景
- 解决单线程负载的I/O 瓶颈
举个例子
主从节点的MYSQL, 有一个SSD, 给哪个节点用呢 ?
----> 从节点 上用。 主节点上写 ,是多线程, 从节点的复制,单线程,为了减少延迟,建议放到从服务器上。
网络存储SAN (光纤传输)和 NAS (带宽传输)
SAN: Storage Area Network
NAS: Network Attached Storage
是两种外部文件存储设备加载到服务器上的方法。
SAN设备通过光纤连接服务器,设备通过块接口访问,服务器可以将其当做硬盘使用。 可以承受大量的顺序读写,但随即读有的时候不如RAID
NAS 使用 宽带来传输,有延迟。
使用场景的话: 数据备份等 。
总结
- PCIe > SSD > Raid10 > 本地磁盘 > NAS
网络
网络带宽 —> 低延时 、吞吐量达
网络质量—> 少抖动
建议
- 采用高性能和高带宽的网络接口设备和交换机
- 对多个网卡进行绑定,增强可用性和带宽
- 尽可能的进行网络隔离
操作系统
windows 和 linux , 大小写的区别,可以通过修改MySQL的配置来调整。
CentoOS系统的参数优化 /etc/sysctl.conf
资源限制的配置文件 /etc/security/limit.conf
这俩参数,重启系统才生效。