sql server鎖表


TEST

項目運行過程提示了死鎖,一個select查詢和一個update的更新居然出現了死鎖,本身select會有共享鎖,update會有排它鎖,但是我的兩個語句目前應該不符合那種特殊情況(特殊情況會導致select和update死鎖)

於是做了實:

1)編寫一個一直運行的select

while 1=1
begin

select balance from bo_account_wallet where accountsubid=10046
end

2)查詢當前是否有鎖表的情況

select
request_session_id spid,

OBJECT_NAME(resource_associated_entity_id) tableName
from
sys.dm_tran_locks
where
resource_type='OBJECT'

此時並無鎖表,難道有錯??

於是用update做了確定:

同樣的操作:

1)編寫一個更新語句

while 1=1
begin
update bo_account_wallet set islock=1 where accountsubid=10046
end

2)查詢鎖表情況

select
request_session_id spid,

OBJECT_NAME(resource_associated_entity_id) tableName
from
sys.dm_tran_locks
where
resource_type='OBJECT'

 

此時會有鎖表的spid

3)查詢當前的鎖類型

EXEC sp_who active

exec sp_lock

 

說明這種實驗是可以驗證的;后來找到原因了,我的代碼中查詢是通過存儲過程的,所以將實驗修改為:

while 1=1
begin

exec EncryptAndDecrypt 'cetIBS20201012Pa$$word','
select balance from bo_account_wallet with(nolock) where accountsubid=10046'
end

 

此時看到鎖表信息了,這說明存儲過程會有加鎖的情況


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM