營銷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日誌文件順序寫操作