IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    比较全面的MySQL优化参考(上篇)

    OurMySQL发表于 2015-06-02 13:21:23
    love 0

    本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了,可以参考本站的一些优化案例或者联系我,下方有我的联系方式。这是上篇。

    1、硬件层相关优化

    1.1、CPU相关

    在服务器的BIOS设置中,可调整下面的几个配置,目的是发挥CPU最大性能,或者避免经典的NUMA问题:

    1、选择Performance Per Watt Optimized(DAPC)模式,发挥CPU最大性能,跑DB这种通常需要高运算量的服务就不要考虑节电了;
    2、关闭C1E和C States等选项,目的也是为了提升CPU效率;
    3、Memory Frequency(内存频率)选择Maximum Performance(最佳性能);
    
    4、内存设置菜单中,启用Node Interleaving,避免NUMA问题;

    1.2、磁盘I/O相关

    下面几个是按照IOPS性能提升的幅度排序,对于磁盘I/O可优化的一些措施:

    1、使用SSD或者PCIe SSD设备,至少获得数百倍甚至万倍的IOPS提升;
    2、购置阵列卡同时配备CACHE及BBU模块,可明显提升IOPS(主要是指机械盘,SSD或PCIe SSD除外。同时需要定期检查CACHE及BBU模块的健康状况,确保意外时不至于丢失数据);
    
    3、有阵列卡时,设置阵列写策略为WB,甚至FORCE WB(若有双电保护,或对数据安全性要求不是特别高的话),严禁使用WT策略。并且闭阵列预读策略,基本上是鸡肋,用处不大;
    
    4、尽可能选用RAID-10,而非RAID-5;
    
    5、使用机械盘的话,尽可能选择高转速的,例如选用15KRPM,而不是7.2KRPM的盘,不差几个钱的;

    2、系统层相关优化

    2.1、文件系统层优化

    在文件系统层,下面几个措施可明显提升IOPS性能:

    1、使用deadline/noop这两种I/O调度器,千万别用cfq(它不适合跑DB类服务);
    2、使用xfs文件系统,千万别用ext3;ext4勉强可用,但业务量很大的话,则一定要用xfs;
    
    3、文件系统mount参数中增加:noatime, nodiratime, nobarrier几个选项(nobarrier是xfs文件系统特有的);

    2.2、其他内核参数优化

    针对关键内核参数设定合适的值,目的是为了减少swap的倾向,并且让内存和磁盘I/O不会出现大幅波动,导致瞬间波峰负载:

    1、将vm.swappiness设置为5-10左右即可,甚至设置为0(RHEL 7以上则慎重设置为0,除非你允许OOM kill发生),以降低使用SWAP的机会;
    2、将vm.dirty_background_ratio设置为5-10,将vm.dirty_ratio设置为它的两倍左右,以确保能持续将脏数据刷新到磁盘,避免瞬间I/O写,产生严重等待(和MySQL中的innodb_max_dirty_pages_pct类似);
    
    3、将net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse都设置为1,减少TIME_WAIT,提高TCP效率;
    
    4、至于网传的read_ahead_kb、nr_requests这两个参数,我经过测试后,发现对读写混合为主的OLTP环境影响并不大(应该是对读敏感的场景更有效果),不过没准是我测试方法有问题,可自行斟酌是否调整;

    后记:本文根据个人多年经验总结,个别建议可能有不完善之处,欢迎留言或者加我 微信公众号:MySQL中文网、QQ:4700963 相互探讨交流。

    附录:延伸阅读

    1、常用PC服务器阵列卡、硬盘健康监控

    2、PC服务器阵列卡管理简易手册

    3、实测Raid5 VS Raid1+0下的innodb性能

    4、SAS vs SSD各种模式下MySQL TPCC OLTP对比测试结果

    5、MySQL出了门,Percona在左,MariaDB在右

    6、Percona Thread Pool性能基准测试

    7、[MySQL优化案例]系列 — 分页优化

    8、[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键

    9、[MySQL FAQ]系列 — 为什么要关闭query cache,如何关闭

    猜您喜欢

    • 2015 年 6 月 2 日 -- 比较全面的MySQL优化参考(下篇)
    • 2014 年 11 月 26 日 -- 优化MySQL的21个建议
    • 2014 年 2 月 18 日 -- MySQL数据库优化实践
    • 2013 年 9 月 2 日 -- 化繁为简-优化sql
    • 2013 年 1 月 8 日 -- 淘宝商品库MySQL优化实践的学习


沪ICP备19023445号-2号
友情链接