Linux上MySQL最佳化總結

來源:互聯網
上載者:User

Linux上MySQL最佳化總結

現在MySQL啟動並執行大部分環境都是在Linux上的,如何在Linux作業系統上根據MySQL進行最佳化,我們這裡給出一些通用簡單的策略。這些方法都有助於改進MySQL的效能。

閑話少說,進入正題。

--------------------------------------分割線 --------------------------------------

Ubuntu 14.04下安裝MySQL

《MySQL權威指南(原書第2版)》清晰中文掃描版 PDF

Ubuntu 14.04 LTS 安裝 LNMP Nginx\PHP5 (PHP-FPM)\MySQL

Ubuntu 14.04下搭建MySQL主從伺服器

Ubuntu 12.04 LTS 構建高可用分布式 MySQL 叢集

Ubuntu 12.04下原始碼安裝MySQL5.6以及Python-MySQLdb

MySQL-5.5.38通用二進位安裝

--------------------------------------分割線 --------------------------------------

一、CPU

首先從CPU說起。

你仔細檢查的話,有些伺服器上會有的一個有趣的現象:你cat /proc/cpuinfo時,會發現CPU的頻率竟然跟它標稱的頻率不一樣:

  1. #cat /proc/cpuinfo
  2. processor :5
  3. model name :Intel(R)Xeon(R) CPU E5-26200@2.00GHz
  4. ...
  5. cpu MHz:1200.000

這個是Intel E5-2620的CPU,他是2.00G * 24的CPU,但是,我們發現第5顆CPU的頻率為1.2G。

這是什麼原因呢?

這些其實都源於CPU最新的技術:節能模式。作業系統和CPU硬體配合,系統不繁忙的時候,為了節約電能和降低溫度,它會將CPU降頻。這對環保人士和抵制地球變暖來說是一個福音,但是對MySQL來說,可能是一個災難。

為了保證MySQL能夠充分利用CPU的資源,建議設定CPU為最大效能模式。這個設定可以在BIOS和作業系統中設定,當然,在BIOS中設定該選項更好,更徹底。由於各種BIOS類型的區別,設定為CPU為最大效能模式千差萬別,我們這裡就不具體展示怎麼設定了。

二、記憶體

然後我們看看記憶體方面,我們有哪些可以最佳化的。

i) 我們先看看numa

非一致儲存訪問結構 (NUMA : Non-Uniform Memory Access) 也是最新的記憶體管理技術。它和對稱式多處理器結構 (SMP : Symmetric Multi-Processor) 是對應的。簡單的隊別如下:

,詳細的NUMA資訊我們這裡不介紹了。但是我們可以直觀的看到:SMP訪問記憶體的都是代價都是一樣的;但是在NUMA架構下,本地記憶體的訪問和非 本地記憶體的訪問代價是不一樣的。對應的根據這個特性,作業系統上,我們可以設定進程的記憶體配置方式。目前支援的方式包括:

  1. --interleave=nodes
  2. --membind=nodes
  3. --cpunodebind=nodes
  4. --physcpubind=cpus
  5. --localalloc
  6. --preferred=node

簡而言之,就是說,你可以指定記憶體在本地分配,在某幾個CPU節點分配或者輪詢分配。除非 是設定為--interleave=nodes輪詢分配方式,即記憶體可以在任意NUMA節點上分配這種方式以外。其他的方式就算其他NUMA節點上還有內 存剩餘,Linux也不會把剩餘的記憶體配置給這個進程,而是採用SWAP的方式來獲得記憶體。有經驗的系統管理員或者DBA都知道SWAP導致的資料庫效能 下降有多麼坑爹。

所以最簡單的方法,還是關閉掉這個特性。

關閉特性的方法,分別有:可以從BIOS,作業系統,啟動進程時臨時關閉這個特性。

a) 由於各種BIOS類型的區別,如何關閉NUMA千差萬別,我們這裡就不具體展示怎麼設定了。

b) 在作業系統中關閉,可以直接在/etc/grub.conf的kernel行最後添加numa=off,如下所示:

  1. kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup-root
    rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD quiet
    SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=VolGroup/swap
    rhgb crashkernel=auto quiet KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off

另外可以設定 vm.zone_reclaim_mode=0盡量回收記憶體。

c) 啟動MySQL的時候,關閉NUMA特性:

  1. numactl --interleave=all mysqld &

當然,最好的方式是在BIOS中關閉。

ii) 我們再看看vm.swappiness。

vm.swappiness是作業系統控制實體記憶體交換出去的策略。它允許的值是一個百分比的值,最小為0,最大運行100,該值預設為60。vm.swappiness設定為0表示盡量少swap,100表示盡量將inactive的記憶體頁交換出去。

具體的說:當記憶體基本用滿的時候,系統會根據這個參數來判斷是把記憶體中很少用到的inactive 記憶體交換出去,還是釋放資料的cache。cache中緩衝著從磁碟讀出來的資料,根據程式的局部性原理,這些資料有可能在接下來又要被讀 取;inactive 記憶體顧名思義,就是那些被應用程式對應著,但是“長時間”不用的記憶體。

我們可以利用vmstat看到inactive的記憶體的數量:

  1. #vmstat -an 1
  2. procs -----------memory-------------swap-------io------system-------cpu-----
  3. r b swpd free inact active si so bi bo in cs us sy id wa st
  4. 10027522384326928170464400015311100010000
  5. 000275233003269361704164000747845900010000
  6. 000275236563269361704692008843916860010000
  7. 000275243003269161703412004521982620010000

通過/proc/meminfo 你可以看到更詳細的資訊:

  1. #cat /proc/meminfo | grep -i inact
  2. Inactive:326972 kB
  3. Inactive(anon):248 kB
  4. Inactive(file):326724 kB

這裡我們對不活躍inactive記憶體進一步深入討論。 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中添加一行:

  1. echo "vm.swappiness = 0">>/etc/sysctl.conf

並使用sysctl -p來使得該參數生效。

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.