精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL 核心模塊揭秘,你看明白了嗎?

數據庫 MySQL
為了提升分配 undo 段的效率,事務提交過程中,InnoDB 會緩存一些 undo 段。只要同時滿足兩個條件,insert undo 段或 update undo 段就能被緩存。

1. 關于緩存 undo 段

為了提升分配 undo 段的效率,事務提交過程中,InnoDB 會緩存一些 undo 段。

只要同時滿足兩個條件,insert undo 段或 update undo 段就能被緩存。

條件 1:undo 段中只有一個 undo 頁。

條件 2:這個唯一的 undo 頁中,已經使用的的空間必須小于數據頁大小的四分之三。以默認大小 16K 的 undo 頁為例,undo 頁中已經使用的空間必須小于 12K。

如果 insert undo 段滿足緩存條件,它會加入回滾段的 insert_undo_cached 鏈表頭部。

如果 update undo 段滿足緩存條件,它會加入回滾段的 update_undo_cached 鏈表頭部。

2. InnoDB 提交事務

二階段提交過程中,commit 階段的 flush 子階段,把 prepare 階段及之前產生的 redo 日志都刷盤了,把事務執行過程中產生的 binlog 日志都寫入 binlog 日志文件了。

sync 子階段根據系統變量 sync_binlog 的值決定是否觸發操作系統把 binlog 日志刷盤。

前兩個子階段,都只處理了日志,不涉及 InnoDB 的事務。這兩個階段完成之后,InnoDB 的事務還沒有提交,事務還處于準備提交狀態(TRX_STATE_PREPARED)。

commit 子階段才會真正提交 InnoDB 的事務,這個階段完成之后,事務就提交完成了。

commit 子階段提交 InnoDB 的事務,要做的事情有這些:

  • 修改 insert undo 段的狀態。
  • 生成事務提交號,用于 purge 線程判斷是否能清理某些 update undo 日志組中的 undo 日志。
  • 修改 update undo 段的狀態。
  • 把 update undo 段中的 undo 日志組加入回滾段的 history list 鏈表。purge 線程會從這個鏈表中獲取需要清理的 update undo 日志組。
  • 把事務狀態修改為 TRX_STATE_COMMITTED_IN_MEMORY。
  • 釋放事務執行過程中 InnoDB 給表或記錄加的鎖。
  • 重新初始化事務對象,以備當前線程后續使用。

2.1 修改 insert undo 段狀態

如果事務插入記錄到用戶普通表,InnoDB 會為事務分配一個 insert undo 段。

如果事務插入記錄到用戶臨時表,InnoDB 會為事務分配另一個 insert undo 段。

InnoDB 可能會給事務分配 0 ~ 2 個 insert undo 段。commit 子階段會修分配給事務的所有 insert undo 段的狀態。

如果 insert undo 段滿足緩存條件,它的狀態會被修改為 TRX_UNDO_CACHED,否則,它的狀態會被修改為 TRX_UNDO_TO_FREE。

事務提交完成之后,InnoDB 會根據狀態緩存或者釋放 insert undo 段。

2.2 生成事務提交號

事務提交號是事務對象的 no 屬性,通常用 trx->no 表示。

代碼里,對事務提交號的注釋是 transaction serialization number,直譯成中文應該稱為事務序列號,或者事務串行號。

因為 trx->no 是在事務提交時生成的,我們還是把它稱為事務提交號更容易理解一些。

只有 update undo 段需要事務提交號。purge 線程清理 update undo 日志時,會根據 update undo 段的 undo 日志組中保存的事務提交號,決定是否能清理這個 undo 日志組中的 undo 日志。

修改 update undo 段的狀態之前,InnoDB 會生成事務提交號,保存到事務對象的 no 屬性中。

// storage/innobase/trx/trx0trx.cc
static inline bool trx_add_to_serialisation_list(trx_t *trx) {
  ...
  trx->no = trx_sys_allocate_trx_no();
  ...
}

