锁分区提升并发,以及锁等待实例
碼字介紹
http://msdn.microsoft.com/en-us/library/ms187504(v=SQL.100).aspx
鎖分區(qū)技術(shù)對提高并發(fā)有一定幫助,但對對象操作又有了新的定義,需要DBA&開發(fā)人員在設(shè)計,維護應(yīng)用中做更細致的考量.
?
鎖分區(qū)提升并發(fā),以及鎖等待實例
?
--測試數(shù)據(jù)庫tempdb --創(chuàng)建測試表 create table testlkp ( id int )--step1 spid 64中執(zhí)行事務(wù)insert BEGIN TRAN ttt INSERT INTO testlkp VALUES(1)
說明:創(chuàng)建測試環(huán)境,第一步開啟事務(wù)執(zhí)行insert 成功
?
---隨意不相關(guān)session spid70中查看操作的數(shù)據(jù)庫上下文中查看鎖的情況select request_session_id,* from sys.dm_tran_locks where resource_database_id=DB_ID()order by request_mode說明:觀察鎖情況發(fā)現(xiàn)鎖中分區(qū)號15有對象級IX鎖
?
?
--step 2新開啟session spid 67 執(zhí)行sql 被阻塞ALTER TABLE testlkp ALTER COLUMN id smallint說明:由于無法獲得整體對象SCH-M鎖,等待
?
---隨意不相關(guān)session spid70中查看操作的數(shù)據(jù)庫上下文中查看鎖的情況select request_session_id,* from sys.dm_tran_locks where resource_database_id=DB_ID()order by request_mode說明:其他鎖分區(qū)(0-14)均獲得了SCH-M鎖,但由于15由于IX鎖無法獲得
?
--Step3 新開啟session 執(zhí)行事務(wù) 插入數(shù)據(jù) spid 71 被阻塞BEGIN TRAN ttt INSERT INTO testlkp VALUES(2) ---------blocked說明:開啟新session查詢被阻塞
---隨意不相關(guān)session spid70中查看操作的數(shù)據(jù)庫上下文中查看鎖的情況select request_session_id,* from sys.dm_tran_locks where resource_database_id=DB_ID()order by request_mode說明:insert需要申請表的IX鎖,但正好落在15這個分區(qū)上,所以等待
--Step4 新開啟session 執(zhí)行事務(wù) 插入數(shù)據(jù) spid 65 執(zhí)行成功!BEGIN TRAN ttt INSERT INTO testlkp VALUES(3)說明:開啟新的session insert 插入成功!
---隨意不相關(guān)session spid70中查看操作的數(shù)據(jù)庫上下文中查看鎖的情況select request_session_id,* from sys.dm_tran_locks where resource_database_id=DB_ID()order by request_mode
說明:新的session插入操作時在其他的鎖分區(qū)上(16)獲得IX鎖所以執(zhí)行成功!
?
思考:鎖分區(qū)技術(shù)的出現(xiàn)提高了并發(fā),但在做表級操作如果需所有分區(qū)鎖如SCH-M將有可能對此類操作造成更"長"等待
如索引維護操作(需SCH-M鎖),一旦有長時間事務(wù)甚至孤立事務(wù)占據(jù)著分區(qū)級的某個鎖,則可能一直陷入等待狀態(tài)造成阻塞從而影響全局.
在諸如此類操作或應(yīng)用設(shè)計中,大家需要全面仔細考量.
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/shanksgao/p/3140149.html
總結(jié)
以上是生活随笔為你收集整理的锁分区提升并发,以及锁等待实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好文转发《我现在是这样编程的》
- 下一篇: 对PostgreSQL的prepared