mysql學習記錄(二十一)–調整linuxI/O以提高mysql運行效率

一、概念:
1.使用磁盤陣列
RAID譯成中文為“廉價磁盤冗餘陣列”。簡稱“磁盤陣列”
2.常見raid級別:
a.raid 0:條帶化,將數據依次分佈
b.raid 1:磁盤鏡像,兩個磁盤一組,寫入時兩個一起寫入,讀時從任意一個磁盤讀
c.raid 10:先做磁盤鏡像又做條帶化,既有raid 1的可靠性和raid 0的優良並發性能
d.raid 4:像raid 0一樣對磁盤組條帶化,另需要加一個磁盤用來寫各Stripe的校驗糾錯數據
e.raid 5:將每一個條帶的校驗糾錯數據塊也分別寫到各個磁盤,各不是寫到一個特定的磁盤
3.選擇raid級別:
a.讀寫頻繁,可靠性要求高,raid 10
b.讀頻繁而寫較少,對可靠性有一定要求,raid 5
c.讀寫頻繁,可靠性要求不高,rand 0
4.虛擬文件卷或軟raid
a.linux下的邏輯卷系統lvm2,支持條帶化
b.linux下的md驅動,支持raid 0,raid 1,raid 4,raid 5,raid 6
5.使用symbolic links分佈I/O
a.可以利用操作系統的符號連接將不同的資料庫、表或索引指向不同的物理磁盤,從而達到分佈磁盤I/O的目的
b.將一個資料庫指向其他物理磁盤
c.將MyISAM(其他存儲引擎的表不支持)表的數據文件或索引文件指向其他物理磁盤
1)對於新建的表可以在create table中增加data directory和index directory
2)對於已有的表可以將數據文件或索引文件轉移到目標磁盤,但表設定文件必須位於mysql數據文件目錄下,不能用符號連接
6.禁止操作系統更新文件的atime屬性
7.調整I/O調度算法:
a.NOOP算法:不對I/O請求排序,更適合隨機設備。
b.最後期限算法:當系統存在大量順序請求的時候,Deadline可能導致請求無法被很好的排序,引發頻繁尋道。
c.預期算法:基於預測的I/O算法,適合寫入較多的環境,不適合Mysql等隨機讀取較多的資料庫環境
d.完全公平隊列:將I/O請求按照進程分別放入進程對應的隊列中。CFQ以時間片算法為前提,輪轉調動隊列
8.RAID卡電池充放電問題:
a.raid卡電池會自動充放電
9.RAID卡緩存策略:
10.RAID卡電池充放電帶來的I/O性能波動
a.根據raid卡電池下次充放電的時間,定期在業務量較低的時候,提前進行充放電。
b.設置Forced WriteBack寫策略,此時一定要有UPS之類的後備電源
11.NUMA架構優化:
a.多處理器結婚(SMP):對此進行擴展的方法有增加內存、使用更快的CPU、增加CPU、擴充I/O、增加更多的磁盤
b.SMP架構導致在擴展能力上被限制,NUMA架構出現瞭。NUMA把一臺計算機分成多個節點,每個節點內部擁有多個CPU,節點內部使用共有的內存控制器,節點之間是通過互聯模塊進行連接和信息交互
c.NUMA的內存分配策略有以下4種:
1)缺省:總是在本地節點分配
2)綁定:強制分配到指定節點上
3)交叉:在所有節點或者指定節點上交叉分配內存
4)優先:在指定節點上分配,失敗則在其他節點上分配
d.若單機隻運行一個mysql實例,可以選擇關閉NUMA
1)在BIOS中設置關閉
2)在/etc/grub.conf的kernel行追加numa = off
二、實踐:
abc@ubuntu:~$ dmesg | grep -i scheduler
[ 1.124750] io scheduler noop registered
[ 1.124754] io scheduler deadline registered (default)
[ 1.124837] io scheduler cfq registered
abc@ubuntu:~$ more /sys/block/sda/queue/scheduler

noop [deadline] cfq

備註:由於各種原因,其他本節相關實驗等過段時間再做。

You May Also Like