trx_sys_allocate_trx_no() 調用 trx_sys_allocate_trx_id_or_no() 生成事務提交號。

// storage/innobase/include/trx0sys.ic
// 生成事務 ID
inline trx_id_t trx_sys_allocate_trx_id() {
  ut_ad(trx_sys_mutex_own());
  return trx_sys_allocate_trx_id_or_no();
}
// 生成事務提交號
inline trx_id_t trx_sys_allocate_trx_no() {
  ut_ad(trx_sys_serialisation_mutex_own());
  return trx_sys_allocate_trx_id_or_no();
}

從上面的代碼可以看到,生成事務 ID 和事務提交號調用的是同一個方法,trx_sys_allocate_trx_id_or_no() 的代碼如下:

// storage/innobase/include/trx0sys.ic
inline trx_id_t trx_sys_allocate_trx_id_or_no() {
  ...
  // trx_sys_allocate_trx_id_or_no() 每次被調用
  // trx_sys->next_trx_id_or_no 加 1
  // trx_id 保存的是加 1 之前的值
  trx_id_t trx_id = trx_sys->next_trx_id_or_no.fetch_add(1);
  ...
  return trx_id;
}

trx_sys->next_trx_id_or_no 保存的是下一個事務 ID 或事務提交號,具體是哪個,取決于是生成事務 ID 還是生成事務提交號先調用 trx_sys_allocate_trx_id_or_no()。

也就是說,事務 ID 和事務提交號是同一條流水線上生產出來的。我們以 trx 1 和 trx 2 兩個事務為例,來說明生成事務 ID 和事務提交號的流程。

假設此時 trx_sys->next_trx_id_or_no 的值為 100,trx 1、trx 2 啟動和提交的順序如下:

  • trx 1 啟動。
  • trx 2 啟動。
  • trx 1 提交。
  • trx 2 提交。

其于以上假設,生成事務 ID 和事務提交號的流程如下:

  • trx 1 生成事務 ID,得到 100。trx_sys->next_trx_id_or_no 加 1,結果為 101。
  • trx 2 生成事務 ID,得到 101。trx_sys->next_trx_id_or_no 加 1,結果為 102。
  • trx 1 生成事務提交號,得到 102。trx_sys->next_trx_id_or_no 加 1,結果為 103。
  • trx 2 生成事務提交號,得到 103。trx_sys->next_trx_id_or_no 加 1,結果為 104。

從以上流程可以看到,事務 ID 和事務提交號都來源于 trx_sys->next_trx_id_or_no,相互之間不會重復。

2.3 修改 update undo 段狀態

如果事務更新或刪除了用戶普通表的記錄,InnoDB 會為事務分配一個 update undo 段。

如果事務更新或刪除了用戶臨時表的記錄,InnoDB 會為事務分配另一個 update undo 段。

InnoDB 可能會給事務分配 0 ~ 2 個 update undo 段。commit 子階段會修改分配給事務的所有 update undo 段的狀態。

如果 update undo 段滿足緩存條件,它的狀態會被修改為 TRX_UNDO_CACHED,否則,它的狀態會被修改為 TRX_UNDO_TO_PURGE。

2.4 undo 日志組加入 history list

修改完 update undo 段的狀態,update undo 段的 undo 日志組會加入回滾段的 history list 鏈表。purge 線程會從這個鏈表中獲取要清理的 undo 日志組。

前面已經生成了事務提交號,這里會把事務提交號寫入 undo 日志組的頭信息中。

如果 update undo 段的狀態為 TRX_UNDO_CACHED,表示這個 undo 段需要緩存起來。它會加入回滾段的 update_undo_cached 鏈表頭部,以備后續其它事務需要 update undo 段時,能夠快速分配。

3. InnoDB 提交事務完成

前面的一系列操作完成之后,InnoDB 提交事務的操作就完成了。

現在,要把事務狀態修改為 TRX_STATE_COMMITTED_IN_MEMORY。

修改之后,新啟動的事務就能看到該事務插入或更新的記錄,看不到當前事務刪除的記錄。

