如何來避免鎖衝突

2022-05-08 09:39:08 字數 938 閱讀 5660

鎖衝突檢測

1、對於事務鎖,可以查詢相關檢視,查詢發現鎖衝突以及頂端阻塞者

2、對於表鎖,無法查詢阻塞者,無法確定阻塞關係,因此對於表鎖,很難定位故障

鎖相關的檢視

innodb_locks、

innodb_lock_waits

鎖相關的引數

行鎖超時引數:innodb_lock_wait_timeout

表鎖超時引數:lock_wait_timeout

innodb有乙個不好的地方,通過效能檢視只能檢視事務鎖以及鎖定關係,對於表鎖不能確定鎖定關係,因此對錶鎖不能進行阻塞者的查詢和處理,對於行鎖來說,可以查詢到阻塞者,然後找到阻塞者對應的執行緒id,

kill

掉對應的執行緒就可以釋放鎖,注意

innodb

主要通過三個檢視來處理鎖定關係,

innodb_locks

、innodb_trx

、innodb_lock_waits

三個檢視來聯合查詢鎖定關係

避免

1、通過使用

innodb table

,避免使用

myisam table

2、監控行鎖衝突

(事務鎖

),為應用人員提供行鎖衝突的資訊

(鎖衝突對應的

sql語句、鎖衝突對應的事務

id,然後通過

binlog

來查詢事務對應的

sql語句

),通過修改應用邏輯降低行鎖衝突

3、業務高峰期避免

ddl,對於

ddl操作一定要做好測試,對於鎖表時間進行準確評估

4、降低行鎖衝突的超時時間

5、監控大事務和長事務,將對應的

sql資訊提供給開發人員

6、提高

dml語句對應的執行效能,盡量走索引

雜湊表如何避免雜湊衝突

開放定址法 核心思想是,如果出現了雜湊衝突,我們就重新探測乙個空閒位置,將其插入。1 線性探測 我們就從當前位置開始,依次往後查詢,看是否有空閒位置,直到找到為止。還記得我們剛講的查詢操作嗎?在查詢的時候,一旦我們通過線性探測方法,找到乙個空閒位置,我們就可以認定雜湊表中不存在這個資料。但是,如果這...

git 避免衝突

日常工作流程如下 去自己的工作分支 git checkout work 工作提交工作分支的修改 git commit a 回到主分支 git checkout master 獲取遠端最新的修改,此時不會產生衝突 git pull 回到工作分支 git checkout work 用rebase合併主...

同步鎖以及如何避免死鎖?

同步 在高併發的情況下,為了防止資料出錯,乙個執行緒對於共享資源執行操作的時候,另外的執行緒要執行操作此共享資源需要等待前乙個執行緒釋放此共享資源,才能操作。同步監視器 共享資源。同步函式 synchronized修飾的方法,同步監視器為當前this物件。同步 塊 synchronized修飾的 塊...