InnoDB源碼分析--事務日誌(二)

来源:http://www.cnblogs.com/wingsless/archive/2016/07/26/5708992.html
-Advertisement-
Play Games

原創文章,轉載請標明原文鏈接:http://www.cnblogs.com/wingsless/p/5708992.html 昨天寫了有關事務日誌的一些基本點(http://www.cnblogs.com/wingsless/p/5705314.html),今天結合我最近的學習成果繼續總結事務日誌的 ...


    原創文章,轉載請標明原文鏈接:http://www.cnblogs.com/wingsless/p/5708992.html

    昨天寫了有關事務日誌的一些基本點(http://www.cnblogs.com/wingsless/p/5705314.html),今天結合我最近的學習成果繼續總結事務日誌的知識點。

   三 日誌結構

     我們都知道InnoDB最小的存儲單元叫做頁(page)或者塊(block),日誌系統也是如此,它是一個512位元組的塊,被這個參數定義:OS_FILE_LOG_BLOCK_SIZE。

     一個塊肯定不會只有存儲數據這麼簡單,肯定是有頭部和尾部寫一些信息進去的,而這在代碼里很好找:

     

/* Offsets of a log block header */
#define    LOG_BLOCK_HDR_NO    0    /* block number which must be > 0 and
                    is allowed to wrap around at 2G; the
                    highest bit is set to 1 if this is the
                    first log block in a log flush write
                    segment */
#define LOG_BLOCK_FLUSH_BIT_MASK 0x80000000UL
                    /* mask used to get the highest bit in
                    the preceding field */
#define    LOG_BLOCK_HDR_DATA_LEN    4    /* number of bytes of log written to
                    this block */
#define    LOG_BLOCK_FIRST_REC_GROUP 6    /* offset of the first start of an
                    mtr log record group in this log block,
                    0 if none; if the value is the same
                    as LOG_BLOCK_HDR_DATA_LEN, it means
                    that the first rec group has not yet
                    been catenated to this log block, but
                    if it will, it will start at this
                    offset; an archive recovery can
                    start parsing the log records starting
                    from this offset in this log block,
                    if value not 0 */
#define LOG_BLOCK_CHECKPOINT_NO    8    /* 4 lower bytes of the value of
                    log_sys->next_checkpoint_no when the
                    log block was last written to: if the
                    block has not yet been written full,
                    this value is only updated before a
                    log buffer flush */
#define LOG_BLOCK_HDR_SIZE    12    /* size of the log block header in
                    bytes */

       

/* Offsets of a log block trailer from the end of the block */
#define    LOG_BLOCK_CHECKSUM    4    /* 4 byte checksum of the log block
                    contents; in InnoDB versions
                    < 3.23.52 this did not contain the
                    checksum but the same value as
                    .._HDR_NO */
#define    LOG_BLOCK_TRL_SIZE    4    /* trailer size in bytes */

 

       畫張圖:

       

      頭部長度是12位元組,尾部長度是4位元組,代碼中標明瞭頭尾的長度,其他的都是偏移量,因此每個部分的長度也就是下一個偏移量減去當前值。這麼算下來,實際上能存儲數據的部分只有496位元組了,這部分網上很多資料里都叫做log data,我在這裡也這麼叫吧。

      頭部里我覺得有意思的一個地方是這個:LOG_BLOCK_FIRST_REC_GROUP,這是block里第一個日誌的起始位置的偏移量。例如一個日誌有500位元組,那麼寫完了一個塊之後,還有4個位元組會被寫在下一個塊里,此時又有一個100位元組的頁寫到了第二個block里(起個名字叫log2吧),於是第二個塊里變成了這種情況:

     

       第二個日誌從16位置開始,到116位置結束,這個時候LOG_BLOCK_FIRST_REC_GROUP值會寫什麼呢?很顯然是16,因為log2才是這個block里的第一個頁。

       知道了日誌結構,其實只是瞭解redo log的第一步,因為redo log是InnoDB實現事務的重要手段,裡面的水很深,我也會不斷地把我的學習心得寫在這裡,並不斷地補充寫好的東西。

       原創文章,轉載請標明原文鏈接:http://www.cnblogs.com/wingsless/p/5708992.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 版權聲明:筆記整理者亡命小卒熱愛自由,崇尚分享。但是本筆記源自www.jtthink.com(程式員在囧途)沈逸老師的《web級mysql顛覆實戰課程 》。如需轉載請尊重老師勞動,保留沈逸老師署名以及課程來源地址。 一、MYSQL安裝設置簡述。 1、本課程基於MYSQL 5.7.9教學。 2、課程使 ...
  • ORACLE 11g 導出 表的時候 不會導出空表 導出空表操作步驟 :(使用PLSQL) 1、打開SQL window 執行下麵的 SQL Select 'alter table '||table_name||' allocate extent;' from user_tables where s ...
  • 引用自:http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html 感謝CareySon的分享,我把使用到的SQL腳本貼上來。 --創建源表 CREATE TABLE SourceTable(ID INT,[DESC] VARCHA ...
  • 配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三個配置文件,預設下來,這些配置文件都是空的,所以很難知道這些配置文件有哪些配置可以生效,上網找的配置可能因為各個hadoop版本不同,導致無法生效。瀏覽更多的配置,有兩個方法: 1.選 ...
  • 使用Hadoop進行離線分析或者數據挖掘的工程師,經常會需要對Hadoop集群或者mapreduce作業進行性能調優。性能調優的前提是需要能準確知道目前針對Hadoop集群或者mapreduce作業配置的參數。本文將針對這一需求,基於Hadoop開發一個簡單實用的工具查詢查看各種參數。 ...
  • 今天在修改 SQL伺服器上 以前的作業任務,打算把作業的執行時間修改成新的時間,結果修改好點確定, 結果出現了以下錯誤! Microsoft SQL-DMO (ODBC SQLState: 42000) 錯誤 14274: 無法添加、更新或刪除從 MSX 伺服器上發起的作業(或其步驟或調度)。 確定 ...
  • 1/需要一個wnmp之類的虛擬伺服器 2/創建路由 php artisan make:route routes Route::group(['middleware' => ['web','admin.login'],'prefix'=>'admin','namespace'=>'Admin' ], ...
  • 在ORACLE資料庫中,DBA_OBJECTS視圖中OBJECT_TYPE為LOB的對象是什麼東西呢?其實OBJECT_TYPE為LOB就是大對象(LOB),它指那些用來存儲大量數據的資料庫欄位。下麵演示一下: CREATE TABLE TEST( "ID" NUMBER, "NAME" NVARC... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...