第02問:怎麼模仿磁碟 IO 慢的情況?
- 2020 年 3 月 12 日
- 筆記

問題:
怎麼模仿磁碟 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 會發生什麼行為。