問題:
怎麼模仿磁盤 IO 慢的情況?
實驗:
1. 創建延遲的磁盤
用 dd 創造一片 100M 的文件
將創建的文件用 losetup 虛擬成塊設備 /dev/loop3
將塊設備 /dev/loop3 映射成帶延遲的設備(對於讀操作和寫操作都延遲 100ms)
2. 用 MySQL 進行實驗
將磁盤格式化,並載入
用 dbdeployer 安裝 MySQL,將 binlog 的位置設置到 /mnt/slow,開啟雙 1 刷盤參數
用 mysqlslap 進行壓力測試
通過 iostat 可以觀察到 binlog 所在的塊設備 IO 發生飽和:
1. dm-0 (/dev/mapper/dm-slow) 設備的 IO 出現了排隊(aqu-sz),使用率飽和。
2. loop3 是 dm-0 背後的塊設備,其 IO 還有充足的能力,可證明 dm-0 帶有 IO 延遲。
通過 pt-ioprofile 觀察 MySQL 的 IO 消耗時間,可以看到花費在 binlog IO 上的時間遠大於其他消耗。
結果:
我們製造了一個慢 IO 的設備,將 MySQL binlog 放在其中,製造了 binlog IO 慢的場景。
有了這個手段,之後我們可以分析 MySQL 在局部文件 IO 慢時,哪些狀態量會發生變化,以及 MySQL 會發生什麼行為。
關於 MySQL 的技術內容,你們還有什麼想知道的嗎?趕緊留言告訴小編吧!
閱讀更多 愛可生 的文章