簡單模擬死鎖
近來程式設計師用java多執行緒匯入資料經常遇到死鎖,下面簡單模擬死鎖的成因
update
SES1: update t set a=1 where id=1;
SES2: update t set a=2 where id=2;
SES1: update t set a=2 where id=2;(掛住,等待SES2提交或者回滾)
SES2: update t set a=1 where id=1;(掛住,等待SES1提交或者回滾,此時SES1和SES2互相等待,形成死鎖)
delete
SES1: delete from t where id=1;
SES2: delete from t where id=2;
SES1: delete from t where id=2;(掛住,等待SES2提交或者回滾)
SES2: delete from t where id=1;(掛住,等待SES1提交或者回滾,此時SES1和SES2互相等待,形成死鎖)
insert(insert引起死鎖一般是因為某些約束引起的,我們假設在t的id列有唯一性約束)
SES1: insert into t(id) values(1);
SES2: insert into t(id) values(2);
SES1: insert into t(id) values(2);(掛住,等待SES2提交或者回滾)
SES2: insert into t(id) values(1);(掛住,等待SES1提交或者回滾,此時SES1和SES2互相等待,形成死鎖)
以上都是模擬引起死鎖的最簡單的情況,實際中,引起死鎖的語句可能是由UPDATE、DELETE、INSERT混合而成。約束會增大UPDATE和INSERT引起死鎖的可能性,外建上沒有索引會增大所有DML引起是死鎖的可能性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63724/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 模擬SQLserver死鎖現象SQLServer
- 面試官:請用SQL模擬一個死鎖面試SQL
- 1046 Shortest Distance(簡單模擬)
- 簡單的模擬(洛谷)
- PostgreSQL模擬兩個update語句死鎖-利用掃描方法SQL
- 簡單介紹MySQL列印死鎖日誌的方法MySql
- springboot+redis分散式鎖-模擬搶單Spring BootRedis分散式
- ORA-00060: Deadlock detected 模擬死鎖產生與解決方案
- sort回撥的簡單模擬
- 模擬簡單的動態代理
- 簡單易用的前端模擬資料前端
- 簡單實現.NET Hook與事件模擬Hook事件
- POJ3087 Shuffle'm Up【簡單模擬】
- 死鎖
- PAT B1009 說反話(簡單模擬)
- 【Tomcat】Tomcat工作原理及簡單模擬實現Tomcat
- 什麼是死鎖?如何解決死鎖?
- H3C模擬器HCL簡單配置OSPF
- 利用Easy Mock簡單模擬開發資料介面Mock
- PAT-B 1012 數字分類【簡單模擬】
- 面試官:什麼是死鎖?怎麼排查死鎖?怎麼避免死鎖?面試
- 死鎖概述
- 作業系統(5) 死鎖的概念 死鎖產生的必要條件 死鎖的處理策略 預防死鎖 避免死鎖 死鎖的檢測和解除 銀行家演算法作業系統演算法
- 例項詳解 Java 死鎖與破解死鎖Java
- 檢視oracle死鎖程式並結束死鎖Oracle
- MySQL 死鎖和鎖等待MySql
- 死鎖和可重入鎖
- 面試:什麼是死鎖,如何避免或解決死鎖;MySQL中的死鎖現象,MySQL死鎖如何解決面試MySql
- 基於simulink的模擬鎖相環和數字鎖相環建模與對比模擬
- 使用 Raku 編寫簡單的文字識別模擬程式
- Proteus實現簡單51程式的設計與模擬
- SQL SERVER死鎖查詢,死鎖分析,解鎖,查詢佔用SQLServer
- 死鎖是什麼?如何預防和避免死鎖?
- MySQL死鎖系列-線上死鎖問題排查思路MySql
- 死鎖-舉例
- 併發:死鎖
- 遭遇ITL死鎖
- 死鎖案例分析