Sqlserver分析死鎖問題
問題展現:
sqlserver2014死鎖
Web前端查詢報錯:
死鎖問題:
問題重現去抓死鎖:
資料庫開啟死鎖跟蹤和trace跟蹤來抓取死鎖指令碼和執行SQL:
dbcc traceon(1222,-1)
死鎖指令碼會記錄在errorlog裡面。
執行SQL可以透過trace跟蹤抓取到:
伺服器程式ID:67的SQL可以抓取到。但是伺服器程式ID:110的SQL未執行完,被犧牲掉了,抓取不到,只能在死鎖指令碼里面看到部分SQL。
查詢errorlog的指令碼:
sqlserver2014死鎖
Web前端查詢報錯:
死鎖問題:
問題重現去抓死鎖:
資料庫開啟死鎖跟蹤和trace跟蹤來抓取死鎖指令碼和執行SQL:
dbcc traceon(1222,-1)
死鎖指令碼會記錄在errorlog裡面。
執行SQL可以透過trace跟蹤抓取到:
伺服器程式ID:67的SQL可以抓取到。但是伺服器程式ID:110的SQL未執行完,被犧牲掉了,抓取不到,只能在死鎖指令碼里面看到部分SQL。
查詢errorlog的指令碼:
exec xp_readerrorlog 0
go
可以看到打紅叉的部分是被死鎖犧牲掉的process
這個死鎖主要是一個伺服器程式ID:67,一個是伺服器程式ID:110
伺服器程式ID:67是個insert事務,佔用IX鎖
伺服器程式ID:110是個select事務,要求S鎖
產生頁爭用,導致了頁鎖。最後選擇犧牲掉了伺服器程式ID:110
當前解決辦法,對伺服器程式ID:110這個select事務裡面的查詢SQL最後加with(nolock)
可以看到打紅叉的部分是被死鎖犧牲掉的process
這個死鎖主要是一個伺服器程式ID:67,一個是伺服器程式ID:110
伺服器程式ID:67是個insert事務,佔用IX鎖
伺服器程式ID:110是個select事務,要求S鎖
產生頁爭用,導致了頁鎖。最後選擇犧牲掉了伺服器程式ID:110
當前解決辦法,對伺服器程式ID:110這個select事務裡面的查詢SQL最後加with(nolock)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2148763/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQLserver 程式被死鎖問題解決SQLServer
- MySQL 死鎖問題分析MySql
- 線上死鎖問題分析
- SQLServer的死鎖分析(1):頁鎖SQLServer
- MySQL鎖等待與死鎖問題分析MySql
- SQLServer 如何收集資料以排除 SQL 死鎖問題SQLServer
- 這樣分析一個死鎖問題
- MySQL死鎖問題MySql
- MySQL死鎖系列-線上死鎖問題排查思路MySql
- sqlserver大數批次update時死鎖的問題及解決方案SQLServer
- 死鎖問題總結
- 手把手教你分析解決MySQL死鎖問題MySql
- 【sqlserver】殺掉所有死鎖程式SQLServer
- 模擬SQLserver死鎖現象SQLServer
- sql server死鎖的問題SQLServer
- 死鎖分析
- 從一個死鎖問題分析最佳化器特性
- Slave SQL執行緒與PXB FTWRL死鎖問題分析SQL執行緒
- 死鎖案例分析
- HashMap死鎖分析HashMap
- MySQL:一個死鎖分析 (未分析出來的死鎖)MySql
- 併發技術5:死鎖問題
- SpringBoot Seata 死鎖問題排查Spring Boot
- 解決Oracle死鎖問題步驟Oracle
- 一個MySQL死鎖問題的反思MySql
- 從trc查詢死鎖的問題
- Python | 淺談併發鎖與死鎖問題Python
- SQLServer記憶體問題分析SQLServer記憶體
- GreatSQL 死鎖案例分析SQL
- Oracle死鎖一例(ORA-00060),鎖表導致的業務死鎖問題Oracle
- 故障分析 | MySQL死鎖案例分析MySql
- Mysql使用kill命令解決死鎖問題MySql
- 線上併發事務死鎖問題排查
- 一個MySQL死鎖問題的復現MySql
- 併發插入引起的死鎖問題排查
- 通過 sysprocesses 解決Sql死鎖問題SQL
- Oracle觸發器死鎖問題解決Oracle觸發器
- 一個ORACLE死鎖問題的追蹤Oracle