内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

基于源碼角度解析MySQL半一致性讀原理-創(chuàng)新互聯(lián)

下文主要給大家?guī)砘谠创a角度解析MySQL半一致性讀原理,希望基于源碼角度解析MySQL半一致性讀原理能夠帶給大家實(shí)際用處,這也是我編輯這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的隴西網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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.

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

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

缺點(diǎn):非沖突串行話策略,對(duì)于binlog來說是不安全的。只能發(fā)生在RC隔離級(jí)別和innodb_lock_unsafe_for_binlog下。

2、原理
基于源碼角度解析MySQL半一致性讀原理
3、講解

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

2)mysql_update函數(shù)中,默認(rèn)都會(huì)調(diào)用try_semi_consistent_read在RC或innodb_lock_unsafe_for_binlog下加上試圖半一致性讀標(biāo)簽:prebuilt->row_read_type = ROW_READ_TRY_SEMI_CONSISTENT。真正執(zhí)行半一致性讀是由innodb層決定。

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

4)半一致性讀時(shí),構(gòu)建prev版本,然后調(diào)用函數(shù)lock_trx_handle_wait將鎖等待從trx中刪除。

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

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

5)這里update有個(gè)優(yōu)化:innodb層如果執(zhí)行計(jì)劃是索引下推,那么判斷where條件是否匹配會(huì)提前。若不匹配則提前調(diào)用函數(shù)row_unlock_for_mysql釋放聚集索引上的鎖

6)另外一個(gè)優(yōu)化:返回mysql層后,判斷where不匹配,則會(huì)調(diào)用unlock_row函數(shù)釋放鎖。注:這里update在innodb層沒有發(fā)生鎖沖突,成功加上了鎖。即沒有半一致性讀

對(duì)于以上基于源碼角度解析MySQL半一致性讀原理,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請(qǐng)繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會(huì)喜歡上這些內(nèi)容的。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站標(biāo)題:基于源碼角度解析MySQL半一致性讀原理-創(chuàng)新互聯(lián)
當(dāng)前地址:http://www.rwnh.cn/article22/csjocc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站改版靜態(tài)網(wǎng)站、網(wǎng)站維護(hù)小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
遵义县| 游戏| 孝昌县| 奎屯市| 义马市| 石家庄市| 黑山县| 清丰县| 和林格尔县| 雅安市| 七台河市| 信阳市| 安远县| 闽清县| 京山县| 板桥市| 汕头市| 安化县| 郓城县| 咸宁市| 永新县| 银川市| 温州市| 怀柔区| 芷江| 霸州市| 灌南县| 中牟县| 木里| 田东县| 普洱| 长兴县| 开江县| 冷水江市| 高碑店市| 太白县| 新沂市| 商水县| 淮阳县| 尼木县| 库尔勒市|