MySQL 优化之 Linux系统层面调优_MySQL
MySQL 一般运行于Linux系统中。对于MySQL的调优一般分为Linux操作系统层面的调优和MySQL层面的调优(当然还有架构层面、业务层面、应用程序层面的调优)。操作系统主要是管理和分配硬件资源,所以其实系统层面的调优包括了硬件的调优,也就是调整硬件参数。Linux系统层面的调优一般分为 CPU的调优、内存的调优、磁盘的调优、网络的调优、Linux后台service调优等等。
1. CPU 调优
1.1 CPU 的节能模式
在server环境的CPU一定要关闭节能模式,节能模式不适应于服务器环境。因为他会自动给CPU降频进入休眠模式!一般笔记本电脑,手机为了续航时间,才需要。关闭CPU的节能模式有两种方法:
1)在BIOS中进行设置,彻底关闭;
2)关闭Linux中的服务 cpuspeed 和 irqbalance;
[root@localhost ~]# chkconfig --level 35 cpuspeed off
[root@localhost ~]# chkconfig | grep cpuspeed
cpuspeed 0:off 1:on 2:off 3:off 4:off 5:off 6:off
[root@localhost ~]# chkconfig --level 35 irqbalance off
[root@localhost ~]# chkconfig | grep irqbalance
irqbalance 0:off 1:off 2:off 3:off 4:off 5:off 6:off
cpuspeed 就是负责CPU节能的后台服务;而irqbalance在cpuspeed将某个或某几个CPU调节进入休眠模式时,它负责将中断发送到没有休眠的CPU。关闭irqbalance会将所有中断均衡的发送到所有cpu.
1.2 关闭CPU的numa
numa的会导致mysqld产生swap,严重影响性能。因为numa架构的CPU和内存是bind的,如果CPU自己node中的内存不够,就会导致swap的产生,即使此时其它node中有大量的空闲内存,它也不会去使用。这就是numa的一个缺陷。有多种方法关闭CPU的numa:
1)在BISO中进行配置;
2)numactl --interleave=all
[root@localhost ~]# numactl --interleave=all
interleave=all 其实是将NUMA架构的各个node中的内存,又重新虚拟成了一个共享的内存来进行分配,但是和SMP不同的是,因为每两个node之间有 inter-connect ,所以又避免了SMP架构总线争用的缺陷。
查看CPU是否被休眠导致降频:
[root@localhost ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz
stepping : 10
cpu MHz : 1995.288
看上面的 cpu MHz : 1995.288 和 实际是否一致。
具体参见:http://www.bitsCN.com/database/201510/445109.html
2. 内存的调优
内存主要是要防止发生 swap。因为发生swap的话,从内存访问直接下降为硬盘访问,随机访问的速度下降10的6次方倍,也就是10万倍。顺序访问下降10倍左右。
2.1 防止发生swap:
1)关闭CPU的numa,防止numa导致的swap;
2)设置 vm.swappiness=1; 在 /etc/sysctl.conf 中添加:vm.swappiness=1,然后 sysctl -p; 也可以 sysctl vm.swappiness=1临时修改,然后sysctl -p
注意:在RHEL/CentOS 6.4及更新的内核中 vm.swappiness = 0 的默认行为被修改了,如果继续设置vm.swappiness = 0,
有可能导致系统内存溢出,从而导致MySQL被意外kill掉。所以这里我们设置为 1 而不是传统的 0.
3)设置 /proc/$(pidof -s mysqld)/oom_adj为较小的值(-15,-16或者-17)来尽量避免MySQL由于内存不足而被关闭
[root@localhost ~]# echo -17 > /proc/$(pidof mysqld)/oom_adj
[root@localhost ~]# cat /proc/$(pidof mysqld)/oom_adj
-17
这个oom_adj中的变量的范围为15到-16之间。越大越容易在内存不足时被kill。-17 则表示该进程不会被kill掉,当内存不足时,会kill其它进程。
4)使用 hugepage 可以避免swap out; 但是 huagepage也是有代价的(导致page争用加剧)。
2.2 在BIOS 设置内存为最大性能模式;
2.3 调节 disk cache 刷新到磁盘的行为
因为Linux默认会大量的进行文件cache,也就是将大量内存用于disk cache。这样的话,会影响mysql使用内存。所以我们可以调节disk cache在脏块达到多大的百分比时,进行刷新。vm.dirty_background_ratio=10; 默认值为10,表示disk cache中的脏页数量达到10%时,pdflush内核线程会被调用,异步刷新disk cache; vm.dirty_ratio=20; 表示disk cache中的脏页数量达到20%时,会进行同步的disk cache刷新,从而会阻塞系统中应用进程的IO操作!我们可以调低vm.dirty_background_ratio来降低disk cache对mysql使用内存的影响,但是可能会增加磁盘IO,因为文件cache减少了,增加其他进程的page fault;(vm.dirty_background_ratio / vm.dity_ratio 带有backround表示异步刷新,没有带的是同步刷新。)
具体参见:http://www.bitsCN.com/database/201510/445112.html
3. 磁盘IO的调优
磁盘IO的调优涉及到文件系统的调优和磁盘的调优。
3.1 文件系统的调优
1)文件系统的选择:在rhel6.4之前ext4性能比xfs好,因为xfs有lock争用的bug。但是6.4开始,xfs的bug被fix了。测试表明xfs性能比ext4好。
2)文件挂载选项:文件挂载时启用noatime,nodiratime,可以在 /etc/fstab 中进行修改。
具体参见:http://www.bitsCN.com/database/201510/445114.html
3.2 磁盘的调优
1)IO调度算法:mysql服务器一定不要使用默认的CFQ调度算法。如果是SSD,那么应该使用NOOP调度算法,如果是磁盘,就应该使用Deadline调度算法。
修改方法:
[root@localhost ~]# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
[root@localhost ~]# echo noop > /sys/block/sda/queue/scheduler
[root@localhost ~]# cat /sys/block/sda/queue/scheduler
[noop] anticipatory deadline cfq
这是临时修改,重启失效。永久修改,需要修改文件 /boot/grub/menu.lst 中的elevator=deadline 或者noop:
# vi /boot/grub/menu.lst
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet
2)加大内存,可以使mysql缓存更大的内容,减少IO操作。
3)磁盘RAID10 或者 换SSD;
4)适当的采用Nosql(redis/mongdb/ssdb)等减轻mysql的负担;也可以架构master-slave减轻master的IO压力。
5)使用memcache或者reids在mysql前面加一层缓存,减轻磁盘IO;
具体参见:http://www.bitsCN.com/database/201510/445288.html
4. 网络调优
网络调优分为硬件层面和TCP/IP软件层面参数的调优。
4.1 网络硬件调优:
1)换延迟更小,throught更大的网卡;
2)双网卡绑定,进行负载均衡和高可用;
4.2 TCP/IP参数调优:
1)socket buffer 参数调节:
1>/proc/sys/net/ipv4/tcp_mem TCP全局缓存,单位为内存页(4k);
对应的内核参数:net.ipv4.tcp_mem ,可以在 /etc/sysctl.conf 中进行修改;
2>/proc/sys/net/ipv4/tcp_rmem 接收buffer,单位为字节
对应的内核参数:net.ipv4.tcp_rmem, 可以在 /etc/sysctl.conf 中进行修改;
3>/proc/sys/net/ipv4/tcp_wmem 接收buffer,单位为字节
对应的内核参数:net.ipv4.tcp_wmem, 可以在 /etc/sysctl.conf 中进行修改;
4>/proc/sys/net/core/rmem_default 接收buffer默认大小,单位字节
对应内核参数:net.core.rmem_default, 可以在 /etc/sysctl.conf 中进行修改;
5>/proc/sys/net/core/rmem_max 接收buffer最大大小,单位字节
对应内核参数:net.core.rmem_max, 可以在 /etc/sysctl.conf 中进行修改;
6>/proc/sys/net/core/wmem_default 发送buffer默认大小,单位字节
对应内核参数:net.core.rmem_default, 可以在 /etc/sysctl.conf 中进行修改;
7>/proc/sys/net/core/wmem_max 发送buffer最大大小,单位字节
对应内核参数:net.core.rmem_max, 可以在 /etc/sysctl.conf 中进行修改;
2)offload配置:
将tso,checksum等功能交给网卡硬件来完成:
ethtool -K eth0 rx on|off
ethtool -K eth0 tx on|off
ethtool -K eth0 tso on|off
3)调大网卡的接收队列和发送队列:
1>接收队列:/proc/sys/net/core/netdev_max_backlog 对应内核参数:net.core.netdev_max_backlog
2>发送队列:
查看大小:ifconfig eth0 | grep txqueue
修改大小:ifconfig eth0 txqueuelen 20000
4)调大 SYN 半连接 tcp_max_syn_backlog 数量:
sysctl -w net.ipv4.tcp_max_syn_backlog=4096
也可以在/etc/sysctl.conf文件中配置。
5)net.core.somaxconn :
该参数为完成3次握手,已经建立了连接,等待被accept然后进行处理的数量。默认为128,我们可以调整到 65535,甚至更大。也就是尅有容纳更多的等待处理的连接。
MTU 大小 调优:
如果TCP连接的两端的网卡和网络接口层都支持大的 MTU,那么我们就可以配置网络,使用更大的mtu大小,也不会导致被 切割重新组装发送。
配置命令:ifconfig eth0 mtu 9000 up
6)TCP连接的 CLOSE_WAIT 和 TIME_WAIT
如果TCP连接的 CLOSE_WAIT 和 TIME_WAIT 状态过多时,分别需要调优TCP的keepalive相关的参数和TCP的回收相关的参数。
TCP/IP的调优极其复杂,具体参见博文:http://www.cnblogs.com/digdeep/p/4869010.html
5. Linux 系统中的各种后台daemon的调优
Linux系统中存在各种各样的后台daemon,也就是各种service,对于mysql服务器来说很多没有必要的service就可以痛痛关闭掉。
mysql的最小化的后台服务,可以只有:crond,sshd,rsyslog,network,sysstat
当然如果有需要可以在增加其他服务。
使用 chckconfig --level 35 servicename off; 可以进行关闭。35表示在runlevel的level =3 和 level =5级别进行关闭。
6. 总结:
Linux系统和硬件的调优,除了一些通用的调优之外。其它比如TCP/IP的调优,我们首先是要使用相关的各种命令查清楚瓶颈在哪里,然后才好对症下药。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

