SQLServer锁升级
鎖升級(jí)是將眾多細(xì)粒度鎖轉(zhuǎn)換為較少的粗粒度的鎖的過(guò)程,以削減系統(tǒng)開銷。當(dāng)事務(wù)超過(guò)它的升級(jí)極限時(shí),Microsoft? SQL Server? 2000 自動(dòng)將行鎖和頁(yè)鎖升級(jí)為表鎖。
例如,當(dāng)事務(wù)從表中請(qǐng)求行時(shí),SQL Server 自動(dòng)獲取受影響的行上的鎖,并在包含這些行的頁(yè)和表或者索引上放置更高級(jí)別的意向鎖。當(dāng)事務(wù)控制的鎖數(shù)量超過(guò)了它的極限時(shí),SQL Server 會(huì)試圖將表上的意向鎖更改為更強(qiáng)的鎖(例如,將意向排它 (IX) 鎖更改為排它 (X) 鎖)。獲取更強(qiáng)的鎖后,表事務(wù)持有的所有頁(yè)級(jí)鎖和行級(jí)鎖都被釋放,從而削減鎖的開銷。
SQL Server 可以為同一查詢選擇行和頁(yè)鎖定,例如,在索引上放置頁(yè)鎖(如果在非聚集的索引節(jié)點(diǎn)中選定了足夠的鄰接鍵來(lái)滿足查詢)及在數(shù)據(jù)上放置行鎖。以減少必須進(jìn)行鎖升級(jí)的可能性。
鎖升級(jí)極限是由 SQL Server 動(dòng)態(tài)確定的,無(wú)須進(jìn)行配置。
SQL Server 可以動(dòng)態(tài)升級(jí)或降級(jí)鎖粒度或鎖類型。例如,如果更新獲取大量行鎖而阻塞了表的大部分,將行鎖升級(jí)到表鎖。如果獲取了表鎖,將釋放行鎖。SQL Server 2000 很少需要升級(jí)鎖;查詢優(yōu)化器在編譯執(zhí)行計(jì)劃時(shí)通常選擇正確的鎖粒度。
轉(zhuǎn)載于:https://www.cnblogs.com/seawwh/archive/2011/10/28/2227425.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的SQLServer锁升级的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python线程指南 ---转自
- 下一篇: 《那些年啊,那些事——一个程序员的奋斗史