sqlserver大數批次update時死鎖的問題及解決方案
UPDATE recruit_allocate SET remark ='學生的學籍號與姓名不匹配',flag = 1
WHERE unitivecode IS NOT NULL AND len(unitivecode)>0
AND NOT EXISTS(SELECT 1 FROM student_info WHERE stuname = recruit_allocate.stuname AND unitivecode = recruit_allocate.unitivecode)
AND is_allocate = 0
AND section = 2
AND operateguid = '516E1637-7895-4020-A8FD-73353AD4B5B3'
AND rst_subject_id = '80EB6C0B-C506-4556-9A05-4C191970D7A5
我這種寫法不能併發
因為裡面有個exists子句
訪問的是張大表
併發以後死鎖,資料量非常大
student_info裡130萬條
recruit_allocate裡有10萬條
update上條件上都建立了索引,並且有主鍵.
解決辦法:
synchronized (this) {
getJdbcTemplate().update(sqlBuf.toString());
}
對每條類似的update語句,在執行時加上synchronized,就可以併發了,並且速度還挺快的。但是要保證每個update執行的速度比較快,至少在5s左右
事務不能太大,在保證邏輯執行正常的情況盡,儘量讓事務小一些, 同時在執行對同一張表的相同的update語句(只是條件中的值不同)時的時候,不能併發,對同一張表的,不同的update語句間是可以併發的,
還有種說法是:對同表的不同行併發操作是沒有問題的,對同一行併發是不行的
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/106285/viewspace-972490/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決Oracle死鎖問題步驟Oracle
- 解決庫存扣減及訂單建立時防止併發死鎖的問題
- 記憶體混亂及解決方法和死鎖問題記憶體
- 記一次 MySQL select for update 死鎖問題MySql
- Mysql使用kill命令解決死鎖問題MySql
- 快取三大問題及解決方案快取
- SQLServer 如何收集資料以排除 SQL 死鎖問題SQLServer
- 故障解析丨一次死鎖問題的解決
- 死鎖問題排查過程-間隙鎖的復現以及解決
- 快取世界中的三大問題及解決方案快取
- 手把手教你分析解決MySQL死鎖問題MySql
- mysql慢查詢,死鎖解決方案MySql
- SQLServer的死鎖分析(1):頁鎖SQLServer
- Python | 多執行緒死鎖問題的巧妙解決方法Python執行緒
- 跨域問題及解決方案跨域
- 快取過程存在的三大問題及解決方案快取
- 解決pod install update很慢的問題
- Mac OSX系統homebrew update Fetching failed問題解決方案MacAI
- Kafka常見的問題及解決方案Kafka
- 常見的死鎖情況及解決方法
- MySQL併發時經典常見的死鎖原因及解決方法MySql
- MySQL死鎖問題MySql
- WordPress:常見問題及解決方案
- mysql 高併發 select update 併發更新問題解決方案MySql
- JS中toFixed()方法的問題及解決方案JS
- MySQL 死鎖解決MySql
- MySQL解決死鎖MySql
- 使用 requests 2.11 版本時的 Site ID 型別問題及解決方案型別
- SqlServer鎖表解鎖解決辦法SQLServer
- MySQL insert on duplicate key update 死鎖MySql
- MySQL 死鎖問題分析MySql
- 快取常見問題及解決方案快取
- matplotlib中文報錯問題及解決方案
- MySQL死鎖系列-線上死鎖問題排查思路MySql
- 面試:什麼是死鎖,如何避免或解決死鎖;MySQL中的死鎖現象,MySQL死鎖如何解決面試MySql
- 多執行緒的安全問題及解決方案執行緒
- 遊戲陪玩原始碼的輪詢鎖,使用時遇到的問題與解決方案遊戲原始碼
- mysql同一個事務中update,insert導致死鎖問題分析解決MySql
- 模擬SQLserver死鎖現象SQLServer