<em id="hanht"></em>

    <dd id="hanht"></dd>

    <em id="hanht"><acronym id="hanht"></acronym></em>
    
    <button id="hanht"></button>
    <rp id="hanht"><object id="hanht"><blockquote id="hanht"></blockquote></object></rp><em id="hanht"></em>

    首頁 > 學院 > 綜合知識 > 正文

    InnoDB之Dirty Page、Redo log

    2022-07-31 18:43:14
    字體:
    來源:轉載
    供稿:網友
            在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。

    (編輯:錯新網)

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    一级特黄大片欧美久久久久_一本一道久久综合狠狠老_JLZZ日本人年轻护士_欧美男男作爱VIDEOS可播放
      <em id="hanht"></em>

      <dd id="hanht"></dd>

      <em id="hanht"><acronym id="hanht"></acronym></em>
      
      <button id="hanht"></button>
      <rp id="hanht"><object id="hanht"><blockquote id="hanht"></blockquote></object></rp><em id="hanht"></em>