《丁奇 MySQL45講 03》之歸納總結

2022-06-29 20:57:08 字數 1047 閱讀 4521

rr級別下,每執行第乙個select語句時都會將當前系統中的所有活躍事務(未提交的事務)拷貝到乙個列表來生成readview,後續所有的select都會復用這個readview,這也是造成可重複讀的關鍵點。

rc級別下,每次執行select語句時,都會重新將當前系統中的所有活躍事務拷貝到乙個列表來重新生成readview,所以它才會造成不可重複讀。

data_trx_id < up_limit_id || data_trx_id == creator_trx_id(可見)

如果該行記錄的事務id小於readview中的最小活躍事務id,那麼可以說明的是該行記錄在開始當前事務之前就已經存在了(事務id大小決定了開始事務的順序);該行記錄的事務id等於creator_trx_id,說明該行記錄是當前事務自己生成的,自己生成的資料當然能看見。

data_trx_id > low_limit_id(不可見)

如果該行記錄的事務id大於readview中的最大活躍事務id,那麼可以說明的是該行記錄是在建立readview之後才提交的,是不可見的。

data_trx_id是否在trx_ids列表中

如果該行記錄的事務id在trx_ids列表中存在,那麼說明生成該行記錄的事務還在活躍中(還在提交中,個人認為這樣子描述不是很準確,在rr級別下,就算在後續提交了,其事務id仍然在trx_ids列表中,提交只不過更新了data_trx_id,所以在其他事務看來,認為它仍然還是未提交的,但實際上它已經提交了...),那麼我自然是看不見修改的資料,則需要根據data_roll_ptr找到該行記錄的上乙個版本,然後根據上乙個版本的data_trx_id重新按照如上的過程進行判斷;如果該行記錄的事務id在trx_id列表中不存在,說明生成該行記錄的事務已經提交了,是具有可見性的。rr級別下每次的查詢都不會使trx_ids列表發生改變,而rc級別下每次的查詢都會重新生成readview,導致trx_ids列表發生變化,也就造成了不可重複讀問題。

實戰mysql45講 MySQL實戰45講

作者簡介 林曉斌,網名 丁奇 前阿里資深技術專家,曾負責阿里雲rds核心開發團隊和運維團隊,並推動了alisql分支開源。作為活躍的mysql社群貢獻者,丁奇專注於資料儲存系統 mysql原始碼研究和改進 mysql效能優化和功能改進,熱衷於解決mysql疑難問題。課程亮點 你將獲得 前阿里資深技術...

mysql45講 自增主鍵

使主鍵索引盡量遞增的順序,避免了頁 因此索引更緊湊。但不能保證是連續遞增的。1.myisam 引擎的自增值儲存在資料檔案中 2.innodb的自增值儲存在記憶體裡,在mysql8.0之後,將自增值的變更記錄存在了redo log中,重啟時依靠redo log恢復之前的值。當主鍵id被設為自增後,新插...

MySQL實戰45講 MySQL筆記之資料庫基礎

連線資料庫 查詢快取,若命中直接返回結果 不推薦使用,更新即失效,利用效率低,8.0已經刪除查詢快取 語法分析 語句優化 查詢儲存引擎 重建表方法 1.alter table t engine innodb 2.optimize table t analyze table t 只重建索引 count...