前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >还有这些参数能让MySQL跑的更快?

还有这些参数能让MySQL跑的更快?

作者头像
腾讯云数据库 TencentDB
发布2019-05-16 15:02:39
1.7K0
发布2019-05-16 15:02:39
举报

点击上方蓝字每天学习数据库

本文作者:黄稚禹,腾讯云数据库产品经理。曾任职新浪彩票数据库总监,精通金融系统的数据运维体系架构。之前为腾讯视频、腾讯新闻、企鹅号、财经自选股等业务的数据平台总负责人。


大家都知道很多关于MySQL Server相关的优化技巧,比如:MySQL参数配置优化、MySQL的SQL语句优化、MySQL的schema设计优化。但却对运行MySQL的操作系统和硬件优化有所忽略。本文从Linux操作系统和服务器硬件的角度来说下关于MySQL的优化技巧,如果在MySQL Server安装部署运行之前,就已经实施了这些操作系统和硬件的优化,相信你的MySQL Server会跑得更加顺畅。

BIOS设置

iDRAC(Integrated Dell Remote Access Controller)

  • Thermal Base Algorithm选maxinum performance

最大性能选项可以提供更好的性能,对处理器和内存的散热响应更加积极。以增加风扇功率这一点点代价换来稳定的性能,还是值得的。

Auto设置时,这个选项映射至System BIOS > System BIOS Settings. System Profile Settings。

  • Fan Speed Offset选High Fan speed offset

这个选项的设置是使风扇速度接近全速运转(大约90%-100%)。

如果服务器上安装了高功率的PCIE卡或其他设备时,这个设置比较有用。

System Profile Settings