接下來,InnoDB 會釋放事務執行過程中加的表鎖、記錄鎖。

釋放鎖之后,還要處理 insert undo 段。

如果 insert undo 段的狀態為 TRX_UNDO_CACHED,表示這個 undo 段需要緩存起來。它會加入回滾段的 insert_undo_cached 鏈表頭部,以備后續其它事物需要 insert undo 段時,能夠快速分配。

如果 insert undo 段的狀態為 TRX_UNDO_TO_FREE,它會被釋放,占用的 undo 頁會還給 undo 表空間。

二階段提交的 flush 子階段,已經把 prepare 階段及之前產生的 redo 日志都刷盤了。

commit 子階段,修改 insert undo 段和 update undo 段的狀態,還會產生 redo 日志。

InnoDB 不會主動觸發操作系統把這些 redo 日志刷盤,而是由操作系統決定什么時候把這些 redo 日志刷盤。

InnoDB 敢這么做,是因為這些 redo 日志對于確定事務狀態已經不重要了。即使這些 redo 日志刷盤之前,服務器突然異常關機,導致 undo 段的狀態丟失。MySQL 下次啟動時,也能正確的識別到事務已經提交完成了。

4. 重新初始化事務對象

到這里,InnoDB 提交事務該做的操作都已經做完了。提交事務完成之后,該做的事也都做了。

對于上一個事務,事務對象的使命已經結束。這里會把事務狀態修改為 TRX_STATE_NOT_STARTED。

事務對象也會被重新初始化,但是它不會被釋放。也就是說,事務對象不會回到事務池中,而是留給當前連接后續啟動新事務時復用。

5. 總結

InnoDB 提交事務,就像我們填完一個表格之后,最后蓋上的那個戳,總體上來說,要干 3 件事。

第 1 件,修改分配給事務的各 undo 段的狀態。

如果數據庫發生崩潰,重新啟動后,undo 段的狀態是影響事務提交還是回滾的因素之一。

第 2 件,修改事務對象的狀態。

如果數據據庫一直運行,不發生崩潰,就靠事務對象的狀態來標識事務是否已提交。

第 3 件,把各 undo 段中的 undo 日志組加入 history list 鏈表。

其它事務都不再需要使用這些 undo 日志時,后臺 purge 線程會清理這些 undo 日志組中的日志。

責任編輯:武曉燕 來源: 愛可生開源社區
相關推薦

2023-12-08 08:38:15

EventLoopAPI瀏覽器

2024-01-08 20:05:32

2024-05-15 09:05:42

MySQL核心模塊

2024-06-05 11:49:33

2024-04-03 08:20:53

MySQL核心模塊

2023-06-09 07:18:03

開源數據庫

2024-05-30 08:19:52

微服務架構大型應用

2024-01-25 09:10:10

GoRust標準庫

2023-05-11 08:14:58

國產數據庫用戶

2024-08-28 08:50:11

MySQL核心模塊

2023-06-14 17:56:54

2023-12-26 07:37:27

2022-12-30 08:35:00

2024-08-28 13:09:50

2023-04-26 00:00:00

框架Vue.js客戶

2022-10-10 18:38:56

inert屬性鍵盤

2023-06-08 09:55:03

冪等計算機系統

2022-04-07 11:15:22

PulseEventAPI函數

2023-12-28 08:43:28

前端算法搜索

2022-10-19 08:19:32

動態基線預警
點贊
收藏

51CTO技術棧公眾號

