mysql优化硬件和操作系统

1、硬件层相关优化

  1.1、CPU相关

  在服务器的BIOS设置中,可调整下面的几个配置,目的是发挥CPU最大性能,或者避免经典的NUMA问题(Non-Uniform Memory Access,所以使用NUMA的模式如果能尽量保证本node内的CPU只访问本node内的内存块,那这样的效率就是最高的。)

  1、选择PerformancePer Watt Optimized(DAPC)模式,发挥CPU最大性能,跑DB这种通常需要高运算量的服务就不要考虑节电了;

  2、关闭C1EC States等选项,目的也是为了提升CPU效率;

  3MemoryFrequency(内存频率)选择Maximum Performance(最佳性能);

  4、内存设置菜单中,启用Node Interleaving,避免NUMA问题;

  1.2、磁盘I/O相关

  下面几个是按照IOPS(IOPS (Input/OutputOperations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。)性能提升的幅度排序,对于磁盘I/O可优化的一些措施:

  1、使用SSD或者PCIe SSD设备,至少获得数百倍甚至万倍的IOPS提升;

  2、购置阵列卡同时配备CACHE及BBU模块,可明显提升IOPS(主要是指机械盘,SSD或PCIe SSD除外。同时需要定期检查CACHE及BBU模块的健康状况,确保意外时不至于丢失数据);

  3、有阵列卡时,设置阵列写策略为WB,甚至FORCE WB(若有双电保护,或对数据安全性要求不是特别高的话),严禁使用WT策略。并且闭阵列预读策略,基本上是鸡肋,用处不大(如果数据直接写磁盘,就叫做直写,也就是write through;如果数据先写到阵列卡的cache,这叫做回写,也就是write back)

  4、尽可能选用RAID-10,而非RAID-5(磁盘阵列(Redundant Arrays of Independent DisksRAID)

  5、使用机械盘的话,尽可能选择高转速的,例如选用15KRPM,而不是7.2KRPM的盘,不差几个钱的;

    6更多的磁盘空间等于更高的速度。

    7磁盘速度越快越好。

 2、系统层相关优化

  2.1、文件系统层优化

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

  1、使用deadline/noop这两种I/O调度器,千万别用cfq(它不适合跑DB类服务);

  2、使用xfs文件系统,千万别用ext3ext4勉强可用,但业务量很大的话,则一定要用xfs;(使用 XFS 文件系统 — 一个比ext3更快的、更小的文件系统,拥有更多的日志选项,同时,MySQL在ext3上存在双缓冲区的问题。)

  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环境影响并不大(应该是对读敏感的场景更有效果),不过没准是我测试方法有问题,可自行斟酌是否调整;

 

其他:

1、有足够的物理内存,能将整个InnoDB文件加载到内存里 —— 如果访问的文件在内存里,而不是在磁盘上,InnoDB会快很多。

2、全力避免 Swap 操作 — 交换(swapping)是从磁盘读取数据,所以会很慢。

3、将你的操作系统和数据分开,不仅仅是逻辑上要分开,物理上也要分开— 操作系统的读写开销会影响数据库的性能。

4、将临时文件和复制日志与数据文件分开— 后台的写操作影响数据库从磁盘文件的读写操作

5、使用 64 位操作系统 — 有更多的内存能用于寻址和 MySQL 使用。

6、将不用的包和后台程序从服务器上删除 — 减少资源占用。

7、将使用 MySQL 的 host 和 MySQL自身的 host 都配置在一个 host 文件中 — 这样没有 DNS 查找。

8、永远不要强制杀死一个MySQL进程 — 你将损坏数据库,并运行备份。

9、让你的服务器只服务于MySQL — 后台处理程序和其他服务会占用数据库的 CPU 时间。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值