對於Mysql更新的一些思考

2022-09-12 00:03:18 字數 2090 閱讀 7980

(1)緩衝池(buffer pool):快取資料頁和索引頁,加速查詢操作,避免每次查詢都需要進行磁碟隨機io(優化磁碟io隨機讀)。

(2)寫緩衝區(change buffer):寫資料時,當資料不在緩衝池中,將資料直接寫入寫緩衝區中,資料不寫入磁碟資料頁(優化磁碟隨機寫)。

(3)日誌緩衝區(log buffer):redo log,binlog都先寫入到日誌緩衝區,然後再追加寫入到磁碟日誌檔案中,主要的目的是把磁碟隨機io寫優化成磁碟批量寫和順序寫(磁碟順序寫的效能要比隨機寫高非常多)。

(4)自適應雜湊索引:目的是提公升innodb效能,加速讀請求,減少索引查詢的尋路路徑。

redo log重做日誌,主要記錄已提交的事務操作日誌,包含一些系統操作,資料操作日誌,核心作用是safe-crash(異常重啟後的資料恢復),底層資料結構是乙個環形陣列,預設大小為4g,無法一直無限擴容。

binlog歸檔日誌,歸檔資料庫各個時刻的資料,主要用於主從複製和資料備份,恢復,可以無限擴容

undo log回滾日誌,記錄了各個事務id對應的資料狀態,主要用於事務回滾和mvcc版本資料回查

我們來分析乙個更新操作流程:

一次更新操作,我們需要重點關注的點:

一、資料是如何更新到緩衝池中?更新後的緩衝池資料(髒頁)是如何持久化到磁碟中?

(1)查詢記憶體緩衝區中是否待更新資料行,插入資料的話檢視是否存在待插入的頁。

(2)如果待更新資料存在記憶體緩衝區中,直接更新緩衝區中的記錄行(該記錄頁變成髒頁)。

(3)如果待更新資料不在記憶體緩衝區中,方式一:將磁碟中的改行資料讀取到緩衝區,並且將資料更新為最新資料。方式二:將更新操作快取在寫緩衝區中,當下次讀取該記錄時,從磁碟中把資料讀取到記憶體緩衝區(pool buffer)中,並且通過寫緩衝區(write pool buffer)的記錄將緩衝區中的記錄更新為最新值。

經過上述分析知道,innodb更新操作核心思想是將磁碟隨機io優化成記憶體緩衝區操作,讓緩衝區中的資料跟磁碟資料短暫不一致(髒頁),然後再非同步把資料持久化到磁碟中。

思考乙個問題:寫完change buffer時資料庫宕機了,重啟之後change buffer記憶體中的資料丟失了,這時豈不是會出現更新丟失的情況?

其實從上圖我們可知,寫入change buffer內容也會記錄日誌到redo log中,所以資料庫重啟後,可以通過redo log來恢復change buffer中的資料

(1)系統空閒時期,會主動進行髒頁刷入磁碟的操作,將髒頁資料更新到磁碟資料空間,清楚記憶體空間,並且清除對應的redo log。

(2)記憶體緩衝區空間不足時,更新操作會先觸發髒頁刷盤操作來釋放足夠的記憶體緩衝區空間,再進行更新操作。

(3)redo log空間不足時,會觸發髒頁刷盤操作。釋放redo log空間來執行新的更新操作。

(4)資料庫主動關閉時,會進行髒頁刷盤操作。

通過上訴分析我們可以知道,如果記憶體緩衝區滿了或者redo log檔案空間滿了,都會影響客戶端的寫請求,因為在寫請求執行之前都需要通過髒頁刷盤來釋放出足夠的空間來執行本次更新操作。所以innodb會通過一定的策略來控制緩衝區和redo log檔案空間有足夠的閒餘空間來執行客戶端請求,通過一定的引數來控制緩衝區的髒頁佔比不會超過75%(預設配置),通過配置引數來控制redo log有足夠的空間來寫入新增日誌,通過配置主機的iops來評估磁碟的io效能,從而控制io的頻率和io讀寫的資料量。

對於工作的一些思考

感覺自從領導讓我管專案以來,一直沒有讓領導很滿意的地方是自己在專案上花的心思太少.很簡單的一些例子就證明了,比如自己雖然是中途接手的專案,然後並沒有仔細檢視招標檔案,沒有針對招標檔案的要求 去核對乙方的一些功能是否完成.其次,對於乙方,我還在心裡上和行動上 做到完成把控住,我不僅要去分析我領導的想法...

對於爬蟲的一些思考

由於專案並不會投入太多的時間,所以穩定性能是最終的。穩定性的可以從以下的維度進行考慮 資料量不多的時候採用單執行緒。異常處理。重試。詳細的日誌。個人覺得資料量少就是在40小時內遍歷全部並且可以爬完的就是小資料量。異常處理主要就是放在請求 時 入庫。而重試主要是用traceback這個庫,它的作用是捕...

對於Android MVP的一些思考(二)

上次對mvp的表面概念作出了一些思考 對於mvp 響應式程式設計以及事件匯流排的一些思考 而隨著對自己的mvp框架深入優化 擴充套件,也發現了一些疑惑的地方。相信接觸過mvp框架的都清楚,針對model view presenter這三者,都會為其單獨建立乙個inte ce,規範其各自的行為。舉個例...