奇米777在线| 日韩中文一区| 亚洲三级黄色在线观看| 日韩动漫在线观看| 在线观看毛片视频| 欧美激情91| 精品国产免费久久| 99视频精品免费| gogo在线观看| gogogo免费视频观看亚洲一| 国产99久久精品一区二区| 国产又粗又猛又爽又黄的视频四季| 日韩福利影视| 欧美日韩国产丝袜另类| 亚洲巨乳在线观看| 东京干手机福利视频| 欧美午夜无遮挡| 国产精品香蕉国产| 欧美精品一区二区成人| 九九精品在线| 日韩亚洲欧美成人一区| 青青草原av在线播放| 久久久久久国产精品免费无遮挡 | 无码日韩精品一区二区| 91精品精品| 亚洲欧美一区二区三区久久| 老女人性生活视频| 欧美日韩在线观看首页| 一区二区三区中文免费| 视频在线一区二区三区| 日韩一级中文字幕| 国产激情一区二区三区四区| 国产精品av网站| 亚洲国产综合久久| 91欧美日韩| 国产视频在线观看一区二区| 色天使在线观看| 日本在线高清| 亚洲美女少妇撒尿| 日本公妇乱淫免费视频一区三区| 久操成人在线视频| 中文字幕在线导航| 99爱在线观看| 亚洲视频在线观看三级| 欧美亚洲另类在线一区二区三区| 国产黄色一区二区| 免费av网站大全久久| 久久青草福利网站| 好吊色视频在线观看| 天堂一区二区三区四区| 日韩欧美一级精品久久| 日本特黄a级片| 成人免费短视频| 亚洲图片欧美色图| 国产免费xxx| 一级毛片视频在线| www.性欧美| 国产自产女人91一区在线观看| 国产乱码77777777| 老鸭窝91久久精品色噜噜导演| 欧美激情免费观看| 91精品一区二区三区蜜桃| 欧美日韩高清| 亚洲欧美一区二区三区情侣bbw| 精品久久久久久无码人妻| 国产精品久一| 欧美高清性hdvideosex| 在线观看国产中文字幕| 日本精品另类| 91福利区一区二区三区| 亚洲熟女乱色一区二区三区| 182在线播放| 五月天激情小说综合| 波多野结衣综合网| 草莓视频丝瓜在线观看丝瓜18| 亚洲色图在线看| 天天爱天天做天天操| jizz亚洲| 国产亚洲精品精华液| 欧美高清视频一区| 黄色电影免费在线看| 久久综合色8888| 日本在线成人一区二区| 国产1区2区3区在线| 国产调教视频一区| 亚洲国产精品www| 最新97超碰在线| 中文字幕一区二区三中文字幕| 亚洲自拍偷拍二区| 成人在线播放免费观看| 亚洲精品精品亚洲| 国产在线xxxx| 欧美伦理91| 色综合中文字幕国产| 日韩欧美亚洲天堂| caoporn视频在线观看| 亚洲国产精品久久久男人的天堂| 精品视频在线观看一区| 国产伦子伦对白在线播放观看| 精品成人久久av| mm1313亚洲国产精品无码试看| 成人精品在线| 亚洲大尺度美女在线| 受虐m奴xxx在线观看| 91欧美大片| 久久久中文字幕| 国产91精品看黄网站在线观看| 久久99热这里只有精品| 99视频在线| 欧美日韩影视| 亚洲乱码国产乱码精品精可以看| 999在线观看视频| 国产成人精品一区二三区在线观看| 欧美日本免费一区二区三区| 美女网站视频在线观看| 国产欧美日韩影院| 一区二区三区www| 国产精品不卡av| 男男视频亚洲欧美| 国产精品国产精品国产专区不卡| 国产在线网站| 亚洲夂夂婷婷色拍ww47| www.xxx亚洲| 国产成人tv| 日日狠狠久久偷偷四色综合免费| 国产第一页在线播放| 奇米精品一区二区三区在线观看一| 亚洲自拍欧美色图| 激情综合闲人网| 亚洲一二三四区| 一路向西2在线观看| 人人爱人人干婷婷丁香亚洲| 亚洲人成电影网站色…| 久久久精品人妻一区二区三区四| 日韩精品一二区| 国产精品一国产精品最新章节| av免费观看一区二区| 精品国产91久久久久久老师| 国产又黄又猛的视频| 少妇久久久久| 欧美精品电影在线| 97成人免费视频| 久久久久高清精品| 国产美女主播在线| 国产美女视频一区二区| 中文字幕av一区二区| 国产精品.www| 成人精品一区二区三区四区| 在线观看国产一区| 欧美一级二级视频| 亚洲精品一区久久久久久| 日本免费一二三区| 国产精品99久久久久久似苏梦涵| 水蜜桃一区二区三区| 国产超碰精品| 精品视频在线观看日韩| 国产成人在线免费观看视频| 国产成人啪午夜精品网站男同| 一级全黄肉体裸体全过程| 国外成人福利视频| 亚洲欧美另类人妖| 国产成人啪精品午夜在线观看| 国产成人午夜精品5599| 日本久久久网站| 中文字幕一区日韩精品| 久久人人爽人人爽人人片亚洲| 亚洲午夜激情视频| 国产精品视频线看| 九九视频精品在线观看| 蜜臀久久99精品久久一区二区 | 国产在线电影| 欧美日韩另类在线| 中文字幕一区二区久久人妻网站| 欧美日韩亚洲一区二区三区在线| av一区观看| 国产精品69xx| 亚洲精品久久久一区二区三区 | 国产熟人av一二三区| 亚洲尤物av| 国产极品jizzhd欧美| 可以在线观看的黄色| 色婷婷av一区| 日本污视频网站| 麻豆精品在线观看| 永久免费精品视频网站| 高清国产一区二区三区四区五区| 另类天堂视频在线观看| 国产高清免费观看| 亚洲激情成人在线| 国产 欧美 在线| 蜜臀av在线播放一区二区三区 | 中文字幕av不卡在线| 97国产精品| 999在线观看免费大全电视剧| 色黄网站在线观看| 欧美精品一区二区三| 成人一二三四区| 亚洲欧美中日韩| 成人欧美精品一区二区| 久久精品动漫| 欧美爱爱视频网站| 大奶在线精品| 国产成人+综合亚洲+天堂| 日本在线观看视频| 精品国产乱码久久久久久1区2区| 日本一区二区不卡在线| 国产丝袜欧美中文另类| 国产999免费视频| 一区二区亚洲精品| 秋霞毛片久久久久久久久| 91麻豆精品| 91tv亚洲精品香蕉国产一区7ujn| 二区在线视频| 日韩精品一区在线观看| 亚洲综合久久网| 亚洲精品伦理在线| 88久久精品无码一区二区毛片| 精品一区二区免费| 国产精品12345| 久久久久电影| 免费中文日韩| 动漫一区二区三区| 国产噜噜噜噜噜久久久久久久久 | avtt天堂在线| 久久久久久久久久电影| 国产精品99精品无码视亚| 久久最新视频| 国产毛片久久久久久国产毛片| 精品国产一区二区三区小蝌蚪| 国产欧美精品日韩精品| 欧美1—12sexvideos| 亚洲人成电影在线| 亚洲精品一区二区三区区别| 欧洲精品在线观看| 国产精品免费av一区二区| 一区精品在线播放| 非洲一级黄色片| av日韩在线网站| aaaaaaaa毛片| 久久99精品久久久久婷婷| 美女福利视频在线| 激情六月综合| 男人日女人的bb| 四虎国产精品免费观看| 欧美福利一区二区三区| 牛牛精品成人免费视频| 97超碰人人看人人| 91精品国产色综合久久不卡粉嫩| 国产精品久久久久77777| 九色porny丨国产首页在线| 欧美剧在线观看| 麻豆传媒视频在线观看免费| 亚洲欧美制服丝袜| 污污视频在线免费看| 欧美不卡激情三级在线观看| 99精品人妻无码专区在线视频区| 在线亚洲一区二区| 成人a v视频| 色一情一乱一乱一91av| 国产精品第9页| 午夜影院久久久| 国产网址在线观看| 亚洲午夜久久久久久久久电影网| 国产一区二区视频在线观看免费| 亚洲欧洲av色图| 777777国产7777777| 国产精品国产成人国产三级| 亚洲天堂最新地址| 91理论电影在线观看| 无码人妻精品一区二区中文| 久久久一区二区三区| 亚洲第一成人网站| 久久久影院官网| 一区二区黄色片| 亚洲国产高清aⅴ视频| 欧美黄色一级生活片| 欧美国产视频在线| 美国一级黄色录像| 国产精品久久久一本精品 | 久久亚洲私人国产精品va媚药| 亚洲码无人客一区二区三区| 国产欧美久久久精品影院| 男人的天堂官网 | 国产高清不卡av| 日韩三级av高清片| 国产另类自拍| 一本色道久久综合亚洲精品酒店| 欧美凹凸一区二区三区视频| 深爱激情久久| 亚洲一区二区三区四区中文| 欧美影视一区| 成人免费观看cn| 老色鬼久久亚洲一区二区| 91国产精品视频在线观看| 久久草av在线| 免费在线观看污网站| 高清不卡一区二区在线| 亚洲欧美在线不卡| 国产欧美日韩三区| 538精品在线观看| 精品久久久中文| 精品国产www| 日韩一区二区三区视频| 手机看片1024日韩| 一级做a爰片久久毛片美女图片| 日本精品在线| 国内成人精品一区| 自拍偷拍欧美视频| 成人国产精品日本在线| 福利片在线一区二区| 日韩精品第一页| 欧美三级乱码| 欧美丰满熟妇xxxxx| 蜜桃一区二区三区在线观看| 少妇献身老头系列| 国产视频不卡一区| 久久久久久久久艹| 日韩欧美有码在线| 中文字幕黄色av| 日韩精品一区二区三区蜜臀| 欧美日韩国产综合视频| 欧美xxxx做受欧美| 香蕉久久免费电影| 成人欧美视频在线| 色综合色综合| 日韩av一二三四区| 国产精品1区2区3区在线观看| 最新国产精品自拍| 久久美女高清视频| 美女福利视频在线观看| 欧美色成人综合| 欧美女优在线| 欧美激情视频播放| 久久亚洲精品人成综合网| 精品一区国产| 影视一区二区| 美女黄色片视频| 91在线观看一区二区| 欧美一级高潮片| 91精品麻豆日日躁夜夜躁| 国产高清在线| 91极品女神在线| 97成人在线| 超碰人人爱人人| 精品一区免费av| 日韩女同一区二区三区| 欧美午夜电影在线| 性中国xxx极品hd| www.日韩不卡电影av| 国产调教在线| 国产午夜精品一区| 亚洲一级淫片| 五月天丁香花婷婷| 国产精品免费网站在线观看| 一级片视频在线观看| 欧美色老头old∨ideo| 日韩a在线观看| 2021国产精品视频| 国内精品麻豆美女在线播放视频| 日本xxxxx18| 国产一区二区三区免费| 色哟哟一一国产精品| 欧美日韩aaaaaa| 黄色免费网站在线观看| 国产精品老牛影院在线观看| 精品在线手机视频| 日批视频在线免费看| 久久综合给合久久狠狠狠97色69| 日韩成年人视频| 日韩黄色高清视频| 欧美私密网站| 日本欧美精品久久久| 日韩一区精品字幕| 中文字幕在线观看免费高清| 欧美日韩成人综合在线一区二区| 日本中文在线观看| 亚洲xxxx18| 国语精品一区| 欧美夫妇交换xxx| 欧美视频一区二区三区…| 三区在线视频| 国产97色在线|日韩| 一区二区免费不卡在线| 国产成人av免费观看| 亚洲综合视频网| 午夜在线观看视频18| 欧美壮男野外gaytube| 狠狠做六月爱婷婷综合aⅴ| 亚洲无吗一区二区三区| 国产精品人成在线观看免费| 北条麻妃一二三区| 97视频在线免费观看| 精品国产一区二区三区av片| 手机av在线免费| 亚洲国产成人tv| 久久精品蜜桃| 国产精品久久久久久久美男 | 蜜桃视频动漫在线播放| 欧美精品一区在线| 精品写真视频在线观看|