【小資說庫】第13期 應(yīng)用程序開發(fā)人員、DBA和DBMS開發(fā)人員的分工是怎樣的?
708
2025-03-31
序言
如何保證數(shù)據(jù)并發(fā)訪問的一致性和有效性,是所有數(shù)據(jù)庫必須解決的一個問題。另外,鎖沖突也是影響數(shù)據(jù)庫并發(fā)性能的一個重要因素,應(yīng)用程序在選擇鎖類型時,需要根據(jù)實際運行的需要,選擇最佳的鎖類型
鎖類型
Myisam和Memory引擎使用的是表級鎖
innodb引擎使用的是行級鎖
BDB引擎使用的是頁級索
鎖解釋
行級鎖:他直接鎖住的是一條記錄,開銷大,加速慢,發(fā)生鎖沖突的概率較低,并發(fā)度很高。
頁級索:它鎖住的是一個頁面,在innodb中一個頁面為16kb,它的開銷介于表級鎖和行級鎖中間,也可能會出現(xiàn)死鎖,鎖定粒度也介于表級鎖和行級鎖中間,并發(fā)度也介于表級鎖和行級鎖中間
表級索:他直接鎖住的是一個表,開銷小,加鎖快,不會出現(xiàn)死鎖的情況,鎖定粒度大,發(fā)生鎖沖突的概率更高,并發(fā)度最低
innodb行級鎖
innodb有倆種類型的行級鎖,倆種內(nèi)部使用的意向鎖。
共享鎖(S):允許一個事務(wù)讀一行數(shù)據(jù)時,阻止其他的事務(wù)讀取相同數(shù)據(jù)的排他鎖。
排他鎖(X):允許獲得排他鎖的事務(wù)更新數(shù)據(jù),阻止其他事務(wù)取得相同數(shù)據(jù)的共享鎖和排他鎖。他鎖
意向共享鎖(IS):事務(wù)打算給數(shù)據(jù)行加行共享鎖。事務(wù)在給一個數(shù)據(jù)行加共享鎖前必須先取得該表的IS鎖。
意向排他鎖(IX):事務(wù)打算給數(shù)據(jù)行加行排他鎖。事務(wù)在給一個數(shù)據(jù)行加排他鎖前必須先取得該表的IX鎖。
悲觀鎖(抽象,不真實存在的鎖)
樂觀鎖(抽象,不真實存在的鎖)
共享鎖,只可以讀不可以寫
排它鎖,不可以讀也不可以寫
4種鎖的共存邏輯關(guān)系表
共享鎖的使用
共享鎖跟共享鎖
共享鎖跟排它鎖
死鎖情況
對于鎖的建議
收集死鎖信息:
利用命令 SHOW ENGINE INNODB STATUS查看死鎖原因。
調(diào)試階段開啟 innodb_print_all_deadlocks,收集所有死鎖日志。
減少死鎖:
使用事務(wù),不使用 lock tables 。
保證沒有長事務(wù)。
操作完之后立即提交事務(wù),特別是在交互式命令行中。
如果在用 (SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE),嘗試降低隔離級別。
修改多個表或者多個行的時候,將修改的順序保持一致。
創(chuàng)建索引,可以使創(chuàng)建的鎖更少。
最好不要用 (SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE)。
如果上述都無法解決問題,那么嘗試使用 lock tables t1, t2, t3 鎖多張表
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。