營銷MM讓我講MySQL日誌順序讀寫及數據文件隨機讀寫原理

摘要:你知道嗎,MySQL在實際工作時候的兩種數據讀寫機制?

本文分享自華為雲社區《MySQL日誌順序讀寫及數據文件隨機讀寫原理》,作者:JavaEdge 。

MySQL在實際工作時候的兩種數據讀寫機制:

  • 對redo log、binlog這種日誌進行的磁碟順序讀寫
  • 對錶空間的磁碟文件里的數據頁進行的磁碟隨機讀寫

1 磁碟隨機讀

MySQL執行增刪改操作時,先從表空間的磁碟文件里讀數據頁出來, 這就是磁碟隨機讀。

如下圖有個磁碟文件,裡面有很多數據頁,可能需要在一個隨機位置讀取一個數據頁到快取,這就是磁碟隨機讀

因你要讀取的這個數據頁,可能在磁碟的任一位置,所以你在讀取磁碟里的數據頁時,只能用隨機讀。磁碟隨機讀性能極差,所以不可能每次更新數據都磁碟隨機讀,而是讀取一個數據頁之後,放到BP的快取,下次要更新時,直接更新BP里的快取頁。

磁碟隨機讀的性能指標

IOPS

底層的存儲系統可執行多少次磁碟讀寫操作/s。壓測時可以觀察一下。對資料庫的crud操作的QPS影響非常大,某種程度上幾乎決定了你每秒能執行多少個SQL語句,底層存儲的IOPS越高,你的資料庫的並發能力就越高。

磁碟隨機讀寫操作的響應延遲

也是對資料庫的性能有很大的影響。

假設你的底層磁碟支援你執行200個隨機讀寫操作/s,但每個操作是耗費10ms,還是耗費1ms,也有很大影響, 決定你對資料庫執行的單個crud SQL語句的性能。

包括你磁碟日誌文件的順序讀寫的響應延遲,也決定DB性能,因為你寫redo log日誌文件越快,那你的SQL性能越高。

比如你一個SQL語句發過去,磁碟要執行隨機讀操作載入多個數據頁,此時每個磁碟隨機讀響應時間50ms,可能SQL語句要執行幾百ms,但若每個磁碟隨機讀僅耗10ms,可能你的SQL就執行100ms即可。所以核心業務的資料庫的生產環境機器推薦SSD,其隨機讀寫並發能力和響應延遲要比機械硬碟好太多,可大幅提升資料庫的QPS和性能。

2 磁碟順序讀寫

當你在BP的快取頁里更新數據後,必須要寫條redo log日誌,它就是順序寫:在一個磁碟日誌文件里,一直在末尾追加日誌

寫redo log時,不停的在一個日誌文件末尾追加日誌的,這就是磁碟順序寫。

磁碟順序寫的性能很高,幾乎和記憶體隨機讀寫的性能差不多,尤其是在DB里也用了os cache機制,就是redo log順序寫入磁碟之前,先是進入os cache,即os管理的記憶體快取。

對寫磁碟日誌文件,最關注

磁碟每s讀寫數據量的吞吐量指標

即每s可寫入多少redo log日誌,整體決定DB的並發能力和性能。

每s可寫入磁碟100M數據和每s可寫入磁碟200M數據,對資料庫的並發能力影響也大。因為資料庫的每次更新SQL,都涉及:

  • 多個 磁碟隨機讀取數據頁操作
  • 一條redo log日誌文件順序寫操作

 

點擊關注,第一時間了解華為雲新鮮技術~