通用矩陣乘法(GeneralMatrixMultiplication,GEMM)是許多應用程式和演算法中至關重要的一部分,也是評估電腦硬體效能的重要指標之一。透過深入研究和優化GEMM的實現,可以幫助我們更好地理解高效能運算以及軟硬體系統之間的關係。在電腦科學中,對GEMM進行有效的最佳化可以提高運算速度並節省資源,這對於提高電腦系統的整體效能至關重要。深入了解GEMM的工作原理和最佳化方法,有助於我們更好地利用現代計算硬體的潛力,並為各種複雜計算任務提供更有效率的解決方案。透過對GEMM性能的優

7月29日,在AITO问界第四十万台新车下线仪式上,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东出席发表演讲并宣布,问界系列车型将于今年8月迎来华为乾崑ADS3.0版本的上市,并计划在8月至9月间陆续推送升级。8月6日即将发布的享界S9将首发华为ADS3.0智能驾驶系统。华为乾崑ADS3.0版本在激光雷达的辅助下,将大幅提升智驾能力,具备融合端到端的能力,并采用GOD(通用障碍物识别)/PDP(预测决策规控)全新端到端架构,提供车位到车位智驾领航NCA功能,并升级CAS3.0全

4月11日,華為官方首次宣布HarmonyOS4.2百機升級計劃,此次共有180餘款設備參與升級,品類覆蓋手機、平板、手錶、耳機、智慧螢幕等設備。過去一個月,隨著HarmonyOS4.2百機升級計畫的穩定推進,包括華為Pocket2、華為MateX5系列、nova12系列、華為Pura系列等多款熱門機型也已紛紛展開升級適配,這意味著會有更多華為機型用戶享受到HarmonyOS帶來的常用常新體驗。從使用者回饋來看,華為Mate60系列機種在升級HarmonyOS4.2之後,體驗全方位躍升。尤其是華為M

