程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL 優化之 Linux系統層面調優

MySQL 優化之 Linux系統層面調優

編輯:MySQL綜合教程

MySQL 優化之 Linux系統層面調優


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.Bkjia.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.Bkjia.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.Bkjia.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.Bkjia.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的調優,我們首先是要使用相關的各種命令查清楚瓶頸在哪裡,然後才好對症下藥。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved