中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux系統中MySQL優化技巧有哪些

發布時間:2022-01-21 09:48:48 來源:億速云 閱讀:152 作者:iii 欄目:開發技術

今天小編給大家分享一下Linux系統中MySQL優化技巧有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

Linux系統中MySQL優化技巧有哪些

1.禁止操作系統更新文件的atime屬性

atime是Linux/UNIX系統下的一個文件屬性,每當讀取文件時,操作系統都會將讀操作時間回寫到磁盤上。對于讀寫頻繁的數據庫文件來說,記錄文件的訪問時間一般沒有任何用處,卻會增加磁盤系統的負擔,影響I/O性能!因此,可以通過設置文件系統的mount熟悉,阻止操作系統寫atime信息,減輕磁盤I/O負擔。方法如下:

(1)修改文件系統配置文件/etc/fstab,指定noatime選項:

 UUID=33958004-e8a7-4135-844f-707a5537e86a /data                   ext4  noatime     0    1

(2)重新mount文件系統使其修改生效:

 [root@MySQL-01 ~]# mount -o remount /data

2.調整I/O調度算法

詳細說明請參考前面文章提到的I/O調度算法的選擇

(1)查看當前系統支持的I/O調度算法:

 [root@MySQL-01 ~]# dmesg | grep -i scheduler
 io scheduler noop registered
 io scheduler anticipatory registered
 io scheduler deadline registered
 io scheduler cfq registered (default)
 [root@MySQL-01 ~]#

(2)查看當前設備(/dev/sda)使用的I/O調度算法:

 [root@MySQL-01 ~]# cat /sys/block/sda/queue/scheduler    
 noop anticipatory deadline [cfq]
 [root@MySQL-01 ~]#

(3)修改當前設備使用的I/O調度算法,普通磁盤可以選擇Deadline,SSD我們可以選擇使用NOOP或者Deadline

 [root@MySQL-01 ~]# echo "deadline" >> /sys/block/sda/queue/scheduler
 [root@MySQL-01 ~]# cat /sys/block/sda/queue/scheduler                
 noop anticipatory [deadline] cfq
 [root@MySQL-01 ~]#

永久修改I/O調度算法,可以通過修改內核引導參數,增加elevator=調度算法名

 [root@MySQL-01 ~]# vim /boot/grub/menu.lst

更改后的內容:

 [root@MySQL-01 ~]# grep "deadline" /boot/grub/menu.lst      
         kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=c0618639-a967-4601-bca7-cc3b99c5c332 elevator=deadline rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
 [root@MySQL-01 ~]#

3.NUMA架構優化

從系統架構來看,目前的商用服務器大體可以分為三類:

(1)對稱多處理器架構(Symmetric Multi-Processor,SMP)

(2)非一致存儲訪問架構(Non-Uniform Memory Access,NUMA)

(3)海量并行處理架構(Massive Parallel Processing,MPP)

一般服務器是SMP或者NUMA架構的較多。我這里只詳細說明NUMA架構,至于其他的童鞋們可以自行查閱資料_

NUMA把一臺計算機分成多個節點(Node),每個節點內部擁有多個CPU,節點內部使用共有的內存控制器,節點之間是通過互聯模塊進行連接和信息交互,因此節點的所有內存對于本節點所有的CPU是等同的,而對于其他節點中的所有CPU都是不同的。因此每個CPU可以訪問整個系統內存,但是訪問本地節點的內存速度最快(不需要經過互聯模塊),訪問非本地節點的內存速度較慢(需要經過互聯模塊),即CPU訪問內存的速度與節點的距離有關,距離稱為Node Distance。如下圖:

Linux系統中MySQL優化技巧有哪些

顯示當前NUMA的節點情況:

Linux系統中MySQL優化技巧有哪些

 [root@localhost ~]# numactl --hardware
 available: 2 nodes (0-1)
 node 0 cpus: 0 2 4 6
 node 0 size: 16338 MB
 node 0 free: 136 MB
 node 1 cpus: 1 3 5 7
 node 1 size: 16384 MB
 node 1 free: 66 MB
 node distances:
 node   0   1
   0:  10  20
   1:  20  10
 [root@localhost ~]# free -m
              total       used       free     shared    buffers     cached
 Mem:         32060      31856        204          0        362      13016
 -/+ buffers/cache:      18477      13582
 Swap:         7999          6       7993
 [root@localhost ~]#

Linux系統中MySQL優化技巧有哪些

當前服務器上有兩個節點Node 0和Node 1,Node 0的本地內存約為16GB,Node 1的本地內存約為16GB,可以看出系統一共有32GB內存

節點之間的距離(Node Distance)是指節點1訪問節點0上的內存需要付出的代價的一種表現形式。在上述例子中,Linux節點本地內存聲明距離為10,非本地內存聲明距離20.

NUMA的內存分配策略分為以下4種:

(1)缺省default:總是在本地節點分配(分配在當前進程運行的節點上)

(2)綁定bind:強制分配到指定節點上

(3)交叉interleave:在所有節點或者指定節點上交叉分配內存

(4)優先preferred:在指定節點上分配,失敗則在其他節點分配

顯示當前系統NUMA策略:

Linux系統中MySQL優化技巧有哪些

 [root@localhost ~]# numactl --show
 policy: default
 preferred node: current
 physcpubind: 0 1 2 3 4 5 6 7
 cpubind: 0 1
 nodebind: 0 1
 membind: 0 1
 [root@localhost ~]#

Linux系統中MySQL優化技巧有哪些

因為NUMA默認的內存分配策略是優先在進程所在CPU的本地內存中分配,會導致CPU節點之間內存分配不均衡,當某個CPU節點內存不足時,會導致SWAP發生,而不是從遠程節點分配內存,這就是Swap Insanity現象。

MySQL是單進程多線程架構的數據庫,當NUMA采用默認的內存分配策略時,MySQL進程會被并且僅僅會被分配到NUMA的一個節點上去。假設MySQL進程被分配到Node 1運行,這個節點的本地內存是8GB,而MySQL配置了14GB內存,MySQL分配的14GB內存中,超過節點本地內存部分(14GB-8GB=6GB)Linux系統寧愿使用Swap也不會使用其他節點的物理內存。在這種情況下,能觀察到系統雖然總共可用的物理內存還很多,但是MySQL進程已經開始使用Swap了。

MySQL對NUMA的特性支持不好,如果單機只運行一個MySQL實例,可以選擇關閉NUMA,關閉的方式有兩種:

(1)硬件層,在BIOS中設置關閉

(2)OS內核層,啟動時設置numa=off

修改/etc/grub.conf,添加numa=off

 [root@MySQL-01 ~]# vim /etc/grub.conf
 [root@MySQL-01 ~]# grep 'numa' /etc/grub.conf
         kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=c0618639-a967-4601-bca7-cc3b99c5c332 elevator=deadline rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off
 [root@MySQL-01 ~]#

或者通過numactl命令將NUMA的內存分配策略修改為interleave

 /usr/bin/numactl --interleave=all /usr/local/mysql-5.1.66/bin/mysqld_safe --defaults-file=/usr/local/mysql-5.1.66/my.cnf

這樣就指定了MySQL啟動時內存的分配策略是interleave

如果單機運行多個MySQL實例,可以將不同MySQL實例綁定到不同的CPU節點上,同時配置合適的MySQL內存參數,并且采用綁定的內存分配測試,強制在本地節點分配內存。

4.vm.swappiness調整

swappiness是操作系統控制物理內存交換出去的策略。它允許的值是一個百分比的值,最小為0,最大運行100,該值默認為60。vm.swappiness設置為0表示盡量少swap,100表示盡量將inactive的內存頁交換出去。 具體的說:當內存基本用滿的時候,系統會根據這個參數來判斷是把內存中很少用到的inactive 內存交換出去,還是釋放數據的cache。cache中緩存著從磁盤讀出來的數據,根據程序的局部性原理,這些數據有可能在接下來又要被讀取;inactive 內存顧名思義,就是那些被應用程序映射著,但是“長時間”不用的內存。

我們可以利用vmstat看到inactive的內存的數量:

