sql server死鎖解決方案
阿新 • • 發佈:2018-12-14
問題場景:在客戶那碰到一個操作卡死的現象
問題解決:
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個知識點還需要多加了解