首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 學習筆記(二十一):Linux I/O 調優實戰,提升 MySQL 運行效能

     編輯:MySQL 綜合教學

一、核心概念篇

1. 磁盤陣列(RAID)選型指南

RAID(Redundant Array of Inexpensive Disks)是提升 I/O 性能與可靠性的基礎手段。常見級別對比:

級別特點適用場景
RAID 0條帶化,無冗余,讀寫並發最強讀寫頻繁、可靠性要求低、臨時數據
RAID 1鏡像,雙寫單讀,高可靠關鍵數據、小容量高可用
RAID 10先鏡像再條帶,兼顧性能與可靠核心業務庫首選,讀寫頻繁且高可靠
RAID 5分布式校驗,寫入有開銷讀多寫少、對容量敏感、有一定可靠要求
RAID 4專用校驗盤,寫入瓶頸明顯較少用於生產數據庫

選型口訣:核心交易庫上 RAID 10;報表/數倉讀多寫少上 RAID 5;臨時數據可 RAID 0。

2. 軟件層面的 I/O 分流手段

  • LVM2(邏輯卷管理):支持條帶化,彈性擴容
  • mdadm(Linux 軟 RAID):支持 RAID 0/1/4/5/6,無需硬件 RAID 卡
  • Symbolic Links(符號鏈接):將不同庫、表、索引指向不同物理磁盤
    • 庫級:將整個數據庫目錄鏈接到獨立磁盤
    • 表級(僅 MyISAM):CREATE TABLE ... DATA DIRECTORY=... INDEX DIRECTORY=...
    • 遷移既有表:移動 .MYD/.MYI 文件並建立鏈接,.frm 定義文件必須留在原數據目錄

3. 文件系統與 I/O 調度器優化

  • 關閉 atime 更新:掛載參數加 noatime,nodiratime,減少元數據寫入
  • I/O 調度器選擇(查看:cat /sys/block/sda/queue/scheduler):
    調度器特點建議場景
    NOOP不排序,直接 FIFOSSD、NVMe、虛擬機、隨機 I/O 為主
    Deadline保證請求截止時間,防止餓死傳統機械盤、順序讀寫較多
    CFQ按進程公平分時片多租戶、桌面環境,不適合高併發數據庫
    Anticipatory預測讀取,已棄用舊內核,寫入多場景

    MySQL 隨機讀寫為主,**生產環境推薦 NOOP 或 Deadline**,並配合 elevator=noop 內核參數固化。

4. RAID 卡電池與緩存策略

  • 電池定期充放電會導致寫入性能周期性下降(WriteBack 降級為 WriteThrough)
  • 對策:業務低峰期主動觸發充放電;或配置 Forced WriteBack + UPS 強制保持寫回模式

5. NUMA 架構優化

SMP 擴展受限,NUMA 將 CPU/內存劃分為多個節點。MySQL 單實例部署時,跨節點內存訪問延遲高。

  • 內存分配策略:localalloc(默認本地)、preferred、interleave、bind
  • 單實例建議關閉 NUMA:BIOS 關閉或 grub.conf 加 numa=off
  • 多實例部署時,用 numactl --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。其他實驗待後續補充。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved