1. 程式人生 > >sql server死鎖解決方案

sql server死鎖解決方案

問題場景:在客戶那碰到一個操作卡死的現象

問題解決:

1、如何掛鉤是死鎖問題:通過程式碼跟蹤,發現是指執行一個SQL語句超時,因此猜想可能是表鎖住了

2、如果確認是思索問題:通過SQL發現死鎖,以下是相關的SQL

 select request_session_id SPID,OBJECT_NAME(resource_associated_entity_id) TABLENAME from sys.dm_tran_locks where resource_type='OBJECT'

上面這個SQL是查詢當前資料庫中有哪些死鎖, SPID 為程序ID ,TABLENAME 為表名

PS:百度的時候有看到用SQL跟蹤器(SQL SERVER Profiler)可以跟蹤出死鎖

DBCC INPUTBUFFER(SPID)

根據程序ID找到對應的SQL,有了SQL就能確認程式碼位置了

3、解決方式:更改資料庫事務隔離級別

alter database ng0001 set read_committed_snapshot on with rollback immediate

4、總結:這次問題由於比較急加上是晚上加班,所以沒有具體檢視鎖的類別和原來資料庫的事務隔離級別,對SQL Server鎖和事務隔離級別這2個知識點還需要多加了解