<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      InnoDb存儲引擎執(zhí)行流程

      緩沖池 buffer pool

      • 會把一些磁盤上的數(shù)據(jù)加載到該內(nèi)存當(dāng)中
      • 查詢數(shù)據(jù)的時候不從磁盤查,從該內(nèi)存里查

      undo log

      • 邏輯日志,可以認(rèn)為當(dāng)delete一條記錄時,undo log中會記錄一條對應(yīng)的insert記錄,反之亦然,當(dāng)update一條記錄時,它記錄一條對應(yīng)相反的update記錄
      • 用于數(shù)據(jù)回滾
      • 實現(xiàn)mvcc

      redo log

      • 存儲引擎層日志
      • 物理日志(類似于“對哪個數(shù)據(jù)頁中的什么記錄,做了個什么修改”)
      • 記錄對數(shù)據(jù)做了什么修改,防止已提交事務(wù)的數(shù)據(jù)丟失。因為數(shù)據(jù)不是實時刷盤的,數(shù)據(jù)是在buffer pool當(dāng)中,如果數(shù)據(jù)庫宕機了并且buffer pool中的數(shù)據(jù)還沒有刷盤,修改過的數(shù)據(jù)就丟失了,redo log解決這一問題
      • redo log buffer是redo log的緩沖區(qū),數(shù)據(jù)做了什么修改,首先會寫入到redo log buffer中,再刷盤寫入redo log中

      binlog

      • 歸檔日志,屬于mysql server層,不屬于存儲引擎層
      • 邏輯性日志(類似于“對users表中的id=10的一行數(shù)據(jù)做了更新操作,更新以后的值是什么”)

      事務(wù)還沒有提交,mysql宕機了怎么辦?

      • 事務(wù)沒有提交,mysql宕機,buffer pool和redo log buffer中的數(shù)據(jù)都會丟失,數(shù)據(jù)庫返回異常,提示事務(wù)失敗
      • 磁盤上的數(shù)據(jù)沒有任何變化,不影響

      redo log刷盤策略

      • 當(dāng)提交事務(wù)的時候,redo log buffer里的數(shù)據(jù)會根據(jù)一定規(guī)則刷到磁盤上
      • 通過innodb_flush_log_at_trx_commit參數(shù)來配置
        • 0 提交事務(wù)的時候,不立即把 redo log buffer 里的數(shù)據(jù)刷入磁盤文件的,而是依靠 InnoDB 的主線程每秒執(zhí)行一次刷新到磁盤。此時可能你提交事務(wù)了,結(jié)果 mysql 宕機了,然后此時內(nèi)存里的數(shù)據(jù)全部丟失
        • 1 提交事務(wù)的時候,就必須把 redo log 從內(nèi)存刷入到磁盤文件里去,只要事務(wù)提交成功,那么 redo log 就必然在磁盤里了
        • 2 提交事務(wù)的時候,把 redo 日志寫入磁盤文件對應(yīng)的 os cache 緩存里去,而不是直接進入磁盤文件,可能 1 秒后才會把 os cache 里的數(shù)據(jù)寫入到磁盤文件里去。此時mysql宕機,數(shù)據(jù)不會丟失;如果機器宕機,數(shù)據(jù)會丟失

      binlog刷盤策略

      • 當(dāng)提交事務(wù)的時候,binlog也會刷到磁盤上去
      • 通過sync_binlog參數(shù)來配置
        • 0 默認(rèn)值。事務(wù)提交后,將二進制日志寫入了操作系統(tǒng)緩沖,若操作系統(tǒng)宕機則會丟失部分二進制日志
        • 1 事務(wù)提交后,將二進制文件寫入磁盤并立即執(zhí)行刷新操作,相當(dāng)于是同步寫入磁盤,不經(jīng)過操作系統(tǒng)的緩存

      執(zhí)行一條更新sql語句,存儲引擎執(zhí)行流程

      1. 把該行數(shù)據(jù)從磁盤加載到buffer pool中
      2. 對該行數(shù)據(jù)進行加鎖
      3. 寫undo log
      4. 在buffer pool當(dāng)中更新數(shù)據(jù)
      5. 把所作的修改寫入到redo log buffer當(dāng)中
      6. 準(zhǔn)備提交事務(wù)redolog刷盤
      7. 準(zhǔn)備提交事務(wù)binlog刷盤
      8. 把binlog的文件名和位置寫入commit標(biāo)記,commit標(biāo)記寫入redolog中,事務(wù)才算提交成功;否則不會成功


      commit標(biāo)記的意義

      • redo log刷盤成功,binlog還沒刷盤,數(shù)據(jù)庫宕機,沒有commit標(biāo)記寫到redo log中,事務(wù)判定為失敗。因為redolog中有這次更新日志,binlog中沒有這次更新日志,會出現(xiàn)數(shù)據(jù)不一致問題
      • redo log刷盤成功,binlog刷盤成功,commit標(biāo)記還沒來得及寫入redo log中,數(shù)據(jù)庫宕機,同樣判定事務(wù)提交失敗
      • commit寫入redo log,才能判定事務(wù)成功;因為此時,redo log中有這次更新記錄,binlog也有這次更新記錄,redo log和binlog保持了一致

      內(nèi)存(buffer pool)中更新過臟數(shù)據(jù)什么時候刷盤?

      • 后臺io線程有時間會把內(nèi)存buffer pool中更新過的臟數(shù)據(jù)(因為更新過,和磁盤上的數(shù)據(jù)不一樣,所以叫臟數(shù)據(jù))刷回到磁盤上,哪怕這時候mysql宕機,也沒有關(guān)系,可通過redo log和binlog恢復(fù)數(shù)據(jù)到內(nèi)存中,io線程有時間再把數(shù)據(jù)刷盤


      執(zhí)行更新sql語句存儲引擎執(zhí)行流程總結(jié)

      • 執(zhí)行階段
        • 數(shù)據(jù)加載到內(nèi)存,寫undo log,更新內(nèi)存中數(shù)據(jù),寫redo log buffer
      • 事務(wù)提交階段
        • redo log和binlog刷盤,commit標(biāo)記寫入redo log中
      • 最后
        • 后臺io線程隨機把內(nèi)存中臟數(shù)據(jù)刷到磁盤上



      文章和圖片參考 救火隊長mysql

      posted @ 2020-09-03 15:56  隊長別開槍&nbsp;是我  閱讀(971)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 无套内谢少妇毛片aaaa片免费| 日本一区不卡高清更新二区| 国产精品成人午夜福利| 不卡一区二区国产精品| 久久精品波多野结衣| 成人乱人乱一区二区三区| 亚洲精品综合网二三区| 99久久婷婷国产综合精品青草漫画 | 一区二区三区在线色视频| 北岛玲中文字幕人妻系列| 国产成人a在线观看视频| 无码精品一区二区免费AV| 天天做天天爱夜夜爽女人爽| 男女爽爽无遮挡午夜视频| 亚洲国产成人不卡高清麻豆| 免费无码成人AV片在线| 亚洲国产精品特色大片观看完整版| 青青草国产自产一区二区| 国产中文字幕在线精品| 亚洲理论在线A中文字幕| 无码人妻斩一区二区三区| 国产亚洲av产精品亚洲| 国产精品福利自产拍久久| 一级做a爰片在线播放| 欧美疯狂xxxxbbbb喷潮| 精品粉嫩国产一区二区三区| 亚洲春色在线视频| 国产成人亚洲综合图区| 成人欧美日韩一区二区三区| 午夜无码国产18禁| 日本精品aⅴ一区二区三区| 亚洲av永久无码精品水牛影视| 久久国产精品乱子乱精品| 亚洲av无码成人影院一区| 亚洲男人第一无码av网站| 在线看片免费人成视久网| 永久免费AV无码网站YY| 又大又硬又爽免费视频| 久久精品国产99久久久古代| 中文熟妇人妻av在线| 69人妻精品中文字幕|