RAID(Redundant Array of Inexpensive Disks)是提升 I/O 性能與可靠性的基礎手段。常見級別對比:
| 級別 | 特點 | 適用場景 |
|---|---|---|
| RAID 0 | 條帶化,無冗余,讀寫並發最強 | 讀寫頻繁、可靠性要求低、臨時數據 |
| RAID 1 | 鏡像,雙寫單讀,高可靠 | 關鍵數據、小容量高可用 |
| RAID 10 | 先鏡像再條帶,兼顧性能與可靠 | 核心業務庫首選,讀寫頻繁且高可靠 |
| RAID 5 | 分布式校驗,寫入有開銷 | 讀多寫少、對容量敏感、有一定可靠要求 |
| RAID 4 | 專用校驗盤,寫入瓶頸明顯 | 較少用於生產數據庫 |
選型口訣:核心交易庫上 RAID 10;報表/數倉讀多寫少上 RAID 5;臨時數據可 RAID 0。
CREATE TABLE ... DATA DIRECTORY=... INDEX DIRECTORY=...noatime,nodiratime,減少元數據寫入cat /sys/block/sda/queue/scheduler):
| 調度器 | 特點 | 建議場景 |
|---|---|---|
| NOOP | 不排序,直接 FIFO | SSD、NVMe、虛擬機、隨機 I/O 為主 |
| Deadline | 保證請求截止時間,防止餓死 | 傳統機械盤、順序讀寫較多 |
| CFQ | 按進程公平分時片 | 多租戶、桌面環境,不適合高併發數據庫 |
| Anticipatory | 預測讀取,已棄用 | 舊內核,寫入多場景 |
MySQL 隨機讀寫為主,**生產環境推薦 NOOP 或 Deadline**,並配合 elevator=noop 內核參數固化。
SMP 擴展受限,NUMA 將 CPU/內存劃分為多個節點。MySQL 單實例部署時,跨節點內存訪問延遲高。
localalloc(默認本地)、preferred、interleave、bindgrub.conf 加 numa=offnumactl --interleave=all 啟動實例,均衡內存分配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:~$ cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
備註:當前系統默認 Deadline,建議生產庫切換為 NOOP。其他實驗待後續補充。