共計 1410 個字符,預計需要花費 4 分鐘才能閱讀完成。
MySQL 數據庫中怎么調整磁盤 IO 調度算法,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
查看當前系統支持的磁盤 IO 調度算法
[root@alpha-mongo-140-52 ~]# dmesg | grep -i scheduler
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
default 代表當前設備使用的缺省的 IO 調度算法
也可以用以下命令查看:
[root@test ~]# more /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
備注: 括號里括起來的即為當前調度算法值
修改當前塊設備使用的 io 調度算法為 deadline:
[root@test ~]# echo deadline /sys/block/sda/queue/scheduler
備注: 修改立即生效
[root@test ~]# more /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
調度算法介紹:
Linux 有四種 IO 調度算法,分別為完全公平隊列算法 (Complete Fair Queuing/CFQ), NOOP 算法(No Operation), 最后期限算法(Deadline) 和預期算法(anticipatory).
完全隊列公平算法把磁盤 I / O 請求按照進程分別放入進程對應的隊列中。CFQ 的公平是針對進程而言的,每一個提交 I / O 請求的進程都會有自己的 I / O 隊列,CFQ 以時間片算法為前提,輪流調動隊列,默認當前隊列中取出 4 個請求來處理,然后接著處理下一個隊列里的 4 個請求,確保每個進程享有的 IO 資源是均衡的。CFQ 是 Linux 默認的 I / O 調度算法。
NOOP 算法是不對 I / O 請求排序,除了合并請求也不會進行其他任何優化,用最簡單的先進先出隊列順序提交 I / O 請求,NOOP 算法面向的主要是隨機 IO 訪問設備 SSD 等。
最后期限算法 (Deadline) 除了維護了一個擁有合并和排序功能的請求隊列外,額外維護了兩個隊列,分別是讀請求隊列和寫請求隊列,他們都是帶有超時的請求隊列,當新來一個 IO 請求時,會被同時插入普通隊列和讀寫隊列,然后 I / O 調度器正常處理普通隊列中的請求。當調度器發現讀寫請求隊列中的請求超時的時候,會優先處理這些請求,保證盡可能不產生饑餓請求。對于 MYSQL 來說,建議設置為 Deadline,對 MYSQL 來說是很好的調度算法。
預期算法 (anticipatory) 是基于預測的 I / O 算法,它和 Deadline 類似,也維護了三個請求隊列,區別在于,預期算法處理完一個 IO 請求后并不會直接返回處理下一個請求,而是等待默認 6 秒,等待期間如果有新進來的相鄰扇區的請求,會直接處理新來的請求,當等待 6 秒結束后,調度才返回處理下一個隊列請求。anticipatory 適合寫多讀少的環境,不適合 MySQL 等隨機讀取較多的數據庫環境。
看完上述內容,你們掌握 MySQL 數據庫中怎么調整磁盤 IO 調度算法的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!