首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 磁碟 I/O 優化全攻略:符號連結、條帶化、RAID、檔案系統調校

     編輯:MySQL 資料庫相關知識

核心瓶頸

磁碟搜尋(Seek)是大型資料庫效能首要瓶頸。隨機存取大數據時,每次讀取至少 1 次搜尋,寫入至少 2 次。優化核心在於減少搜尋次數與平行化 I/O。

策略 1:符號連結分散存放

資料庫級

# Unix
mkdir /dr1/databases/test
ln -s /dr1/databases/test /var/lib/mysql/test

# Windows (my.ini)
[mysqld]
symbolic-links=1
# 建立 C:\mysql\data\test.sym 內容為 D:\data\test\

將不同資料庫放置不同物理磁碟,平衡 I/O 負載。

資料表級

  • MySQL 4.0+ MyISAM 完整支援 DATA DIRECTORY、INDEX DIRECTORY
  • CREATE TABLE t (c INT) DATA DIRECTORY='/disk1/data' INDEX DIRECTORY='/disk2/index';
  • 避免在 ALTER TABLE、REPAIR TABLE 時遺失連結(舊版風險)

策略 2:條帶化

  • 將資料按區塊輪流寫入多磁碟(RAID 0 或軟體條帶)
  • 區塊大小(stripe size)需壓測調優,典型 64KB-256KB
  • 適用:順序掃描、大量匯入/匯出、全表備份

策略 3:RAID 等級選擇

關鍵業務建議 RAID 10,兼顧效能與可用性;若記憶體充足,RAID 10 + 大量快取效果最佳。

策略 4:Linux 磁碟參數調校

# hdparm 開啟 DMA、多扇區傳輸
hdparm -m 16 -d 1 /dev/sda

# 掛載選項減少 atime 更新
mount -o noatime,async /dev/sda1 /var/lib/mysql
  • noatime:不更新存取時間,減少元資料寫入
  • async:非同步寫入,提升吞吐(需評估斷電風險)
  • 警告:hdparm 設定錯誤可能導致檔案系統損壞,調整前必須備份並壓測

策略 5:MySQL 內部優化配合

  • innodb_flush_method=O_DIRECT 避免雙重快取
  • innodb_io_capacity 設定為磁碟實際 IOPS(SSD 可設 5000-20000)
  • innodb_read_io_threads/write_io_threads 依 CPU 核心調整
  • 大表分區(Partitioning)配合不同磁碟存放分區
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
RAID適用場景備註
RAID 0可重建資料(如暫存、快取、日誌)最高效能,無冗餘
RAID 1/10核心業務資料、系統盤寫入懲罰較小,強烈推薦
RAID 5/6歸檔、唯讀、成本敏感寫入效能差,重建風險高