避免死鎖的建議

2021-08-04 11:51:26 字數 762 閱讀 1319

• 正確使用讀操作語句

經過之前文章介紹,我們知道一般的快照讀是不會給資料表任何鎖的。那麼這些快照讀操作也就不涉及到參與任何鎖等待的情況。那麼對於類似insert…select這樣需要做當前讀操作的語句(但又不是必須進行當前讀的操作),筆者的建議是盡可能避免使用它們,如果非要進行也最好放到資料庫操作的非高峰期進行(例如晚間)。

• 基於索引進行寫操作,避免基於表掃瞄(聚集索引掃瞄)進行寫操作

基於索引進行寫操作的目的是保證乙個寫操作性質的事務中,被鎖住的索引和需要請求的鎖定資源被控制在最小範圍內。而避免使用表鎖的原因是保證乙個寫操作性質的事務中,不會額外鎖住完全不需要的索引資源或者搶占完全不需要的索引資源。表鎖雖然不會直接導致死鎖,但是由於表鎖的工作方式,導致它成為死鎖原因的機率增大了。

• 避免索引失效

使用索引一定要注意索引欄位的型別,例如當字段是乙個varchar型別,賦值卻是乙個int型別,就會導致索引失效。如下所示:

explain select * from myuser where user_name = 1

+—-+————-+——-+——+—————+—–+——+————-+

| id | select_type | table | type | possible_keys | key | rows | extra |

+—-+————-+——-+——+—————+—–+——+————-+

| 1 | ****** | myuser| all | name_index | | 13 | using where |

死鎖的避免

什麼是死鎖,如何避免死鎖?執行緒a需要資源x,而執行緒b需要資源y,而雙方都掌握有對方所要的資源,這種情況稱為死鎖 deadlock 或死亡擁抱 the deadly embrace 在併發程式設計中,死鎖 deadlock 是一種十分常見的邏輯錯誤。通過採用正確的程式設計方式,死鎖的發生不難避免。...

死鎖以及避免死鎖

目錄 一 什麼是死鎖 二 產生死鎖的四個必要條件 三 避免死鎖的方法 是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。1.互斥 某種資源一次只允...

Java死鎖及死鎖的避免

鎖是個非常有用的工具,運用場景非常多,因為它使用起來非常簡單,而且易於理解。但同時它也會帶來一些困擾,那就是可能會引起死鎖,一旦產生死鎖,就會造成系統功能不可用。1.系統資源不足 2.進行執行推進的順序不合適 3.資源分配不當 如果系統資源充足,程序的資源請求都能得到滿足,死鎖出現的可能性就很低,否...