mysql操作系统和硬件优化 高性能mysql笔记

什么限制了mysql的性能

内存,磁盘,cpu,网络等都有可能,最常见的两个是:
cpu:当有大量数据可以足够快的读取时cpu可能会
磁盘i/o:当数据比内存的时磁盘可能出现瓶颈。

选择合适cpu

高吞吐:多核cpu
低延时:高速cpu

平衡内存和io资源

  1. 数据集: 单位时间内所需数据和总数据占比;
  2. 配置大内存: 配置大量内存使得数据集保存在内存中可以避免随机I/O;
  3. 缓存读写:
    • 读:一旦缓存所有数据就不会再有磁盘i/0;
    • 写:相同数据多次写入到缓存中然后一次刷新到磁盘,不同数据可以i/o合并写入提高了写入效率。
  4. 随机顺序I/O: 随机I/O慢因为可能读取的是一整页的数据;

固态存储

  1. 什么时候使用固态
    有大量随机I/O的时候。
  2. 固态的类型
    闪存:闪存读写很快但是写寿命短,可以两台机器连接一个闪存一个库挂了可以用另一个。
    ssd:建议对ssd做raid。
    PCie卡:读写最快价格最贵。
  3. 优化固态上的mysql
  • 增加innoDB的I/O容量 增加I/O线程数到10-15(固态使并发得到增加)
  • 调大innodb的日志为4g
  • 禁止预读
  • 把日志文件和ibdata1(双写缓冲)从闪存转移到RAID(避免很小的写入 大量小写入影响闪存寿命)而且可以利用percona server 特性使用4kb的块写事务日志,而不是默认的521字节。因为这会匹配大部分的闪存本身的块大小,以获得更好的效果

raid

  • raid0
    就是把多个硬盘合并成1个逻辑盘使用,数据读写时对各硬盘同时操作,不同硬盘写入不同数据,速度快。
    最少需要2块硬盘

  • raid1
    同时对2个硬盘读写(同样的数据)。强调数据的安全性。损坏一块不会有影响,一般服务器系统会装在raid1上。
    最少两块硬盘。

  • raid5
    把多个硬盘合并成1个逻辑盘使用,数据读写时会建立奇偶校验信息,
    并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,
    利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
    最少3块硬盘。做raid5硬盘不宜太多,对性能有影响。

  • RAID10
    把2块硬盘组成一个RAID1,然后两组RAID1组成一个RAID0,就是RAID10。
    最少4块硬盘。

  • raid50
    把两块raid5做成raid0,每个raid5卷有自己的校验盘,这样总共需要2个校验盘。浪费两块磁盘的空间。
    允许坏掉两块磁盘,但不能是一个raid5里的两块。
    最少需要6块硬盘。

类型 特性 亢余 盘数
raid0 便宜快速危险 N个
raid1 高速读取简单安全 2N个
raid5 成本速度折中 1+2n 依赖最慢的磁盘
raid10 昂贵高速安全 2*2N个
raid50 为极大数据存储服务 2*(1+2N)个

注意:

  • raid的读缓存,预读缓存没必要开启因为mysql已经开了缓存,raid的缓存应该全部用到raid的写中。
  • 禁用磁盘缓存因为其不带电池宕机会丢失数据:当raid把缓存写入磁盘的时候如果磁盘有缓存此时可能写入的是磁盘。(raid 卡是有带电池的)

优化网络配置

  1. DNS配置 尽量使用skip-name-resolve来减少因解析带来的不必要麻烦.
  2. 检查网络的ping 丢包率.
  3. 通过优化/etc/sysctl.cnf 中的网络参数,提升性能,以下便是参考值
  • net.ipv4.ip_local_port_range = 1024 65535 改变本地的端口范围
  • net.ipv4.tcp_max_syn_backlog = 4096 允许更多的连接进入队列
  • net.ipv4.tcp_fin_timeout = 30 对于只在本地使用的数据库服务器,可以缩短tcp保持状态的超时时间、默认1分钟

你可能感兴趣的:(mysql)