SQL Server可以鎖定的資源類型
SQL Server可以鎖定不同類型的資源。這些可以被鎖定的資源類型包括:RIDs或鍵(keys)(行級別),頁(pages),對象(objects)(例如,表),數據庫(databases)和其他。行位于頁中,而也是包含表或索引數據的物理數據塊。你首先應該熟悉這些資源類型,到更高級的階段,你可能會要熟悉其他鎖定資源類型,像盤區(extents),分配單元(allocation units),堆(heaps)或B樹(B-trees)。
為了獲得一個特定資源類型的鎖,你的事務必需首先獲得更高粒度級別上的相同模式的意向鎖。例如,為了獲得一個行上的排它鎖,你的事務必需首先在行位于的頁上申請意向排它鎖和擁有頁的對象上的意向排它鎖。類似的,為了獲得一個特定粒度級別上的共享鎖,你的事務必需首先在更高粒度級別上申請一個意向共享鎖。意向鎖的目的是在更高的粒度級別上有效地檢測到不兼容鎖請求并阻止授予它們。例如,一個事務持有一個行鎖,而另一個事務在行位于的整個頁或表上請求一個不兼容的鎖模式,因為第一個事務在頁和表上獲得的意向鎖,對于SQL Server很容易識別沖突。意向鎖不會干擾行級別粒度上的鎖請求。例如,一個頁上的意向鎖不會阻止其它事務在該頁的行上獲得不兼容的鎖模式。
鎖兼容性表如下:
鐵東ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創新互聯建站的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
請求模式 | 授予了排它鎖(X) | 授予了共享鎖(S) | 授予了意向排它鎖(IX) | 授予了意向共享鎖(IS) |
是否授予排它鎖請求? | 否 | 否 | 否 | 否 |
是否授予共享鎖請求? | 否 | 是 | 否 | 是 |
是否授予意向排它鎖請求? | 否 | 否 | 是 | 是 |
是否授予意向共享鎖請求? | 否 | 是 | 是 | 是 |
SQL Server動態決定鎖定哪個資源類型。當然,對于理想的并發,最好只鎖定需要鎖定的資源,也就是只鎖定影響的行。然而,鎖定需要內存資源和內部管理開銷。因此,當SQL Server選擇鎖定哪個資源類型時,要同時考慮并發和系統資源。
SQL Server會首先申請細粒度的(fine-grained)鎖(像行或頁鎖),在一定情況下,嘗試升級細粒度的鎖到更粗粒度(coarse-grained)鎖(像表鎖)。例如,當一條語句獲得至少5000個鎖,然后對于每1250個新鎖,如果之前嘗試鎖升級不成功,那么鎖升級(lock escalation)被觸發。
在SQL Server 2008和SQL Server 2012,你可以通過使用ALTER TABLE語句設置一個表選項,來控制鎖升級的行為方式。如果你喜歡,也可以禁用鎖升級,或者決定在表級別(默認)或者分區級別發生鎖升級。(一個表可以被物理組織到多個更小的單元叫做分區。)
翻譯自
Itzik Ben-Gan
Microsoft SQL Server 2012 T-SQL Fundamentals
Page 302
Lockable Resource Types
文章題目:SQLServer可以鎖定的資源類型
標題鏈接:http://vcdvsql.cn/article42/gjjdec.html
成都網站建設公司_創新互聯,為您提供微信小程序、手機網站建設、App設計、網站維護、響應式網站、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