蘋果16系統中版本最好的是iOS16.1.4,iOS16系統的最佳版本可能因人而異添加和日常使用體驗的提升也受到了很多用戶的好評。蘋果16系統哪個版本最好答:iOS16.1.4iOS16系統的最佳版本可能因人而異。根據公開的消息,2022年推出的iOS16被認為是一個非常穩定且性能優越的版本,用戶對其整體體驗也相當滿意。此外,iOS16中新功能的新增和日常使用體驗的提升也受到了許多用戶的好評。特別是在更新後的電池續航力、訊號表現和發熱控制方面,使用者的回饋都比較正面。然而,考慮到iPhone14

電腦作業系統就是用來管理電腦硬體和軟體程式的系統,同時也是根據所有軟體系統去開發的作業系統程序,而不同的作業系統,對應的使用人群也是不同的,那麼電腦系統有哪些呢?下面,小編跟大家分享電腦作業系統有哪些。所謂的作業系統就是管理電腦硬體與軟體程序,所有的軟體都是基於作業系統程式的基礎上去開發的。其實作業系統種類是很多的,用工業用的,商業用的,個人用的,涉及的範圍很廣。下面,小編跟大家講解電腦作業系統有哪些。電腦作業系統有哪些windows系統Windows系統是美國微軟公司所開發的作業系統。比最

Linux和Windows是兩種常見的作業系統,分別代表了開源的Linux系統和商業的Windows系統。在這兩種作業系統中,都存在著命令列介面,用於使用者與作業系統互動。在Linux系統中,使用者使用的是Shell命令列,而在Windows系統中,使用者使用的是cmd命令列。 Linux系統中的Shell命令列是一個非常強大的工具,可以完成幾乎所有的系統管理任

Oracle資料庫中修改系統日期方法詳解在Oracle資料庫中,修改系統日期的方法主要涉及修改NLS_DATE_FORMAT參數和使用SYSDATE函數。本文將詳細介紹這兩種方法及其具體的程式碼範例,幫助讀者更好地理解並掌握在Oracle資料庫中修改系統日期的操作。一、修改NLS_DATE_FORMAT參數方法NLS_DATE_FORMAT是Oracle數據

系統字體在哪個資料夾在現代的電腦系統中,字體起著至關重要的作用,它影響著我們的閱讀體驗和文字表達的美觀程度。而對於一些熱衷於個人化設定和自訂的使用者來說,了解系統字體的儲存位置就顯得尤為重要。那麼,系統字體究竟會保存在哪個資料夾呢?本文將為大家一一揭曉。在Windows作業系統中,系統字型存放在一個名為「Fonts」的資料夾裡。這個資料夾預設位於C碟的Win
