Linux的文件系統有點像MySQL的存儲引擎,它支持各類各樣的文件系統。它最上層是經過 virtual files system虛擬文件系統做爲一個抽象接口層來對外提供調用的。而後下層的各類文件系統實現這些調用接口就好了。html
文件內容的修改涉及到兩部分:實際文件內容的修改 和 文件元(metadata)信息的修改。因此在修改一個成功以後,修改另外一個以前,此時系統崩潰,就會致使二者的不一致。因此提出了日誌文件系統的概念。node
所謂的日誌文件系統(Journaling file system),就是在實際修改文件內容和文件元信息以前,將他們的修改先寫到一個日誌中(journal log)。這樣的話,若是發生系統崩潰,就可使用日誌進行恢復。固然,寫日誌會對文件系統的性能有必定的影響。除了ext2以外,其它文件系統幾乎都是日誌文件系統。mysql
日誌文件系統的處理過程是:1)先寫日誌;2)而後寫實際的文件系統;3)刪除日誌;sql
日誌文件系統又能夠分紅三種類型:centos
1)日誌模式(journal): 將全部的元數據和數據改變均寫入日誌,對性能影響最大;服務器
2)預約模式(ordered): 只記錄元數據的變化, 在數據寫入磁盤後再修改元數據,對性能影響中等;async
3)寫回模式(writeback): 只記錄元數據的修改變化,對數據修改順序無要求,對性能影響最小;性能
咱們能夠在/etc/fstab 文件中修改文件系統的日誌模式。測試
/dev/sdb1 /testfs ext3 defaults,data=writeback 0 0優化
Linux 經常使用文件系統:
ext4, ext4, XFS, ReiserFS, JFS
其中最經常使用的是 ext4, XFS. 其中redhat7/centos7將XFS做爲默認的文件系統。在最新內核的測試中XFS性能也明顯超過ext4。因此對於mysql服務器,最好選擇使用 XFS 文件系統。
關於 ssd上的ext4和xfs有一個比較:
https://www.percona.com/blog/2012/03/15/ext4-vs-xfs-on-ssd/
在rhel6.4以前ext4性能比xfs好,由於xfs有lock爭用的bug。可是6.4開始,xfs的bug被fix了。因此xfs性能比ext4好。
在xfs的鎖爭用bug沒有解決時:
sync async threads throughput throughput XFS ext4 XFS ext4 1 1.90/124k 1.41/92k 1.72/112k 1.41/92k 2 1.01/64k 1.65/108k 0.97/62k 1.65/108k 4 0.27/17k 1.55/102k 0.21/13k 1.55/102k 8 0.13/8k 1.45/95k 0.15/9k 1.45/95k 16 0.12/7k 1.45/95k 0.12/7k 1.45/95k
It’s pretty clear from these results that lock contention is killing XFS as the thread count grows. ext4 performance shows that it uses exclusive locking as well, but it is not degrading like XFS is due to different lock types being used.
可是當xfs的鎖爭用bug解決以後:
sync async threads throughput throughput vanilla patched vanilla patched 1 1.90/124k 1.83/120k 1.72/112k 1.69/111k 2 1.01/64k 2.85/185k 0.97/62k 2.57/168k 4 0.27/17k 3.68/241k 0.21/13k 3.41/223k 8 0.13/8k 4.42/290k 0.15/9k 4.16/273k 16 0.12/7k 4.95/325k 0.12/7k 4.86/319k
Throughput scales with thread count – each thread runs at 100% CPU utilsation, and XFS gets up to 3x as much throughput as ext4 does. So, basically, XFS is still the file system you want for direct IO。
掛在文件時的優化(noatime,nodiratime):
mount –t ext4 –o rw,noatime,nodiratime /dev/sda6 /data
noatime 會有0-10%的性能提高,通常平均會有3%的性能提高。
noatime:
Do not update inode access times on this filesystem (e.g, for faster access on the news spool to speed up news servers).
nodiratime:
Do not update directory inode access times on this filesystem.
noatime,nodiratime的配置也能夠在/etc/fstab中進行。
注意:XFS掛載超過1T分區時,須要加入掛載參數inode64:
大意就是xfs文件系統會把inode存儲在磁盤最開始的這1T空間裏,若是這部分空間被徹底填滿了,那麼就會出現磁盤空間不足的錯誤提示了。解決辦法就是在掛載時,指定 inode64 選項:
mount -o remount -o noatime,nodiratime,inode64,nobarrier /dev/sdb1 /backup
參考:http://imysql.cn/2013/02/21/using-xfs-with-large-partition-for-backup.html