国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 課堂 > 基礎知識 > 正文

InnoDB之Dirty Page、Redo log

2024-09-12 20:29:53
字體:
來源:轉載
供稿:網友
        在InnoDB中,buffer pool里面的dirty page一方面可以加快數據處理速度,同時也會造成數據的不一致(RAM vs DISK)。本文介紹了dirty page是如何產生,以及InnoDB如何利用redo log如何消除dirty page產生的數據不一致。
  
       當事務(Transaction)需要修改某條記錄(row)時,InnoDB需要將該數據所在的page從 disk讀到buffer pool中,事務提交后,InnoDB修改page中的記錄(row)。這時buffer pool中的page就已經和disk中的不一樣了,我們稱buffer pool中的page為dirty page。Dirty page等待flush到disk上。
       (轉)InnoDB之Dirty Page、Redo log
        dirty page既然是在Buffer pool中,那么如果系統突然斷電Dirty page中的數據修改是否會丟失?這個擔心是很有必要的,例如如果一個用戶完成一個操作(數據庫完成了一個事務,page已經在buffer pool中修改,但dirty page尚未flush),這時系統斷電,buffer pool數據全部消失。那么,這個用戶完成的操作(導致的數據庫修改)是否會丟失呢?答案是不會 (innodb_flush_log_at_trx_commit=1)。這就是redo log要做的事情,在disk上記錄更新。
       redo log在每次事務commit的時候,就立刻將事務更改操作記錄到redo log。所以即使buffer pool中的dirty page在斷電時丟失,InnoDB在啟動時,仍然會根據redo log中的記錄完成數據恢復。
       redo log的另一個作用是,通過延遲dirty page的flush最小化磁盤的random writes。(redo log會合并一段時間內TRX對某個page的修改)
(轉)InnoDB之Dirty Page、Redo log
正常情況下,dirty page什么時候flush到disk上?
1).redo log是一個環(ring)結構,當redo空間占滿時,將會將部分dirty page flush到disk上,然后釋放部分redo log。這種情況可以通過Innodb_log_wait(SHOW GLOBAL STATUS)觀察,情況發生該計數器會自增一次。
2). 當需要在Buffer pool分配一個page,但是已經滿了,并且所有的page都是dirty的(否則可以釋放不dirty的page),通常是不會發生的。這時候必須 flush dirty pages to disk。這種情況將會記錄到Innodb_buffer_pool_wait_free中。一般地,可以可以通過啟動參數 innodb_max_dirty_pages_pct控制這種情況,當buffer pool中的dirty page到達這個比例的時候,將會強制設定一個checkpoint,并把dirty page flush到disk中。
3).檢測到系統空閑的時候,會flush,每次64 pages。
涉及的InnoDB配置參數:innodb_flush_log_at_trx_commit、innodb_max_dirty_pages_pct;狀態參數:Innodb_log_wait、Innodb_buffer_pool_wait_free。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盱眙县| 扎鲁特旗| 金华市| 渭源县| 西林县| 鄂伦春自治旗| 蓝田县| 星子县| 南靖县| 个旧市| 呼玛县| 广德县| 万全县| 开封县| 千阳县| 句容市| 蓝田县| 酒泉市| 新丰县| 永和县| 女性| 正宁县| 富民县| 精河县| 清丰县| 凯里市| 南华县| 马边| 桑日县| 柳河县| 贵港市| 石景山区| 广南县| 和龙市| 拉孜县| 武功县| 永丰县| 泽普县| 旺苍县| 视频| 墨脱县|