MySQL优化核心理论与实践

  

<强>背景描述:朋友单位OA系统前不久完成升级大改造,后端用的MySQL存储数据,上线跑了个把月,抱怨电话开始接二连三打来,不是这里打不开,就是那里无响应,有人比喻升级后变成老爷车,越来越慢,问题迫在眉睫,必须马上想对策呀。由于部署采用了规范文档,上线前也做了各种测试,于是乎,在线排查,未果,翻出实施文档,逐条阅读,未果,于是想起曾经一个业务系统,也碰到类似情况,后来通过各种优化得以缓解,遂有下文,《MySQL优化核心理论与实践》。
<强>说明:本文理论部分来源叶老师的博文,实践部分来源工作积累和众多热爱MySQL技术分享的网友,整理初衷是为了更加深入地理解MySQL优化,掌握更多MySQL优化方面的技术,提升自己,回馈热爱技术分享的所有网友。

  <人力资源/>   

硬件层的优化

  

新采购的服务器默认跑在节能模式下,在并发访问量很大的业务场景,会导致数据库性能跟不上,造成大量延迟,最终将拖垮业务系统。与此同时,磁盘选择与阵列卡设置不当也会使数据库性能成为整个业务系统的瓶颈。

  

目标一:全面关闭节能模式,让MySQL跑在高性能模式下

  

<强> 1。关闭CPU节能模式

  
 <代码>找到OPI链接速度选择选项,选择马克斯性能 
  

<强> 2。关闭内存节能模式

  
 <代码>找到内存速度选项,选择最大性能
  找到权力c状态选项,选择禁用
  找到C1增强模式选项,选择禁用代码 之前
  

目标二:关闭NUMA,让CPU能始终高效地使用内存

  

<>强关闭NUMA

  
 <代码>找到套接字交错选项,选择Non-NUMA  
  

目标三:全面提升IOPS性能,让磁盘I/O不再拖后退

  

<强> 1。资金充足时,采购SSD甚至PCIe-SSD

  
 <代码> SSD和PCIe-SSD带来的不只是惊喜,更有踏实,从此磁盘I/O不再是恶魔 
  

<强> 2。机械盘搭配阵列卡,缓存策略,BBU电池,raid 10、15 krpm

  
 <代码>阵列卡从容面对多块机械盘、BBU电池保障高性能模式下的缓存策略不丢数据
  缓存策略选择回信甚至总是回信
  阵列预读的阅读策略选项,选择正常
  使用raid 10、性能高于raid - 5
  使用15 krpm高速磁盘、性能高于7.2 krpm磁盘 
  

备注:<>强服务器硬件设置的参数来源于IBM X3650M3

  <人力资源/>   

系统层的优化

  

操作系统方面也存在多处值得优化的地方,同样能明显提升IOPS性能。另外,交换要少用,不但不能救命,反而会让业务系统处于崩溃边缘。

  

目标一:全面提升IOPS性能,让数据库不再背锅

  

<强> 1。配置合理的I/O调度器

  
 <代码>机械盘配最后期限,执行命令回声期限在/sys/block/sda/队列/调度器
  固态盘配等待,执行命令回声等待在/sys/block/sda/队列/调度器
  注意sda是数据文件所在分区 
  

<强> 2。文件系统尽量使用XFS,假如还在使用ext4,希望只是过度阶段

  

<强> 3.山参数增加减小,nodiratime, nobarrier

  
 <代码> vi挂载/dev/sda1/数据xfs违约,减小,nodiratime nobarrier 0 0/dev/sda2/xfs违约,减小,nodiratime nobarrier 0 0/dev/sda3掉期互换违约,减小,nodiratime nobarrier 0 0
  mount - o重新安装/数据
   前山
  

目标二:减少交换使用倾向甚至禁掉,稳定磁盘I/O和网络减少等待时间,让MySQL表现更加稳定

  

<强> 1. vm.swappiness设为5甚至0,假如不关心发生伯父

  
 <代码>回声的vm。swappiness=5 ',祝辞的在/etc/sysctl.conf/sbin/sysctl - p  
  

<强> 2. vm.dirty_background_ratio设为5,vm.dirty_ratio设为10,让脏页持续刷入磁盘,避免磁盘I/O瞬间写产生TIME_WAIT

  
 <代码>回声的vm。dirty_background_ration=5 ',祝辞的在/etc/sysctl.conf
  回声的vm。dirty_ratio=10 ',祝辞的在/etc/sysctl.conf/sbin/sysctl - p  
  

<强> 3. net.ipv4.tcp_tw_recycle和net.ipv4.tcp_tw_reuse设为双1,减少网络等待时间,提高效率

  
 <代码> net.ipv4回声”。tcp_tw_recycle=1”,祝辞的在/etc/sysctl.conf
  “net.ipv4回响。tcp_tw_reuse=1”,祝辞的在/etc/sysctl.conf/sbin/sysctl - p  
  

MySQL层的优化

  

选对MySQL版本尤为重要,找到适合业务系统的版本,才能发挥出更大性能。运行参数亦是如此,需要反复斟酌与调校。规范模式设计与sql编写,还有规范上线后的运维管理流程,同样也会带不小的收益。

MySQL优化核心理论与实践