<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        mysql數(shù)據(jù)庫鎖的產(chǎn)生原因及解決辦法_MySQL

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 20:15:49
        文檔

        mysql數(shù)據(jù)庫鎖的產(chǎn)生原因及解決辦法_MySQL

        mysql數(shù)據(jù)庫鎖的產(chǎn)生原因及解決辦法_MySQL:數(shù)據(jù)庫和操作系統(tǒng)一樣,是一個多用戶使用的共享資源。當(dāng)多個用戶并發(fā)地存取數(shù)據(jù) 時,在數(shù)據(jù)庫中就會產(chǎn)生多個事務(wù)同時存取同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制就可能會讀取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。加鎖是實現(xiàn)數(shù)據(jù)庫并 發(fā)控制的一個非常重要
        推薦度:
        導(dǎo)讀mysql數(shù)據(jù)庫鎖的產(chǎn)生原因及解決辦法_MySQL:數(shù)據(jù)庫和操作系統(tǒng)一樣,是一個多用戶使用的共享資源。當(dāng)多個用戶并發(fā)地存取數(shù)據(jù) 時,在數(shù)據(jù)庫中就會產(chǎn)生多個事務(wù)同時存取同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制就可能會讀取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。加鎖是實現(xiàn)數(shù)據(jù)庫并 發(fā)控制的一個非常重要

        數(shù)據(jù)庫和操作系統(tǒng)一樣,是一個多用戶使用的共享資源。當(dāng)多個用戶并發(fā)地存取數(shù)據(jù) 時,在數(shù)據(jù)庫中就會產(chǎn)生多個事務(wù)同時存取同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制就可能會讀取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。加鎖是實現(xiàn)數(shù)據(jù)庫并 發(fā)控制的一個非常重要的技術(shù)。在實際應(yīng)用中經(jīng)常會遇到的與鎖相關(guān)的異常情況,當(dāng)兩個事務(wù)需要一組有沖突的鎖,而不能將事務(wù)繼續(xù)下去的話,就會出現(xiàn)死鎖,嚴 重影響應(yīng)用的正常執(zhí)行。

        在數(shù)據(jù)庫中有兩種基本的鎖類型:排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。當(dāng)數(shù)據(jù)對象被加上排它鎖時,其他的事務(wù)不能對它讀取和修改。加了共享鎖的數(shù)據(jù)對象可以被其他事務(wù)讀取,但不能修改。數(shù)據(jù)庫利用這兩 種基本的鎖類型來對數(shù)據(jù)庫的事務(wù)進行并發(fā)控制。

        死鎖的第一種情況

        一個用戶A 訪問表A(鎖住了表A),然后又訪問表B;另一個用戶B 訪問表B(鎖住了表B),然后企圖訪問表A;這時用戶A由于用戶B已經(jīng)鎖住表B,它必須等待用戶B釋放表B才能繼續(xù),同樣用戶B要等用戶A釋放表A才能繼續(xù),這就死鎖就產(chǎn)生了。

        解決方法:

        這種死鎖比較常見,是由于程序的BUG產(chǎn)生的,除了調(diào)整的程序的邏輯沒有其它的辦法。仔細分析程序的邏輯,對于數(shù)據(jù)庫的多表操作時,盡量按照相同的順序進 行處理,盡量避免同時鎖定兩個資源,如操作A和B兩張表時,總是按先A后B的順序處理, 必須同時鎖定兩個資源時,要保證在任何時刻都應(yīng)該按照相同的順序來鎖定資源。

        死鎖的第二種情況

        用戶A查詢一條紀錄,然后修改該條紀錄;這時用戶B修改該條紀錄,這時用戶A的事務(wù)里鎖的性質(zhì)由查詢的共享鎖企圖上升到獨占鎖,而用戶B里的獨占鎖由于A 有共享鎖存在所以必須等A釋放掉共享鎖,而A由于B的獨占鎖而無法上升的獨占鎖也就不可能釋放共享鎖,于是出現(xiàn)了死鎖。這種死鎖比較隱蔽,但在稍大點的項 目中經(jīng)常發(fā)生。如在某項目中,頁面上的按鈕點擊后,沒有使按鈕立刻失效,使得用戶會多次快速點擊同一按鈕,這樣同一段代碼對數(shù)據(jù)庫同一條記錄進行多次操 作,很容易就出現(xiàn)這種死鎖的情況。

        解決方法:

        1、對于按鈕等控件,點擊后使其立刻失效,不讓用戶重復(fù)點擊,避免對同時對同一條記錄操作。
        2、使用樂觀鎖進行控制。樂觀鎖大多是基于數(shù)據(jù)版本(Version)記錄機制實現(xiàn)。即為數(shù)據(jù)增加一個版本標識,在基于數(shù)據(jù)庫表的版本解決方案中,一般是 通過為數(shù)據(jù)庫表增加一個“version”字段來實現(xiàn)。讀取出數(shù)據(jù)時,將此版本號一同讀出,之后更新時,對此版本號加一。此時,將提交數(shù)據(jù)的版本數(shù)據(jù)與數(shù) 據(jù)庫表對應(yīng)記錄的當(dāng)前版本信息進行比對,如果提交的數(shù)據(jù)版本號大于數(shù)據(jù)庫表當(dāng)前版本號,則予以更新,否則認為是過期數(shù)據(jù)。樂觀鎖機制避免了長事務(wù)中的數(shù)據(jù) 庫加鎖開銷(用戶A和用戶B操作過程中,都沒有對數(shù)據(jù)庫數(shù)據(jù)加鎖),大大提升了大并發(fā)量下的系統(tǒng)整體性能表現(xiàn)。Hibernate 在其數(shù)據(jù)訪問引擎中內(nèi)置了樂觀鎖實現(xiàn)。需要注意的是,由于樂觀鎖機制是在我們的系統(tǒng)中實現(xiàn),來自外部系統(tǒng)的用戶更新操作不受我們系統(tǒng)的控制,因此可能會造 成臟數(shù)據(jù)被更新到數(shù)據(jù)庫中。
        3、使用悲觀鎖進行控制。悲觀鎖大多數(shù)情況下依靠數(shù)據(jù)庫的鎖機制實現(xiàn),如Oracle的Select … for update語句,以保證操作最大程度的獨占性。但隨之而來的就是數(shù)據(jù)庫性能的大量開銷,特別是對長事務(wù)而言,這樣的開銷往往無法承受。如一個金融系統(tǒng), 當(dāng)某個操作員讀取用戶的數(shù)據(jù),并在讀出的用戶數(shù)據(jù)的基礎(chǔ)上進行修改時(如更改用戶賬戶余額),如果采用悲觀鎖機制,也就意味著整個操作過程中(從操作員讀 出數(shù)據(jù)、開始修改直至提交修改結(jié)果的全過程,甚至還包括操作員中途去煮咖啡的時間),數(shù)據(jù)庫記錄始終處于加鎖狀態(tài),可以想見,如果面對成百上千個并發(fā),這 樣的情況將導(dǎo)致災(zāi)難性的后果。所以,采用悲觀鎖進行控制時一定要考慮清楚。

        死鎖的第三種情況

        如果在事務(wù)中執(zhí)行了一條不滿足條件的update語句,則執(zhí)行全表掃描,把行級鎖上升為表級鎖,多個這樣的事務(wù)執(zhí)行后,就很容易產(chǎn)生死鎖和阻塞。類似的情 況還有當(dāng)表中的數(shù)據(jù)量非常龐大而索引建的過少或不合適的時候,使得經(jīng)常發(fā)生全表掃描,最終應(yīng)用系統(tǒng)會越來越慢,最終發(fā)生阻塞或死鎖。

        解決方法:

        SQL語句中不要使用太復(fù)雜的關(guān)聯(lián)多表的查詢;使用“執(zhí)行計劃”對SQL語句進行分析,對于有全表掃描的SQL語句,建立相應(yīng)的索引進行優(yōu)化。
        5.小結(jié)
        總體上來說,產(chǎn)生內(nèi)存溢出與鎖表都是由于代碼寫的不好造成的,因此提高代碼的質(zhì)量是最根本的解決辦法。有的人認為先把功能實現(xiàn),有BUG時再在測試階段進 行修正,這種想法是錯誤的。正如一件產(chǎn)品的質(zhì)量是在生產(chǎn)制造的過程中決定的,而不是質(zhì)量檢測時決定的,軟件的質(zhì)量在設(shè)計與編碼階段就已經(jīng)決定了,測試只是 對軟件質(zhì)量的一個驗證,因為測試不可能找出軟件中所有的BUG。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        mysql數(shù)據(jù)庫鎖的產(chǎn)生原因及解決辦法_MySQL

        mysql數(shù)據(jù)庫鎖的產(chǎn)生原因及解決辦法_MySQL:數(shù)據(jù)庫和操作系統(tǒng)一樣,是一個多用戶使用的共享資源。當(dāng)多個用戶并發(fā)地存取數(shù)據(jù) 時,在數(shù)據(jù)庫中就會產(chǎn)生多個事務(wù)同時存取同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制就可能會讀取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。加鎖是實現(xiàn)數(shù)據(jù)庫并 發(fā)控制的一個非常重要
        推薦度:
        標簽: 原因 mysql 鎖的
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 精品无码国产污污污免费网站| 直接进入免费看黄的网站| 亚洲va无码va在线va天堂| 亚洲AV无码成人精品区蜜桃| 一级做a爰性色毛片免费| 久久国产免费一区| 女人18毛片特级一级免费视频| 免费观看亚洲人成网站| 亚洲av永久无码精品网站| 视频免费在线观看| 日韩激情淫片免费看| 亚洲国产成人高清在线观看| 亚洲精品无码久久久久YW| 国内精品一级毛片免费看| 国产传媒在线观看视频免费观看| 亚洲av成人一区二区三区观看在线 | 亚洲日韩精品国产一区二区三区| 国产精品69白浆在线观看免费 | 一本色道久久综合亚洲精品| 亚洲黄色免费在线观看| 一区二区三区精品高清视频免费在线播放 | 亚洲日产2021三区在线 | 四虎一区二区成人免费影院网址| 亚洲国产91精品无码专区| 亚洲综合在线一区二区三区| 毛片在线播放免费观看| 亚洲美女视频一区| 日本v片免费一区二区三区| selaoban在线视频免费精品| 四虎影永久在线高清免费| 一级毛片免费视频网站| 亚洲成人精品久久| 久久久精品免费国产四虎| 亚洲欧洲尹人香蕉综合| 日韩一级在线播放免费观看| 久久性生大片免费观看性| 亚洲精品无码久久毛片| 亚洲精品色在线网站| 午夜无遮挡羞羞漫画免费| 日韩免费码中文在线观看| 国产极品美女高潮抽搐免费网站 |