天天看點

營銷MM讓我講MySQL日志順序讀寫及資料檔案随機讀寫原理

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

本文分享自華為雲社群《MySQL日志順序讀寫及資料檔案随機讀寫原理》,作者:JavaEdge 。

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

  • 對redo log、binlog這種日志進行的磁盤順序讀寫
  • 對表空間的磁盤檔案裡的資料頁進行的磁盤随機讀寫

1 磁盤随機讀

MySQL執行增删改操作時,先從表空間的磁盤檔案裡讀資料頁出來, 這就是磁盤随機讀。

如下圖有個磁盤檔案,裡面有很多資料頁,可能需要在一個随機位置讀取一個資料頁到緩存,這就是磁盤随機讀

營銷MM讓我講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日志,它就是順序寫:在一個磁盤日志檔案裡,一直在末尾追加日志

營銷MM讓我講MySQL日志順序讀寫及資料檔案随機讀寫原理

寫redo log時,不停的在一個日志檔案末尾追加日志的,這就是磁盤順序寫。

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

對寫磁盤日志檔案,最關注

磁盤每s讀寫資料量的吞吐量名額

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

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

  • 多個 磁盤随機讀取資料頁操作
  • 一條redo log日志檔案順序寫操作

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