亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

Innodb undo之 undo物理構架的初始化

2024-09-12 20:29:59
字體:
來源:轉載
供稿:網友
  水平有限,如果有誤請指出。
  一直以來未對Innodb 的undo進行好好的學習,最近剛好有點時間準備學習一下,通過阿里內核月報和自己看代碼的綜合總結一下。本文環境:
 
  代碼版本 percona 5.7.22
  參數 innodb_undo_tablespaces = 4 及使用了4個undo tablespace
  參數 innodb_rollback_segments = 128
  本文描述使用如上參數的設置。
 
  一、undo 表空間物理文件的建立
  本過程調用函數srv_undo_tablespaces_init進行,棧幀如下:
 
  #0  srv_undo_tablespaces_init (create_new_db=true, n_conf_tablespaces=4, n_opened=0x2ef55b0)
      at /root/mysqlc/percona-server-locks-detail-5.7.22/storage/innobase/srv/srv0start.cc:824#1  0x0000000001bbd7e0 in innobase_start_or_create_for_mysql () at /root/mysqlc/percona-server-locks-detail-5.7.22/storage/innobase/srv/srv0start.cc:2188#2  0x00000000019ca74e in innobase_init (p=0x2f2a420) at /root/mysqlc/percona-server-locks-detail-5.7.22/storage/innobase/handler/ha_innodb.cc:4409#3  0x0000000000f7ec2a in ha_initialize_handlerton (plugin=0x2fca110) at /root/mysqlc/percona-server-locks-detail-5.7.22/sql/handler.cc:871#4  0x00000000015f9edf in plugin_initialize (plugin=0x2fca110) at /root/mysqlc/percona-server-locks-detail-5.7.22/sql/sql_plugin.cc:1252
  本過程主要有如下幾個步驟:
 
  根據參數innodb_undo_tablespaces 的配置通過調用srv_undo_tablespace_create分別進行文件建立,默認建立的大小為10M:
  for (i = 0; create_new_db && i < n_conf_tablespaces; ++i) //n_conf_tablespaces 為innodb_undo_tablespaces的配置的個數/** Default undo tablespace size in UNIV_PAGEs count (10MB). */const ulint SRV_UNDO_TABLESPACE_SIZE_IN_PAGES =
      ((1024 * 1024) * 10) / UNIV_PAGE_SIZE_DEF;
  ...
          err = srv_undo_tablespace_create(
              name, SRV_UNDO_TABLESPACE_SIZE_IN_PAGES); //建立undo文件...
  
  分別對4個undo tablespace調用srv_undo_tablespace_open 其主要調用fil_space_create 和 fil_node_create將新建立的undo tablespace加入Innodb的文件體系。
  for (i = 0; i < n_undo_tablespaces; ++i) {
  ....
  err = srv_undo_tablespace_open(name, undo_tablespace_ids[i]); //打開UNDO文件 建立 file node...
  }
  分別對4個undo tablespace 進行fsp header初始化
  for (i = 0; i < n_undo_tablespaces; ++i) {
              fsp_header_init( //初始化fsp header 明顯 space id 已經寫入
                  undo_tablespace_ids[i],
                  SRV_UNDO_TABLESPACE_SIZE_IN_PAGES, &mtr); //SRV_UNDO_TABLESPACE_SIZE_IN_PAGES 默認的undo大小 10MB
 
  做完這個步驟只是生成了4個大小為10MB的 undo tablespace文件,并且已經加入到Innodb文件體系,但是里面沒有任何類容。
 
  二、ibdata中system segment header的初始化
  本步驟調用 trx_sys_create_sys_pages->trx_sysf_create進行,本步驟除了初始化transaction system segment以外還會初始化其header( ibdata page no 5))信息如下:
 
  /* Create the trx sys file block in a new allocated file segment */
      block = fseg_create(TRX_SYS_SPACE, 0, TRX_SYS + TRX_SYS_FSEG_HEADER,
                  mtr); //建立segment
      buf_block_dbg_add_level(block, SYNC_TRX_SYS_HEADER);
      ut_a(block->page.id.page_no() == TRX_SYS_PAGE_NO);
      page = buf_block_get_frame(block); //獲取內存位置
      mlog_write_ulint(page + FIL_PAGE_TYPE, FIL_PAGE_TYPE_TRX_SYS, //寫入block 的類型
               MLOG_2BYTES, mtr);
      ...    /* Start counting transaction ids from number 1 up */
      mach_write_to_8(sys_header + TRX_SYS_TRX_ID_STORE, 1); // 初始化TRX_SYS_TRX_ID_STORE
      /* Reset the rollback segment slots.  Old versions of InnoDB
      define TRX_SYS_N_RSEGS as 256 (TRX_SYS_OLD_N_RSEGS) and expect
      that the whole array is initialized. */
      ptr = TRX_SYS_RSEGS + sys_header;
      len = ut_max(TRX_SYS_OLD_N_RSEGS, TRX_SYS_N_RSEGS)
          * TRX_SYS_RSEG_SLOT_SIZE;//TRX_SYS_OLD_N_RSEGS 為256個
      memset(ptr, 0xff, len); //將slot的信息的全部初始化為ff
      ptr += len;
      ut_a(ptr <= page + (UNIV_PAGE_SIZE - FIL_PAGE_DATA_END));    /* Initialize all of the page.  This part used to be uninitialized. */
      memset(ptr, 0, UNIV_PAGE_SIZE - FIL_PAGE_DATA_END + page - ptr); //將剩下的空間設置為0x00
      mlog_log_string(sys_header, UNIV_PAGE_SIZE - FIL_PAGE_DATA_END
              + page - sys_header, mtr);    /* Create the first rollback segment in the SYSTEM tablespace */
      slot_no = trx_sysf_rseg_find_free(mtr, false, 0);
      page_no = trx_rseg_header_create(TRX_SYS_SPACE, univ_page_size,
                       ULINT_MAX, slot_no, mtr); //將第一個slot固定在ibdata中
  完成了這一步過后ibdata的 block 5 就初始化完了,而且我們看到所有的rollback segment slots 都初始化完成(源碼所示有256個,實際上最多只會有128個,其中0號solt固定在ibdata中),注意這里的槽大小是TRX_SYS_RSEG_SLOT_SIZE設置的大小為8字節,4字節space id ,4字節 page no,它們會指向 rollback segment header所在的位置。
 
  三、進行rollback segment header的初始化
  調用 trx_sys_create_rsegs進行:
 
  說明一下關于innodb_undo_logs參數和innodb_rollback_segments參數,他們作用就是設置rollback segment 的個數,本文以128為例。
  根據注釋和代碼innodb_undo_logs已經是個淘汰的參數,應該用innodb_rollback_segments代替。
  這兩個參數默認是就是TRX_SYS_N_RSEGS及 128 其實不用設置的。本文也用128進行討論。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲网在线观看| 国产精品av免费在线观看| 亚洲国产成人精品一区二区| 欧美日韩中文字幕在线视频| 欧美在线中文字幕| 亚洲视频网站在线观看| 91网站免费看| 丝袜亚洲欧美日韩综合| 亚洲成色777777女色窝| 亚洲第一区在线观看| 国外成人免费在线播放| 日韩在线观看免费高清完整版| 国产精品吊钟奶在线| 欧美精品中文字幕一区| 色综合久久88色综合天天看泰| 欧美一乱一性一交一视频| 久久国产精彩视频| 国产精品最新在线观看| 欧美一乱一性一交一视频| 2024亚洲男人天堂| 亚洲黄色www网站| 538国产精品一区二区免费视频| 精品亚洲一区二区三区| 国内精品久久久久影院 日本资源| 中文字幕在线观看日韩| 欧美性极品少妇精品网站| 国产精品旅馆在线| 国产精品一区二区久久国产| 欧美黑人性视频| 国产精品一区二区性色av| 97视频国产在线| 综合网日日天干夜夜久久| 久热在线中文字幕色999舞| 国产v综合v亚洲欧美久久| 欧美乱大交做爰xxxⅹ性3| 成人性生交xxxxx网站| 97av在线视频| 亚洲欧美色图片| 成人写真福利网| 国内精品模特av私拍在线观看| 欧美在线国产精品| 免费不卡在线观看av| 成人黄色影片在线| 亚洲理论在线a中文字幕| 亚洲第一精品夜夜躁人人爽| 国产午夜精品视频免费不卡69堂| 亚洲自拍中文字幕| 色综合久久中文字幕综合网小说| 综合网日日天干夜夜久久| 国产精品自拍偷拍视频| 亚洲成人亚洲激情| 米奇精品一区二区三区在线观看| 午夜免费在线观看精品视频| 亚洲精品乱码久久久久久金桔影视| 久久久精品2019中文字幕神马| 亚洲精品98久久久久久中文字幕| 亚洲a级在线播放观看| 久久不射电影网| 538国产精品一区二区在线| 九九热视频这里只有精品| 久久99精品久久久久久青青91| 日韩精品视频观看| 久久亚洲私人国产精品va| 日韩精品在线免费播放| 久久99国产精品久久久久久久久| 亚洲一区二区三区乱码aⅴ| 在线播放国产一区二区三区| 一道本无吗dⅴd在线播放一区| 欧美性一区二区三区| 精品爽片免费看久久| 精品久久久久久久久国产字幕| 国产成人免费av| 欧美日韩亚洲激情| 伊人久久大香线蕉av一区二区| 国产日韩欧美在线视频观看| 亚洲成人999| 欧美激情精品久久久久久蜜臀| 亚洲国产精品va在线看黑人动漫| 精品毛片网大全| 97国产真实伦对白精彩视频8| 欧美在线观看一区二区三区| 91牛牛免费视频| 欧美日韩中文字幕在线| 国产精品a久久久久久| 日韩免费看的电影电视剧大全| 亚洲国产精品久久久久秋霞蜜臀| 亚洲护士老师的毛茸茸最新章节| 成人免费在线视频网站| 不卡av电影院| 亚洲影院在线看| 日韩在线视频一区| 日韩高清电影好看的电视剧电影| zzijzzij亚洲日本成熟少妇| 18一19gay欧美视频网站| 欧美精品在线网站| 国自在线精品视频| 欧美第一页在线| 7777免费精品视频| 久热爱精品视频线路一| 国产成人精品国内自产拍免费看| 久久久人成影片一区二区三区| 久久久免费精品视频| 91在线视频精品| 欧美日韩国产一中文字不卡| 欧美激情一区二区三级高清视频| 欧美老少做受xxxx高潮| 欧美在线日韩在线| 日韩影视在线观看| 国产成+人+综合+亚洲欧洲| 欧美性视频精品| 欧美国产极速在线| 日韩中文字幕精品视频| 国产精品美乳一区二区免费| 国产中文欧美精品| 8x海外华人永久免费日韩内陆视频| 久久久久这里只有精品| 精品国产户外野外| 色悠悠久久88| 亚洲国产成人精品女人久久久| 亚洲第一天堂av| 国产日韩欧美成人| 久久国产一区二区三区| 欧美激情精品久久久久| 亚洲香蕉伊综合在人在线视看| 午夜精品三级视频福利| 日韩**中文字幕毛片| www.午夜精品| 亚洲一区二区免费在线| 日韩电影免费在线观看| 亚洲一区亚洲二区亚洲三区| 日韩成人av一区| 一区二区av在线| 成人信息集中地欧美| 久久久噜噜噜久久中文字免| 亚洲一区二区三区777| 这里只有精品视频| 在线播放亚洲激情| 精品国产一区二区三区久久| 日韩大片免费观看视频播放| 91精品国产乱码久久久久久久久| 欧美精品免费在线| 欧美极品少妇xxxxⅹ喷水| 日韩免费在线播放| 黑人巨大精品欧美一区免费视频| 欧美体内谢she精2性欧美| 成人国产精品久久久久久亚洲| 国产亚洲视频在线| 国产精品成熟老女人| 久久久成人精品视频| 国产精品永久免费| 久久影视免费观看| 久久综合免费视频| 国产精品男人的天堂| 亚洲午夜av久久乱码| 久久福利视频网| 在线免费看av不卡| 久久免费在线观看| 亚洲免费精彩视频| 欧美日韩成人黄色| 欧美精品久久久久a| 国产精品久久久久久网站| 色偷偷888欧美精品久久久| 人人爽久久涩噜噜噜网站| 国产精品女人网站|