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

首頁 > 數據庫 > MySQL > 正文

MySQL中InnoDB存儲引擎的鎖的基本使用教程

2024-07-24 13:08:16
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了MySQL中InnoDB存儲引擎的鎖的基本概念,是MySQL入門學習中的基礎知識,需要的朋友可以參考下

MyISAM和MEMORY采用表級鎖(table-level locking)

BDB采用頁面鎖(page-leve locking)或表級鎖,默認為頁面鎖

InnoDB支持行級鎖(row-level locking)和表級鎖,默認為行級鎖

各種鎖特點

表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生沖突的概率最高,并發度最低

行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高

頁面鎖:開銷和加鎖時間介于表鎖和行鎖之間;會出現死鎖;鎖定粒度介于表鎖和行鎖之間,并發度一般

InnoDB存儲引擎的鎖

InnoDB存儲引擎實現了如下兩種鎖

1、共享鎖(S Lock),允許事務讀一行數據

2、排他鎖(X Lock),允許事務更新或者刪除一行數據

共享鎖和排他鎖的兼容如下圖所示

MySQL中InnoDB存儲引擎的鎖的基本使用教程

一致性的非鎖定讀

一致性的非鎖定行讀(consistent nonlocking read)是指InnoDB存儲引擎通過行多版本控制(multi versioning)的方式來讀取當前執行時間數據庫中行的數據。如果讀取的行正在執行DELETE、UPDATE操作,這是讀取操作不會因此而會等待行上鎖的釋放,相反,InnoDB會去讀取行的一個快照數據。

之所以稱其為非鎖定讀,因為不需要等待訪問的行上X鎖的釋放??煺諗祿侵父男兄鞍姹镜臄祿?,該實現是通過undo段來實現的。但是在不同事務隔離級別下,讀取的方式不同,并不是每個事務隔離級別下讀取的都是一致性讀。

例如:

對于read committed的事務隔離級別,他總是讀取行的最新版本,如果行被鎖定了,則讀取該行版本的最新一個快照。

對于repeatable read(innoDB存儲引擎的默認隔離級別),總是讀取事務開始時的行數據。

非鎖定讀的機制大大提高了數據讀取的并發性,在Innodb存儲引擎默認設置下,這是默認的讀取方式,但是在某些情況下,可以對讀進行加鎖,比如:

1、顯式對讀進行加鎖,如使用 select --- for update ;select --- lock in share mode

2、在外鍵的插入和更新上,因為在外鍵的插入和更新上,對于數據的隔離性要求較高,在插入前需要掃描父表中的記錄是否存在,所以,在外鍵的插入刪除上,InnoDB會使用加S鎖的方式來實現。

InnoDB鎖的算法

1、Record Lock:單個行記錄上的鎖

2、Gap Lock:間隙鎖,鎖定一個范圍,但不包含記錄本身

3、Next-key Lock:Gap Lock+Record Lock,鎖定一個范圍,并且鎖定記錄本身

Record Lock總是會去鎖住索引記錄,如果InnoDB存儲引擎表建立的時候沒有設置任何一個索引,這時InnodB存儲引擎會使用隱式的主鍵來進行鎖定,在Repeatable Read隔離級別下,Next-key Lock 算法是默認的行記錄鎖定算法。

鎖帶來的問題

1、丟失更新

如何避免丟失更新:讓事務變成串行操作,而不是并發的操作,即對每個事務開始---對讀取記錄加排他鎖。

2、臟讀

臟讀即一個事務可以讀到另一個事務中未提交的數據,這違反了數據庫的隔離性。

臟讀發生的條件是需要事務的隔離級別為Read uncommitted。

3、不可重復讀

不可重復讀與臟讀的區別是:臟讀是讀到未提交的數據,而不可重復讀讀到的是已經提交的數據。

一般來說,不可重復讀是可以接受的,在InnoDB存儲引擎中,通過使用Next-Key Lock算法來避免不可重復讀的問題。

值得注意的是,默認情況下InnoDB存儲引擎不會回滾超時引發的錯誤異常。

死鎖的相關問題

1、死鎖發生的條件

互斥條件:一個資源每次只能被一個進程使用;請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放;不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪;循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。

2、死鎖檢測(根據網上的經驗)

Innodb檢測死鎖有兩種情況,一種是滿足循環等待條件,還有另一種策略:鎖結構超過mysql配置中設置的最大數量或鎖的遍歷深度超過設置的最大深度時,innodb也會判斷為死鎖(這是提高性能方面的考慮,避免事務一次占用太多的資源)。

因循環等待條件而產生的死鎖只有可能是四種形式:兩張表兩行記錄交叉申請互斥鎖、同一張表則存在主鍵索引鎖沖突、主鍵索引鎖與非聚簇索引鎖沖突、鎖升級導致的鎖等待隊列阻塞。

3、死鎖避免(根據網上的經驗)

1.如果使用insert…select語句備份表格且數據量較大,在單獨的時間點操作,避免與其他sql語句爭奪資源,或使用select into outfile加上load data infile代替 insert…select,這樣不僅快,而且不會要求鎖定

2. 一個鎖定記錄集的事務,其操作結果集應盡量簡短,以免一次占用太多資源,與其他事務處理的記錄沖突。

3.更新或者刪除表格數據,sql語句的where條件都是主鍵或都是索引,避免兩種情況交叉,造成死鎖。對于where子句較復雜的情況,將其單獨通過sql得到后,再在更新語句中使用。

4. sql語句的嵌套表格不要太多,能拆分就拆分,避免占有資源同時等待資源,導致與其他事務沖突。

5. 對定點運行腳本的情況,避免在同一時間點運行多個對同一表進行讀寫的腳本,特別注意加鎖且操作數據量比較大的語句。

6.應用程序中增加對死鎖的判斷,如果事務意外結束,重新運行該事務,減少對功能的影響。

4、死鎖解決

1)先執行show processlist找到死鎖線程號.然后Kill pid

2)Show innodb status檢查引擎狀態 ,可以看到哪些語句產生死鎖

3)查看information_schema架構下的innodb_locks、innodb_trx、innodb_lock_waits等表

PS:Mysql死鎖

既然談到死鎖,那附帶地就專門說一下。

何為死鎖?

死鎖是對資源的分配和使用不當而造成的。是兩個進程爭奪某一資源而出現相互等待的現象。具體的來講,出現死鎖需要滿足四個必要條件:

(1)互斥條件:每一個資源都只能被一個進程使用

(2)請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放

(3)不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。

(4)循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。

很顯然,出現死鎖需要兩個或者兩個以上的進程,換句話說,死鎖發生在并發的程序中。在Mysql中,由于目前只有InnoDB引擎使用事務(InnoDB支持鎖),便有了InnoDB和死鎖的曠世基情。

死鎖的檢測

1、通過使用Show innodb status檢查引擎狀態 ,可以看到哪些語句產生deadlock

2、MySQL提供了一個information_schema,通過查看innodb_locks、innodb_trx、innodb_lock_waits這幾個表檢測死鎖。

因循環等待條件而產生的死鎖只有可能是四種形式:兩張表兩行記錄交叉申請互斥鎖、同一張表則存在主鍵索引鎖沖突、主鍵索引鎖與非聚簇索引鎖沖突、鎖升級導致的鎖等待隊列阻塞。

死鎖避免

1.如果使用insert…select語句備份表格且數據量較大,在單獨的時間點操作,避免與其他sql語句爭奪資源,或使用select into outfile加上load data infile代替 insert…select,這樣不僅快,而且不會要求鎖定

2. 一個鎖定記錄集的事務,其操作結果集應盡量簡短,以免一次占用太多資源,與其他事務處理的記錄沖突。

3.更新或者刪除表格數據,sql語句的where條件都是主鍵或都是索引,避免兩種情況交叉,造成死鎖。對于where子句較復雜的情況,將其單獨通過sql得到后,再在更新語句中使用。

4. sql語句的嵌套表格不要太多,能拆分就拆分,避免占有資源同時等待資源,導致與其他事務沖突。

5. 對定點運行腳本的情況,避免在同一時間點運行多個對同一表進行讀寫的腳本,特別注意加鎖且操作數據量比較大的語句。

