1. 使用Symbolic Links分佈I/O mysql的資料庫名和表名是與文件系統的目錄名和文件名對應的,預設情況下,創建的資料庫和表都存放在參數datadir定義的目錄下。如果不使用RAID或邏輯捲,所有的表都放在一個磁碟設置上,無法發揮多磁碟並行讀寫的優勢。這種情況,我們可以利用操作系統的 ...
1. 使用Symbolic Links分佈I/O
mysql的資料庫名和表名是與文件系統的目錄名和文件名對應的,預設情況下,創建的資料庫和表都存放在參數datadir定義的目錄下。如果不使用RAID或邏輯捲,所有的表都放在一個磁碟設置上,無法發揮多磁碟並行讀寫的優勢。這種情況,我們可以利用操作系統的符號連接(Symbolic Links)將不同的資料庫或表,索引指向不同的物理磁碟,從而達到分佈磁碟I/O的目的。
-- 查看文件路徑 SHOW GLOBAL VARIABLES LIKE "%datadir%";
-- 查看mysql下文件目錄
[root@xuegod64 ~]# cd /var/lib/mysql
(1) 將一個資料庫指向其他物理磁碟
其方法是先在目標磁碟上創建目錄,然後再創建從mysql數據目錄到目標目錄的符號連接:使用mkdir 創建目錄
然後再創建從mysql數據目錄到目標目錄的符號連接
(2) 將myisam (其它存儲引擎的表不支持) 表的數據文件或索引文件指向其他物理磁碟。
對於新建的表,可以通過在create table語句中增加 data directory 和index directory選項來完成例如 :
對於已有的表,可以先將其數據文件(.MYD)或索引文件(.MYI)轉移到目標磁碟,然後再建立符號連接即可,需要說明的是表定義文件(.frm)必須位於mysql數據文件目錄下,不能用符號連接。
2. 禁止操作系統更新文件的atime屬性
atime是linux/unix系統下的一個文件屬性,每當讀取文件時,操作系統都會將讀操作發生的時間回寫到磁碟上。 對於讀寫頻繁的資料庫文件來說,記錄文件的訪問時間一般沒有任何用處,去會增加磁碟系統的負擔,影響I/O的性能。通過設置文件系統的mount屬性,阻止操作系統寫atime信息。具體做法是修改文件系統配置文件/etc/fstab,指定noatime選項。
3. 用裸設備(Raw Device)存放innodb的共用表空間
在innodb緩存充足的情況下,可以考慮使用Raw Device來存放Innodb共用表空間。如果將其表和索引存儲在裸設備(Raw Device)上,從而繞過了文件系統的高速緩存和緩衝器而直接訪問磁碟,那麼將大大降低Linux文件系統的負擔,使系統性能獲得顯著改善。需要設置 innodb_data_file_path。
轉載: 為MySQL資料庫的InnoDB引擎配置裸設備(Raw Device)
總結:本章從操作系統的角度介紹瞭如何對mysql資料庫進行優化,主要是討論i/o的優化問題,文件系統分佈的優化問題。由於涉及到操作系統,待以後在去深入。