1.CPU选择Maximum Performance,发挥最大功耗性能 2.Memory Frequency(内存频率)选择Maximum Performance(最佳性能) 3.C1E,处理器处于闲置状态时启用或禁用处理器切换至最低功耗状态,建议关闭(默认启用) 4.C States(C状态),启用或禁用处理器在所有可用电源状态下运行,建议关闭(默认启用

详解:

C State(处理器的状态)

目前最新的DELL R730搭载的英特尔®至强® E5 v3版处理器,使用的是Intel第三代Haswell微架构,这个架构的C State从旧架构的6个增加至10个。但服务器CPU不会应用 C7-C10这4个新的State,这4个新的State是为笔记本、超极本、平板设置的,我们无需关心。

C0状态:激活 这是CPU最大工作状态,在此状态下可以接收指令和处理数据。我们正常操作电脑时均处于C0状态。

C1/C1E:挂起/待机状态 可以通过执行汇编指令“HLT(挂起)”进入这一状态,停止处理器内部时钟。

增强版的C1E支持降低倍频和电压。

开启后,CPU在空闲轻负载状态可以降低工作电压与倍频,这样就达到了省电的目的。但在重负载的情况下C1E的节能作用很有限。  唤醒时间超快!(只需10纳秒!) 可以节省70%的CPU功耗

C2/C2E:和C1/C1E类似

进入这个状态需要通过硬件,而C1/C1E通过软件就可以了。 处理器时钟频率和I/O缓冲被停止 C2状态下也可以节约70%的CPU功耗 从C2切换到C0状态需要100纳秒以上

 C3状态:深度睡眠 总线频率被锁定,内部时钟停止 在多核心系统下,缓存数据保留,并暂停写入操作,不响应外部总线的重要请求 可以节省70%的CPU功耗,但平台功耗比C2状态下大一些

已进入C2状态后才可以进入C3状态 唤醒时间需要50微妙

C4:更深度睡眠

进入C3状态后才可以进入C4,但C4状态的核心电压低于1.0V,L2缓存的数据存储会减少。可以节约98%的CPU最大功耗,唤醒时间比较慢,但不超过1秒。

C4E状态(也称C5状态)

C4E和C4的区别是,L2缓存的数据会清零,唤醒时间至少需要200微秒。

 C6状态:深度节能

处理器清理L1缓存,电压降到非常低,功耗也非常低,但唤醒时间也要更长。

NUMA

如果上面的BIOS里面忘记关了,可以在操作系统层面进行关闭。

修改/etc/grub,在kernel这一行的最后加上numa=off即可。

详解:

使用NUMA,将使内存分配不均衡,造成使用swap,引起数据库变慢。

关闭NUMA后,据tpmc测试,能提高33%的性能。

RAID

RAID5 OR RAID10

首选RAID10,其次RAID5

关闭物理磁盘cache策略,防止丢数据

使用高转速硬盘,不使用低转速盘,15KRPM最好

有条件可以使用SSD或者PCIe-SSD盘

详解:

类似小io的数据库类型操作,如在线交易等等应用,建议采用RAID10,而大型文件存储,数据仓库等等,则从空间利用的角度,建议采用RAID5。

举例来说,如果我们用4块盘组RAID,RAID5能利用3块盘的空间,而RAID10只能利用2块盘。

读数据方面,因为我们的OLTP应用一般不开读cache,RAID5和RAID10在读取数据方面没有太大差异。

连续写方面,由于RAID校验是在cache中完成,如4块盘的RAID5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而RAID10只能同时写入2个数据+2个镜相。RAID5在这方面甚至要好一点。

随机写方面:

假设我们执行一个update语句,把一个数字2变成数字4,

那么对于RAID5,实际发生了4次io:

先读出2与校验6,可能发生读命中(如果发生读命中,则RAID5不需要4个io。)

然后在cache中计算新的校验

写入新的数字4与新的校验8。

如上图我们可以看到:对于RAID10,同样的单个操作,最终RAID10只需要2个io,而RAID5需要4个io。

因为RAID10对于一个写操作,只发生2次io,所以,同样的压力,同样的磁盘,RAID10的IOPS要比RAID5的低。

RAID CACHE & BBU

阵列写策略为WB,关闭预读,勾选Force WB with no battery,关闭磁盘本身 Cache

如果BIOS里面没设置(以DELL服务器为例):

关闭预读命令 MegaCli64 -LDSetProp NORA -LALL -aALL

设置cache在电池充放电时有效:MegaCli64 -LDSetProp CachedBadBBU -lall -a0

关闭磁盘本身Cache:MegaCli64 -LDSetProp -DisDskCache -Lall -aALL

详解

关于预读:

CACHE比较宝贵,没必要做预读,拿来做写缓存。

作为缓存,cache的作用具体体现在读与写两个不同的方面:

1.作为写,一般存储阵列只要求数据写到cache就算完成了写操作,当写cache的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入。所以,阵列的写是非常快速的。至于cache数据的保护,一般都依赖于镜相与电池(或者是UPS)。

2.作为读,cache在读数据方面的作用一样不可忽视,因为如果所需要读取的数据能在cache中命中的话,将大大减少磁盘寻道所需要的时间

读选项:

“Read Ahd”(预读)、“No Read”(非预读)或“Adaptive”(自适应)

写选项:

1.Write Through:系统的写磁盘操作并不利用阵列卡的Cache,而是直接与磁盘进行数据的交互,影响写入性能

2.Write Back:利用阵列Cache作为系统与磁盘间的二传手,系统先将数据交给Cache,然后再由Cache将数据传给磁盘,可提高写入性能

3.Write Back with BBU:此是阵列卡配有Battery Backup模块元时的可选项,它的作用是用以在系统断电时保护Cache中的数据,避免断电造成中间数据的丢失。 

电池选项:

Force WB with no battery:这个选项打开的话,要自己维护电池。不打开的话DELL服务器默认90天重复充电一次,一般是45天自动学习(auto learn),然后决定是否要充电。

如果不设置这个选项,充电时,电量低于某个级别后,write cache策略就会改成Writethrough,严重影响i/o性能。设置这个选项后,充电时就不会使用write through了。

RAID 电池的作用:

用以在系统断电时保护Cache中的数据,避免断电造成中间数据的丢失。它实际上是一块锂电池。

在更换RAID卡电池之前,服务器虽然已经下线,无数据写入,但还有一部分数据存在RAID cache中,并未写入硬盘中。

一般RAID卡电池坏掉后,RAID卡会自动将写缓存(即write back)禁止,变为write through方式,会使写性能有一定的下降,但不影响数据安全。

若RAID电池和某块硬盘同时出现故障,应先更换RAID卡电池,待服务器重启成功,RAID卡工作正常后再更换故障的硬盘,最大限度保证数据安全。

电容对比锂电池的好处:

第一,锂电池存在寿命问题,每隔1~2年容量会下降50%,因此需要不断监视电池的状态和更换。而电容的寿命和服务器一样长,使用中不需要更换,也不需要进行维护。

第二,BBU供电保持数据的时间最多72小时,在这期间内如果系统没有开机的话数据就会丢失;而采用了电容的新RAID卡将数据保存在了Flash Memory中,10年都不会丢失。此外锂电池从开机到充满电需要4.5~9个小时;而电容在系统启动时就能完成充电,立即进入保护状态。

文件系统和调度算法

文件系统

选XFS

这个没什么好说的,redhat7已经默认是XFS了。XFS的综合性能表现比EXT4还是有优势。

磁盘调度策略

首选deadline,如果是SSD可以选noop,其他不考虑

查看调度算法: cat /sys/block/sda/queue/scheduler 临时更改调度算法: echo deadline >/sys/block/sda/queue/scheduler 永久更改调度算法: 修改/etc/grub.conf kernel的最后加上elevator=deadline

详解: 

关于磁盘调度策略

noop-sio-deadline-cfq-bfq io任务调度的区别:

1.NOOP调度器十分简单,其只拥有一个等待队列,每当来一个新的请求,仅仅是按先来先处理的思路将请求插入到等待队列的尾部。 其应用环境主要有以下两种:一是物理设备中包含了自己的I/O调度程序,比如SCSI的TCQ;二是寻道时间可以忽略不计的设备,比如SSD等。 noop是最简单的i/o调度策略,本质上就是先来先服务,意思就是哪个进程先请求i/o系统就先为哪个进程服务,有最好的连续存取性能

2.DEADLINE调度算法主要针对I/O请求的延时而设计,每个I/O请求都被附加一个最后执行期限。该算法维护两类队列,一是按照扇区排序的读写请求队列;二是按照过期时间排序的读写请求队列。如果当前没有I/O请求过期,则会按照扇区顺序执行I/O请求;如果发现过期的I/O请求,则会处理按照过期时间排序的队列,直到所有过期请求都被发射为止。在处理请求时,该算法会优先考虑读请求。 deadline 是一刀切的态度, 不管谁来了, 都只给他特定时间点菜, 如10秒钟的点菜时间, 10秒过了, 他还没想好点什么菜,或者还有菜没点完, 那就先把他已经点好菜送给他吃, 并且, 让他回到队伍的最后面, 继续排队来点那些还没有点完的菜.

3.CFQ实现了一种QoS的IO调度算法。该算法为每一个进程分配一个时间窗口,在该时间窗口内,允许进程发出IO请求。通过时间窗口在不同进程间的移动,保证了对于所有进程而言都有公平的发出IO请求的机会。同时CFQ也实现了进程的优先级控制,可保证高优先级进程可以获得更长的时间窗口。 CFQ适用于系统中存在多任务I/O请求的情况,通过在多进程中轮换,保证了系统I/O请求整体的低延迟。但是,对于只有少数进程存在大量密集的I/O请求的情况,会出现明显的I/O性能下降。

操作系统

mount参数上加上noatime,nobarrier两个选项:

/dev/sda4 on /data0 type xfs (rw,noatime,nobarrier,logbufs=8)

设置vm.swappiness=0:

echo "vm.swappiness = 0" >>/etc/sysctl.conf sysctl -p生效

详解:

关于noatime

默认情况下,Linux ext2/ext3 文件系统在文件被访问、创建、修改等的时候记录下了文件的一些时间戳,比如:文件创建时间、最近一次修改时间和最近一次访问时间。

因为系统运行的时候要访问大量文件,如果能减少一些动作(比如减少时间戳的记录次数等)将会显著提高磁盘 IO 的效率、提升文件系统的性能。Linux 提供了 noatime 这个参数来禁止记录最近一次访问时间戳。

关于nobarrier

简单说barrier是保证日志文件系统的WAL(write ahead logging)一种手段.

现代日志文件系统如ext4有个journal区,类似数据库领域的redo log,用于意外崩溃后的快速恢复.

数据写入磁盘时,理应先写入journal区,再写入数据在磁盘的实际对应位置;

磁盘厂商为了加快磁盘写入速度,磁盘都内置cache,数据一般都先写入磁盘的cache.

cache能加快写入速度,当然是极好的东西,但磁盘一般会对cache内缓存数据排序使之最优刷新到磁盘,这样就可能导致要刷新的实际数据和journal顺序错乱;

一旦系统崩溃,下次开机时磁盘要参考journal区来恢复,但此时journal记录顺序与数据实际刷新顺序不同就会导致数据反而"恢复"到不一致了.

而barrier如其名–'栅栏',先加一个'栅栏',保证journal总是先写入记录,然后对应数据才刷新到磁盘,这种方式保证了系统崩溃后磁盘恢复的正确性,但对写入性能有蛮大影响.

什么时候需要开启nobarrier呢?

barrier不开启情况下journal记录会和数据刷新顺序不一致,但journal只有恢复时才会用,所以只要disk无需恢复就行: 

1.BBWC (Battery-Backed Write Cache) 

通常企业级服务器都有HBA,提供单独电池,这样即使系统崩溃,磁盘一直有电供着.

2.FBWC (Flash-Backed Write Cache)

类似BBW,但不用电池而是使用flash做存储,掉电时有一个大电容供电,足够将磁盘cache中的内容写入flash.

3.其他供电方式

UPS、笔记本电池等等

4.无cache或禁用cache

这样子写就是同步的了,自然barrier也就没什么意义。

除了以上4种情况,其他情况下都不要开启"nobarrier"标示

关于swappiness

swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。操作系统的默认值一般是60左右。

写在最后

总之,操作系统和服务器硬件作为运行数据库Server的载体,值得我们更多得去关注和优化。

当然,更优的选择是将数据库上云,腾讯云数据库TencentDB For MySQL 除了做到以上的硬件和系统优化,还针对底层用到的定制机型进行了TXSQL的内核优化,使MySQL Server的内核和硬件更完美的兼容,发挥出底层定制硬件的最大性能,提供更优的质量和更可靠的保护服务。

同时,云上由于MySQL多实例部署,还需要底层硬件和操作系统具备CPU、内存、IO的隔离技术,在压榨硬件性能的同时,也保障客户购买的服务稳定运行。 目前腾讯云MySQL已全面实施了底层操作系统的强隔离方案,严格按照客户购买的CPU、内存规格进行硬件和MySQL性能的匹配,保障客户服务的稳定运行~

往期推荐

《丁奇:索引存储顺序和order by不一致,怎么办?》

《迪B课堂:导致MySQL主从复制延迟的原因》

免费试用

包括云数据库MySQL在内的40+款热门云产品,实名认证的企业用户可免费试用!1000M内存50G数据盘的MySQL可免费体验30天,点击左下角“阅读原文”立即领取~

↓↓点“阅读原文”免费试用

好文和朋友一起看!

var first_sceen__time = (+new Date());if ("" == 1 && document.getElementById('js_content')) { document.getElementById('js_content').addEventListener("selectstart",function(e){ e.preventDefault(); }); } (function(){ if (navigator.userAgent.indexOf("WindowsWechat") != -1){ var link = document.createElement('link'); var head = document.getElementsByTagName('head')[0]; link.rel = 'stylesheet'; link.type = 'text/css'; link.href = "//res.wx.qq.com/mmbizwap/zh_CN/htmledition/style/page/appmsg_new/winwx45ba31.css"; head.appendChild(link); } })();

李辉、黄稚禹

赞赏

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

阅读原文

阅读

分享 在看

已同步到看一看

取消 发送

我知道了

朋友会在“发现-看一看”看到你“在看”的内容

确定

已同步到看一看写下你的想法

最多200字,当前共字 发送

已发送

朋友将在看一看看到

确定

写下你的想法...

取消

发布到看一看

确定

最多200字,当前共字

发送中

微信扫一扫 关注该公众号

微信扫一扫 使用小程序

即将打开""小程序

取消 打开

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云数据库 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BIOS设置
    • iDRAC(Integrated Dell Remote Access Controller)
      • System Profile Settings
      • RAID
        • RAID5 OR RAID10
          • RAID CACHE & BBU
          • 文件系统和调度算法
            • 文件系统
              • 磁盘调度策略
                • 详解: 
                  • 朋友会在“发现-看一看”看到你“在看”的内容
                  • 朋友将在看一看看到
                  • 发布到看一看
              • 操作系统
              • 写在最后
              相关产品与服务
              云数据库 SQL Server
              腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档