6.應用程序中增加對死鎖的判斷,如果事務意外結束,重新運行該事務,減少對功能的影響。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产丝袜美女| 国产精品美女视频网站| 国产精品久久久久久久久免费看| 国产亚洲欧美日韩精品| 欧美激情一区二区三区成人| 亚洲精品98久久久久久中文字幕| 国产精品视频最多的网站| 中文字幕日韩欧美精品在线观看| 97视频com| 精品国产乱码久久久久久婷婷| 欧美成人免费全部观看天天性色| 国产脚交av在线一区二区| 欧美日韩国产一区中文午夜| 亚洲尤物视频网| 国产精品久久一| 91精品久久久久久久久中文字幕| 亚洲激情在线观看| 亚洲自拍小视频免费观看| 国产精品www色诱视频| 国内精品视频一区| 亚洲欧美制服丝袜| 日韩动漫免费观看电视剧高清| 日韩精品在线观看视频| 国产日韩在线亚洲字幕中文| 91av在线影院| 欧美二区在线播放| 日韩亚洲精品视频| 亚洲热线99精品视频| 国产精品视频久久| 欧美成人全部免费| 亚洲精品一二区| 日韩欧美高清视频| 亚洲女人天堂成人av在线| 色多多国产成人永久免费网站| 久久久999精品免费| 国产精品男人爽免费视频1| 欧美综合国产精品久久丁香| 国产精品自产拍在线观| 国产精品久久久久国产a级| 亚洲日韩中文字幕在线播放| 91精品国产综合久久久久久蜜臀| 中文字幕亚洲一区二区三区| 亚洲精品电影在线观看| 日韩av在线电影网| 免费不卡在线观看av| 亚洲成在人线av| 色小说视频一区| 国产suv精品一区二区| 欧美自拍大量在线观看| 欧美成人精品一区| 7777精品久久久久久| 亚洲欧洲免费视频| 少妇av一区二区三区| 九九热99久久久国产盗摄| 日韩精品在线观看一区| 91在线视频一区| 在线成人中文字幕| 日本久久亚洲电影| 日韩成人在线电影网| 国产精品久久久久福利| 久久亚洲精品小早川怜子66| 日韩福利伦理影院免费| 91国语精品自产拍在线观看性色| 国产成人在线视频| 亚洲天堂视频在线观看| 蜜臀久久99精品久久久久久宅男| 中文字幕亚洲激情| 日韩av免费在线| 日本在线观看天堂男亚洲| 欧美二区乱c黑人| 亚洲第一视频在线观看| 精品国产鲁一鲁一区二区张丽| 久久精品成人动漫| 91久久久久久久久久久久久| 欧美色欧美亚洲高清在线视频| 欧美日韩成人精品| 久久久久久久久久久免费| 日韩精品视频在线免费观看| 欧美另类极品videosbest最新版本| 亚洲精品有码在线| 国产午夜精品视频| 亚洲精品suv精品一区二区| 欧美激情精品久久久久久蜜臀| 久久视频精品在线| 亚洲美女黄色片| 亚洲香蕉成人av网站在线观看| 亚洲一级片在线看| 欧美激情精品久久久久久久变态| 欧美寡妇偷汉性猛交| 亚洲精品一区二区网址| 午夜精品国产精品大乳美女| 日韩最新中文字幕电影免费看| 国产精品入口免费视| 亚洲第五色综合网| 精品中文字幕在线观看| 日韩中文字幕在线观看| 国产91在线播放| 精品高清美女精品国产区| 日韩精品免费在线观看| 国产精品久久久久久亚洲调教| 中文欧美日本在线资源| 国产亚洲人成a一在线v站| 欧美性xxxxx| 热re99久久精品国产66热| 欧美大人香蕉在线| 成人性生交大片免费观看嘿嘿视频| 中文字幕日韩在线播放| 俺去亚洲欧洲欧美日韩| 日韩一二三在线视频播| 国产成人jvid在线播放| 精品国产乱码久久久久酒店| 国产精品极品在线| 精品成人在线视频| 国产色视频一区| 久久精品99久久久香蕉| 久久九九国产精品怡红院| 日韩欧美国产黄色| 91黑丝在线观看| 亚洲成在人线av| 欧美色欧美亚洲高清在线视频| 欧美成人激情视频免费观看| 国产精品一区久久久| 日韩精品一区二区三区第95| 中文字幕久热精品在线视频| 亚洲成色777777女色窝| 亚洲免费伊人电影在线观看av| 成人做爰www免费看视频网站| 精品性高朝久久久久久久| 日韩美女写真福利在线观看| 亚洲乱码国产乱码精品精天堂| 亚洲午夜未满十八勿入免费观看全集| 欧美精品福利视频| 国产亚洲人成网站在线观看| 久久成人一区二区| 国产精品视频xxxx| 欧美精品久久久久久久免费观看| 亚洲高清久久久久久| 国产精品久久久久久久7电影| 国产999在线观看| 在线播放日韩专区| 国产成人拍精品视频午夜网站| 久久影院中文字幕| 欧美激情免费视频| 久久久综合免费视频| 久久精品久久精品亚洲人| 久久亚洲私人国产精品va| 亚洲精品日韩av| 欧美激情国内偷拍| 亚洲女人天堂视频| 成人啪啪免费看| 精品二区三区线观看| 欧美一性一乱一交一视频| 姬川优奈aav一区二区| 亚洲最新在线视频| 91精品国产99| 亚洲精品久久久久久久久久久久久| 欧美亚洲成人精品| 欧美日韩中文字幕日韩欧美| 97国产一区二区精品久久呦| 国产精品美女在线观看| 亚洲欧美日韩天堂一区二区| 久久久久久网站| 亚洲国产日韩欧美在线99| 亚洲最新av在线网站|