1. 程式人生 > >mysql作業系統和硬體優化 高效能mysql筆記

mysql作業系統和硬體優化 高效能mysql筆記

什麼限制了mysql的效能

記憶體,磁碟,cpu,網路等都有可能,最常見的兩個是:
cpu:當有大量資料可以足夠快的讀取時cpu可能會
磁碟i/o:當資料比記憶體的時磁碟可能出現瓶頸。

選擇合適cpu

高吞吐:多核cpu
低延時:高速cpu

平衡記憶體和io資源

  1. 資料集: 單位時間內所需資料和總資料佔比;
  2. 配置大記憶體: 配置大量記憶體使得資料集儲存在記憶體中可以避免隨機I/O;
  3. 快取讀寫:
    • 讀:一旦快取所有資料就不會再有磁碟i/0;
    • 寫:相同資料多次寫入到快取中然後一次重新整理到磁碟,不同資料可以i/o合併寫入提高了寫入效率。
  4. 隨機順序I/O: 隨機I/O慢因為可能讀取的是一整頁的資料;

固態儲存

  1. 什麼時候使用固態
    有大量隨機I/O的時候。
  2. 固態的型別
    快閃記憶體:快閃記憶體讀寫很快但是寫壽命短,可以兩臺機器連線一個快閃記憶體一個庫掛了可以用另一個。
    ssd:建議對ssd做raid。
    PCie卡:讀寫最快價格最貴。
  3. 優化固態上的mysql
  • 增加innoDB的I/O容量 增加I/O執行緒數到10-15(固態使併發得到增加)
  • 調大innodb的日誌為4g
  • 禁止預讀
  • 把日誌檔案和ibdata1(雙寫緩衝)從快閃記憶體轉移到RAID(避免很小的寫入 大量小寫入影響快閃記憶體壽命)而且可以利用percona server 特性使用4kb的塊寫事務日誌,而不是預設的521位元組。因為這會匹配大部分的快閃記憶體本身的塊大小,以獲得更好的效果

raid

  • raid0
    就是把多個硬碟合併成1個邏輯盤使用,資料讀寫時對各硬碟同時操作,不同硬碟寫入不同資料,速度快。
    最少需要2塊硬碟

  • raid1
    同時對2個硬碟讀寫(同樣的資料)。強調資料的安全性。損壞一塊不會有影響,一般伺服器系統會裝在raid1上。
    最少兩塊硬碟。

  • raid5
    把多個硬碟合併成1個邏輯盤使用,資料讀寫時會建立奇偶校驗資訊,
    並且奇偶校驗資訊和相對應的資料分別儲存於不同的磁碟上。當RAID5的一個磁碟資料發生損壞後,
    利用剩下的資料和相應的奇偶校驗資訊去恢復被損壞的資料。
    最少3塊硬碟。做raid5硬碟不宜太多,對效能有影響。

  • RAID10
    把2塊硬碟組成一個RAID1,然後兩組RAID1組成一個RAID0,就是RAID10。
    最少4塊硬碟。

  • raid50
    把兩塊raid5做成raid0,每個raid5卷有自己的校驗盤,這樣總共需要2個校驗盤。浪費兩塊磁碟的空間。
    允許壞掉兩塊磁碟,但不能是一個raid5裡的兩塊。
    最少需要6塊硬碟。

型別 特性 亢餘 盤數
raid0 便宜快速危險 N個
raid1 高速讀取簡單安全 2N個
raid5 成本速度折中 1+2n 依賴最慢的磁碟
raid10 昂貴高速安全 2*2N個
raid50 為極大資料儲存服務 2*(1+2N)個

注意:

  • raid的讀快取,預讀快取沒必要開啟因為mysql已經開了快取,raid的快取應該全部用到raid的寫中。
  • 禁用磁碟快取因為其不帶電池宕機會丟失資料:當raid把快取寫入磁碟的時候如果磁碟有快取此時可能寫入的是磁碟。(raid 卡是有帶電池的)

優化網路配置

  1. DNS配置 儘量使用skip-name-resolve來減少因解析帶來的不必要麻煩.
  2. 檢查網路的ping 丟包率.
  3. 通過優化/etc/sysctl.cnf 中的網路引數,提升效能,以下便是參考值
  • net.ipv4.ip_local_port_range = 1024 65535 改變本地的埠範圍
  • net.ipv4.tcp_max_syn_backlog = 4096 允許更多的連線進入佇列
  • net.ipv4.tcp_fin_timeout = 30 對於只在本地使用的資料庫伺服器,可以縮短tcp保持狀態的超時時間、預設1分鐘