mysql作業系統和硬體優化 高效能mysql筆記
阿新 • • 發佈:2018-11-22
什麼限制了mysql的效能
記憶體,磁碟,cpu,網路等都有可能,最常見的兩個是:
cpu:當有大量資料可以足夠快的讀取時cpu可能會
磁碟i/o:當資料比記憶體的時磁碟可能出現瓶頸。
選擇合適cpu
高吞吐:多核cpu
低延時:高速cpu
平衡記憶體和io資源
- 資料集: 單位時間內所需資料和總資料佔比;
- 配置大記憶體: 配置大量記憶體使得資料集儲存在記憶體中可以避免隨機I/O;
- 快取讀寫:
- 讀:一旦快取所有資料就不會再有磁碟i/0;
- 寫:相同資料多次寫入到快取中然後一次重新整理到磁碟,不同資料可以i/o合併寫入提高了寫入效率。
- 隨機順序I/O: 隨機I/O慢因為可能讀取的是一整頁的資料;
固態儲存
- 什麼時候使用固態
有大量隨機I/O的時候。 - 固態的型別
快閃記憶體:快閃記憶體讀寫很快但是寫壽命短,可以兩臺機器連線一個快閃記憶體一個庫掛了可以用另一個。
ssd:建議對ssd做raid。
PCie卡:讀寫最快價格最貴。 - 優化固態上的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 卡是有帶電池的)
優化網路配置
- DNS配置 儘量使用skip-name-resolve來減少因解析帶來的不必要麻煩.
- 檢查網路的ping 丟包率.
- 通過優化/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分鐘