您好,登錄后才能下訂單哦!
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調度算法的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。