91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL半一致性讀原理的示例分析

發布時間:2021-11-02 17:13:15 來源:億速云 閱讀:353 作者:小新 欄目:MySQL數據庫

小編給大家分享一下MySQL半一致性讀原理的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1、什么是半一致性讀

A type of read operation used for UPDATE statements, that is a combination of read committed and consistent read. When an UPDATE statement examines a row that is already locked, InnoDB returns the latest committed version to MySQL so that MySQL can determine whether the row matches the WHERE condition of the UPDATE. If the row matches (must be updated), MySQL reads the row again, and this time InnoDB either locks it or waits for a lock on it. This type of read operation can only happen when the transaction has the read committed isolation level, or when the innodb_locks_unsafe_for_binlog option is enabled.

就是發生在update語句中。在RC隔離級別或者innodb_locks_unsafe_for_binlog被設置為true,并發時,如果update的記錄發生鎖等待,那么返回該記錄的prev 版本(在返回前會將鎖等待的這個lock從trx中刪除掉),到mysql層進行where判斷,是否滿足條件。如果滿足where條件,那么再次進入innodb層,真正加鎖或者發生鎖等待。

這樣做的好處是:減少同一行記錄的鎖沖突及鎖等待;無并發沖突時,直接讀取最新版本加鎖,有沖突時,不加鎖,讀取prev版本不需要鎖等待。

缺點:非沖突串行話策略,對于binlog來說是不安全的。只能發生在RC隔離級別和innodb_lock_unsafe_for_binlog下。

2、原理
MySQL半一致性讀原理的示例分析

3、講解

1)半一致性讀需要mysql層和innodb層配合使用。

2)mysql_update函數中,默認都會調用try_semi_consistent_read在RC或innodb_lock_unsafe_for_binlog下加上試圖半一致性讀標簽:prebuilt->row_read_type = ROW_READ_TRY_SEMI_CONSISTENT。真正執行半一致性讀是由innodb層決定。

3)半一致性讀的條件:該記錄發生鎖等待;必須是全表掃描 && 該索引是二級索引

4)半一致性讀時,構建prev版本,然后調用函數lock_trx_handle_wait將鎖等待從trx中刪除。

5)返回prev rec前,會將置成半一致性讀標簽:prebuilt->row_read_type = ROW_READ_DID_SEMI_CONSISTENT

6)返回到mysql層,會進行where判斷。如果匹配,那么會再次進入innodb層,由于prebuilt->row_read_type == ROW_READ_DID_SEMI_CONSISTENT,此時不再走半一致性讀判斷的流程,直接進入加鎖或鎖等待。

5)這里update有個優化:innodb層如果執行計劃是索引下推,那么判斷where條件是否匹配會提前。若不匹配則提前調用函數row_unlock_for_mysql釋放聚集索引上的鎖

6)另外一個優化:返回mysql層后,判斷where不匹配,則會調用unlock_row函數釋放鎖。注:這里update在innodb層沒有發生鎖沖突,成功加上了鎖。即沒有半一致性讀

以上是“MySQL半一致性讀原理的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜昌市| 修水县| 黄梅县| 双城市| 黄冈市| 阳春市| 渑池县| 安丘市| 襄城县| 宜春市| 和林格尔县| 莎车县| 东兰县| 大余县| 富川| 都匀市| 新野县| 余姚市| 育儿| 德庆县| 威海市| 鄂尔多斯市| 新疆| 隆回县| 铁岭县| 云龙县| 庄河市| 南雄市| 黑山县| 土默特左旗| 曲松县| 迁安市| 浙江省| 光泽县| 大丰市| 营口市| 甘孜| 九龙县| 徐州市| 淮北市| 拉萨市|