Mysql

磁碟活動干擾 MySQL 性能是否正常?

  • March 22, 2022

我在軟體 RAID-1 配置中具有兩個 SSD 的伺服器上執行 MySQL 5.5。文件系統是 ext4。

當任何程序(MySQL 外部)在伺服器上產生大量磁碟 IO 時,我發現 MySQL 幾乎癱瘓,通常需要 30 毫秒的查詢需要 10 秒或更長時間,具體取決於 IO 持續多長時間。

我可以通過執行 dd 寫入測試輕鬆重現該問題,如下所示:

dd if=/dev/zero of=tempfile bs=1M count=3024 conv=fdatasync,notrunc

這會將一個 3GB 的測試文件寫入儲存 MySQL 數據和日誌文件的同一磁碟和分區。這是命令的輸出:

3024+0 records in
3024+0 records out
3170893824 bytes (3.2 GB) copied, 16.0938 s, 197 MB/s

當我執行命令時,我可以立即在 MySQL 慢查詢日誌中看到查詢。毫不奇怪,它們都是插入/更新查詢,我假設它們正在等待送出。然而,令我大吃一驚的是,查詢時間非常長:有些幾乎與 dd 命令本身的執行時間一樣長!

在伺服器上發生任何激烈的 IO 期間,似乎 MySQL 被暫停或鎖定。我認為在 RAID-1 中的 SSD 上執行 MySQL 會非常快,其他 IO 操作不太可能對 MySQL 產生太大影響。

  1. 像這樣的單個寫入過程如此深刻地干擾 MySQL 是否正常?
  2. 我應該查看軟體 RAID-1 或​​ ext4 文件系統的問題嗎?
  3. MySQL 可以進行不同的配置嗎?我已經閱讀了有關設置 innodb_read_io_threadsinnodb_write_io_threads利用 SSD 提供的更高 IOPS 的資訊,但我不確定這會解決這個問題。
  4. 是否有必要將所有與 MySQL 相關的文件儲存在專用磁碟上以避免此問題?

非常感謝您的幫助。

根據我的經驗,最好將 MySQL 數據文件和日誌文件與其他應用程序文件分開。當您沒有專用的 MySQL 伺服器時,請將數據文件和日誌文件分開到不同的磁碟。我遇到了類似的問題,我們通過將數據目錄和日誌文件更改為每個專用的單獨目錄來解決。我建議你通過 MOCA(MySQL 最佳配置架構)來更好地理解。我希望這能幫到您。

謝謝。

@rathishDBA 有一個合理的點,但有時必須在數據庫伺服器上執行密集的磁碟 I/O。我的建議是以降低的優先級執行作業……

以降低的優先級啟動程序(預設 nice 為 0 - 核心以 -20 執行,+20 使程序具有最低可能的優先級)…

nice -n 20 dd if=/dev/zero of=tempfile bs=1M count=3024 conv=fdatasync,notrunc

要更改目前正在執行的程序的優先級…獲取程序ID然後renice程序…

ps -ef | pgrep dd
renice -n 20 -p X  # where XXX is the process id

引用自:https://dba.stackexchange.com/questions/154688