Linux系統中MySQL優化技巧有哪些

 [root@MySQL-01 ~]# vmstat -an 1 5
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
  r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
  0  0   4892 1194972 234208 492404    0    0     5    38   32   83  0  1 99  0  0
  0  0   4892 1194964 234208 492420    0    0     0     0   24   29  0  0 100  0  0
  0  0   4892 1194964 234208 492420    0    0     0     0   12   21  0  0 100  0  0
  0  0   4892 1194964 234208 492420    0    0     0     0   20   24  0  0 100  0  0
  0  0   4892 1194964 234208 492420    0    0     0     0   13   21  0  0 100  0  0
 [root@MySQL-01 ~]#

Linux系統中MySQL優化技巧有哪些

通過/proc/meminfo 你可以看到更詳細的信息:

 [root@MySQL-01 ~]# cat /proc/meminfo | grep -i inact
 Inactive:         234188 kB
 Inactive(anon):     3228 kB
 Inactive(file):   230960 kB
 [root@MySQL-01 ~]#

Linux中,內存可能處于三種狀態:free,active和inactive。眾所周知,Linux Kernel在內部維護了很多LRU列表用來管理內存,比如LRU_INACTIVE_ANON, LRU_ACTIVE_ANON, LRU_INACTIVE_FILE , LRU_ACTIVE_FILE, LRU_UNEVICTABLE。其中LRU_INACTIVE_ANON, LRU_ACTIVE_ANON用來管理匿名頁,LRU_INACTIVE_FILE , LRU_ACTIVE_FILE用來管理page caches頁緩存。系統內核會根據內存頁的訪問情況,不定時的將活躍active內存被移到inactive列表中,這些inactive的內存可以被交換到swap中去。 一般來說,MySQL,特別是InnoDB管理內存緩存,它占用的內存比較多,不經常訪問的內存也會不少,這些內存如果被Linux錯誤的交換出去了,將浪費很多CPU和IO資源。InnoDB自己管理緩存,cache的文件數據來說占用了內存,對InnoDB幾乎沒有任何好處。 所以,我們在MySQL的服務器上最好設置vm.swappiness=0。

我們可以通過在sysctl.conf中添加一行(如果你的內核版本是2.6.32-303.el6及以后,請設置vm.swappiness = 1):

 [root@MySQL-01 ~]# echo "vm.swappiness = 0" >>/etc/sysctl.conf
 [root@MySQL-01 ~]# sysctl -p

另外一種做法是innodb啟用大內存頁,也和上述方法有相同的效果。具體請參考前面文章提到的InnoDB啟用大內存頁

5.CPU優化

檢查CPU是否開啟了節能選項

Linux系統中MySQL優化技巧有哪些

 [root@localhost ~]# grep -E '^model name|^cpu MHz' /proc/cpuinfo
 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz
 cpu MHz         : 2266.602
 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz
 cpu MHz         : 2266.602
 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz
 cpu MHz         : 2266.602
 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz
 cpu MHz         : 2266.602
 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz
 cpu MHz         : 2266.602
 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz
 cpu MHz         : 2266.602
 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz
 cpu MHz         : 2266.602
 model name      : Intel(R) Xeon(R) CPU           L5520  @ 2.27GHz
 cpu MHz         : 2266.602
 [root@localhost ~]#

Linux系統中MySQL優化技巧有哪些

如果發現CPU的頻率跟它標稱的頻率不一樣,那么就是開啟了節能模式。

可以使用下面命令關閉:

 for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n performance > $CPUFREQ; done

節能模式:操作系統和CPU硬件配合,系統不繁忙的時候,為了節約電能和降低溫度,它會將CPU降頻。對MySQL來說,可能是一個災難。 為了保證MySQL能夠充分利用CPU的資源,建議設置CPU為最大性能模式。這個設置可以在BIOS和操作系統中設置,當然,在BIOS中設置該選項更好。

以上就是“Linux系統中MySQL優化技巧有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

琼结县| 岐山县| 福贡县| 文安县| 新宁县| 怀集县| 昌乐县| 安丘市| 大丰市| 交口县| 犍为县| 静乐县| 康定县| 安达市| 乐昌市| 栾城县| 蒙阴县| 大方县| 房产| 南阳市| 泸州市| 康保县| 大安市| 綦江县| 玛沁县| 宁河县| 永和县| 竹北市| 特克斯县| 抚远县| 磴口县| 孝义市| 开原市| 平定县| 桃园县| 涟源市| 方正县| 鄂伦春自治旗| 桐庐县| 迁安市| 灵宝市|