Linux硬件和系统调优.docx





《Linux硬件和系统调优.docx》由会员分享,可在线阅读,更多相关《Linux硬件和系统调优.docx(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux硬件和系统调优本章汇总了之前硬件或者操作系统对MySQL性能影响的相关因素并分类列出了从底层优化数据库性能的 相关方法。硬件和系统调优概览前面我们通过案例介绍了在硬件和系统层面优化数据库性能的方法,本章我们运 用“独孤九剑,从I/O、CPU、网络、进程等方面汇总介绍如何破解硬件和系统层面的性 能瓶颈,“料敌机先,攻其必救”。不仅仅是MySQL,所有的数据库系统对I/O都特别敏感,80%的系统性能瓶颈基本都 在I/O上山。存储设备的性能如表33-1所示。表 33-1硬 件nsus *ms性能比拟L I级缓存0.5L2级线存714倍L1级缓存内存访问10020倍L2级缓存200 倍 PC
2、Ie 4KB 写Flash/NVMe 访问20 00020200倍内存访MSSD 4KB随机写65 00065600倍内存访问机械磁盘寻道1() ()(X) ()00K) (MX)1()100 0(10倍内存访问从CPU缓存到内存,从SSD到HDD, CPU访问数据的效率在逐步下降,这也是为什么 数据库管理员需要着重优化和提升I/O性能,解决数据库瓶颈的原因。1 .存储设备(1)强烈建议使用Flash设备,优先使用NVMe和PCIe接口的Flash设备如果事务并发修改较多的话,底层存储设备的读写压力会非常大,假设存储设备的性能 无法支撑这么大量的I/O请求,MySQL将被堵塞,无法提升数据库并
3、发处理能力。普通的SAS机械磁盘使用盘片,通过机械手臂、磁头等访问和存储数据,由于转速限 制,IOPS一般在150次/秒左右,I/O访问延迟在毫秒(ms)级别。而Flash存储是电子设 备, IOPS一般为410万次/秒,延迟一般在微秒(那)级别。对于数据库这种对I/O敏感的系统, 能够大幅提高并发处理能力。随着Flash设备的逐渐普及,出现了不同接口类型的Flash设备,如SATA、PCIe、 NVMeoSATA接口的SSD在外观上与普通的机械磁盘一样,以IntelS3700为例,4KB随机写的 IOPS能到达3.6万次/秒誉普通磁盘的200倍),延迟降到6511s(是普通机械磁盘的1/10
4、)。 SSD的外观如图33-1所示。PCIe Flash卡需要插在主板的专门接口上,不通过硬盘背板和RAID卡的转发,速率更 高。以HGST的Ultrastar SN150为例,IOPS为14万次/秒,是普通SSD的3倍,延迟在20g 以下,是普通SSD的1/3。但是它的更换需要翻开机箱,相比SATA接口的SSD不用开机 箱,可以随时插拔磁盘,在运维方面会更麻烦一点。Flash卡的外观如图33-2所示。图33-1图332SATA接口的磁盘使用的是AHCI接口标准,无法充分发挥Flash介质的性能;PCIe Flash介质采用的都是各个厂商私有的接口标准,无法统一管理。2011年,Intel牵头
5、发布了 NVMe接口标准,以适配高速低延迟存储设备。支持NVMe接口标准的固态硬盘和PCIe Flash卡同样可以到达10万次/秒以上的IOPS和20四以下的I/O延迟。(2)把binlog、redo日志文件和数据文件分开为了保证数据库的数据不会丧失,一般会设置sync_binlog=l和innodb_flush_ log_at_trx_commit= 1。由于数据库是WAL日志先行南,对日志型的I/O访问最主要的要求 是顺序写延迟低;而普通的数据由于是异步I/O方式的,对底层存储最主要的要求是随机 读写IOPS高、并发I/O处理能力强。在I/O请求非常高的情况下,如果日志型的请求和数据 文件
6、型的请求都落在同一个存储系统上,会出现相互冲突的情况。由于RAID卡的缓存速率跟内存的速率是同一个级别的,普通HDD和普通SSD的顺序 I/O也能到达200MB/S以上,对绝大多数binlog和redo日志的顺序I/O都是满足的。将binlog 和redo日志等对顺序读请求和延迟要求较高的请求放在带有RAID卡缓存的普通磁盘上, 既能获得内存级别的响应延迟,也能获得快速的顺序I/O能力,并且本钱较低。数据文件要求随机I/O并发处理能力强,只能通过PCIeFlash存储或者不带缓存(Write Through)的SSD提供10万级别以上的高性能随机I/O读写能力。不使用RAID的缓 存主要是为了
7、防止抢占口志型存储的资源,防止竞争,而且SSD本身的IOPS能力已经足够 支撑大局部数据库的I/O并发,不需要在缓存中合并了。(3)如果使用SSD的话,请关闭RAID卡的自动一致性读和充放电配置关于RAID卡的一致性读和充放电配置在前面的章节中已经介绍过了,这里不再赘 述。(4)考虑SSD批次问题SSD由于其电子设备的特性,有可能在同一个批次上具有相同的缺陷,如果用于同一 台物理机或者主备库中,有可能出现整台物理机或者主备库的数据失效、无法提供服务的 问题。有条件的话,建议在同一台物理机或者主备库中采用不同批次的SSD。2 .内存下面主要探讨在内存方面有哪些地方可以优化。(1)内存空间越大越好
8、原那么上,内存空间越大越好,如果业务需要访问的数据都可以放在内存中,那么访问 的效率一定是最高的。(2)建议关闭NUMA如果追求极致性能的话,那么可以考虑每个NUMA节点一个MySQL实例,否那么请关闭 NUMAoNUMA (Non-Uniform Memory Access,非一致存储访问)是最新的内存管理技术,它 和SMP (Symmetric Multi-Processor,对称多处理器)是对应的。SMP和NUMA架构的比照 如图33-3所示。CPU CPU MemoryCPU CPU MemorySMP架构NUMA架构图333通过图33-3我们可以直观地看到,在SMP架构下,访问内存的
9、代价都是一样的;但是 在NUMA架构下,对本地内存的访问和对非本地内存的访问代价是不一样的。根据这个 特性,在操作系统中可以设置进程的内存分配方式。目前支持的方式包括: interleave=nodes,内存交互分配策略。内存会在nodes上轮询(Round Robin) 分配。 -membind=nodes,绑定内存在nodes上。如果该nodes上没有内存可供使用,那么内 存分配将会失败。 cpunodebind=nodes,绑定在nodes 的 CPU上。 -physcpubind=cpus, 绑定在指定的cpus核上。 -localalloc,只在当前node上分配。 -preferr
10、ed=node,优先在node上分配内存,如果node内存不够,那么可以到其他 node上分配。简而言之,就是可以指定内存是在本地分配,还是在指定的几个CPU节点上分配或者 轮询分配的。对于-interleave=nodes轮询分配方式,只要物理内存还有剩余,数据库申请 内存是可以在任意NUMA节点上分配的;否那么,即使其他NUMA节点上还有内存剩余, Linux也不会把剩余的内存分配给这个进程,从而导致数据库内存被交换出去。有经验的 系统管理员或者DBA都知道内存sw叩导致的数据库性能下降有多么大。所以,最简单的方法还是关闭这个特性。当然,如果你对NUMA非常熟悉,一台服 务器上有多个MyS
11、QL实例,并且CPU本地内存足够,希望就在本地分配内存,也可以指 定NUMA节点分配。这里介绍关闭NUMA的方法。如下三种方法简单、有效,能够防止NUMA导致的交 换。 在BIOS中直接关闭NUMA。由于各种BIOS类型的区别,如何关闭NUMA千差万 别,如图33-4所示是在DELL的BIOS中设置内存NUMA关闭的截图。如tea NewrySize 12,e GBSystem NeaoryType KC DM3HeaorySpeed 1667 MzSystem MeaoryUoltage 1.5UUideo Heaory 8 MBSystea Nebo叫 Testing EnabledHew
12、ry OperatinQ Mode OptiaizcrttodcNode interleaving Enabled图334 在操作系统内核启动时关闭NUMA。在操作系统中关闭,可以直接在/etc/grub.conf 文件的kernel行的最后添加numa=offo并且在sysctLconf文件中设置 vm.zone_reclaim_mode=0 尽量 回收 内存。(root0localhost # cat /etc/grub.confkernel /vmlinuz-2.6.32-220.el6.x86_64 ro root/dev/mapper/VolGroup-root rd_NO_LUKS
13、 LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD quiet SYSFONT=latarcyrheb-sunl6 rhgb crashkernel=auto rd_LVM_LV=VolGroup/ swap rhgb crashkernel=auto quiet KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off 在进程启动时关闭NUMA。在启动MySQL时关闭NUMA特性。root local host numactl -interleave=all mysqld &(3)设置较小的vm.swappi
14、ness值vm.sw叩piness是操作系统控制物理内存交换的策略,它的值是一个百分比数,最小 值为0,最美彳直为10。,默认值为60。将vm.swappiness设置为0表示尽量少交换,设置为100表不尽量将inactive内存交换出去。在MySQL所在的服务器中建议设置 vm.swappiness=l 0。当内存基本满时,系统会根据这个参数来判断是把内存中很少用到的inactive内存交 换出去(顾名思义,inactive内存就是指那些被应用程序申请(mapped),但是“长时 间”不用的内存),还是释放老数据的缓存(缓存中存放的是从磁盘读出来的数据,根据 程序的局部性原理,这些数据在接下
15、来的程序访问中有可能会被用到)。我们可以使用vmstat (关于vmstat工具的具体介绍,请参考“工具篇”中的第40章和第 41章)来查看inactive内存的大小:root local hostvmstat -an 1procsmemoryswapio-system-一Wr bswpd free inact active siso bi boincs us sy ici wa st1 00 27522384 326928 170464400015311 10 00 100 0 00 00 27523300 326936 170416400074784 5900 0 100 0 00 00
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 硬件 系统

限制150内