国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

數據庫事務和鎖(四)

2024-07-21 02:08:20
字體:
來源:轉載
供稿:網友

空間管理

    鎖是防止其他事務訪問指定的資源控制、實現并發控制的一種主要手段。為了提高系統的性能,加快事務的處理速度,縮短事務的等待時間,應該使鎖定的資源最小化。為了控制鎖定的資源,應該首先了解系統的空間管理。在sql server系統中,最小的空間管理單位是頁,一個頁有8k。所有的數據、日志、索引都存放在頁上。另外,使用頁有一個限制,這就是表中的一行數據必須在同一個頁上,不能跨頁。頁上面的空間管理單位是簇,一個簇是8個連續的頁。表和索引的最小占用單位是簇。數據庫是由一個或者多個表或者索引組成,即是由多個簇組成。sql server系統的空間管理結構示意圖如圖3所示。




圖3  sql server空間管理

可以鎖定的資源

為了優化系統的并發性,應該根據事務的大小和系統活動的程度,鎖定不同的資源。也就是說,既可以鎖定比較大的資源,也可以鎖定比較小的資源。在sql server系統中,已經比較完善地實現了這些要求。在sql server 7.0中,可以鎖定的資源有多種,這些可以鎖定的資源分別是行、頁、簇、表和數據庫,他們對應的鎖分別是行級鎖、頁級鎖、簇級鎖、表級鎖和數據庫級鎖。在如圖4所示的結構中,數據行存放在頁上,頁存放在簇上,一個表有若干個簇組成,而若干個表組成了數據庫。在這些可以鎖定的資源中,最基本的資源是行、頁和表,而簇和數據庫是特殊的可以鎖定的資源。




圖4  表、頁、行的結構圖

    行是可以鎖定的最小空間。在sql server 7.0中,實現了行級鎖。行級鎖就是指事務在操縱數據的過程中,鎖定一行或者若干行數據,其他事務不能同時處理這些行的數據。行級鎖占用的數據資源最少,所以在事務的處理過程中,允許其他事務繼續操縱同一個表或者同一個頁的其他數據,大大降低了其他事務等待處理的時間,提高了系統的并發性。頁級鎖是一種最優鎖,因為行級鎖不可能出現數據既被占用又沒有使用的浪費現象。在圖5中,橢圓形表示行級鎖占用的數據,而橢圓形之外的其他數據仍然可以由其他事務使用。行級鎖是sql server 7.0的重要特征,它的引入引起了數據存儲引擎的改變。




圖5  行級鎖

    頁級鎖是指在事務的操縱過程中,無論事務處理數據的多少,每一次都鎖定一頁,在這個頁上的數據不能被其他事務操縱。在sql server 7.0以前,使用的是頁級鎖。頁級鎖鎖定的資源比行級鎖鎖定的數據資源多。在頁級鎖中,即使是一個事務只操縱頁上的一行數據,那么該頁上的其他數據行也不能被其他事務使用。因此,當使用頁級鎖時,會出現數據的浪費現象,也就是說,在同一個頁上會出現數據被占用卻沒有使用的現象。在這種現象中,數據的浪費最多不超過一個頁上的數據行。在圖6中,圓形區表示一個頁級鎖,在這個圓形區內,只有一個事務可以可以使用圓形區中的數據,其他事務只能使用圓形區以外的數據。




圖6  頁級鎖

    簇級鎖是一種特殊類型的鎖,只能用在一些特殊的情況下。簇級鎖就是指事務占用一個簇,這個簇不能同時被其他事務占用。例如在創建數據庫和創建表時,系統分配物理空間時使用這種類型的鎖。系統是按照簇分配空間的。當系統分配空間時,使用簇級鎖,防止其他事務同時使用同一個簇。當系統完成分配空間之后,就不再使用這種類型的簇級鎖。特別是,當涉及到對數據操作的事務時,不使用簇級鎖。簇級鎖的結構如圖7所示。橢圓形區域表示簇級鎖占用的數據,其他事務只能使用該簇以外的其他簇。



圖7  簇級鎖

    表級鎖也是一個非常重要的鎖。表級鎖是指事務在操縱某一個表的數據時,鎖定了這個數據所在的整個表,其他事務不能訪問該表中的其他數據。當事務處理的數據量比較大時,一般使用表級鎖。表級鎖的特點是使用比較少的系統資源,但是卻占用比較多的數據資源。與行級鎖和頁級鎖相比,表級鎖占用的系統資源例如內存比較少,但是占用的數據資源卻是最大。在表級鎖時,有可能出現數據的大量浪費現象,因為表級鎖鎖定整個表,那么其他的事務都不能操縱表中的其他數據。這樣,會延長其他事務等待處理的時間,降低系統的并發性能。表級鎖的結構示意圖如圖8所示,橢圓形表示表級鎖。



圖8  表級鎖

    數據庫級鎖是指鎖定整個數據庫,防止任何用戶或者事務對鎖定的數據庫進行訪問。數據庫級鎖是一種非常特殊的鎖,它只是用于數據庫的恢復操作過程中。這種等級的鎖是一種最高等級的鎖,因為它控制整個數據庫的操作。只要對數據庫進行恢復操作,那么就需要設置數據庫為單用戶模式,這樣系統就能防止其他用戶對該數據庫進行各種操作。數據庫級鎖的結構示意圖如圖9所示。嚴格地說,數據庫級鎖不是一種鎖,而是一種類似鎖的一種單用戶模式機制。但是,這種單用戶模式機制非常類似鎖機制,因此也可以把這種單用戶模式稱為數據庫級鎖。




圖9  數據庫級鎖

鎖的類型和其兼容性

鎖定資源的方式有兩種基本形式,一種形式是讀操作要求的共享鎖,另一種形式是寫操作要求的排它鎖。除了這兩種基本類型的所,還有一些特殊情況的鎖,例如意圖鎖、修改鎖和模式鎖。在這些各種類型的鎖中,有些類型的鎖之間是可以兼容的,有些類型的鎖之間是不兼容的。

共享鎖允許并行事務讀取同一種資源,這時的事務不能修改訪問的數據。當使用共享鎖鎖定資源時,不允許修改數據的事務訪問數據。當讀取數據的事務讀完數據之后,立即釋放所占用的資源。一般地,當使用select語句訪問數據時,系統自動對所訪問的數據使用共享鎖鎖定。對于那些修改數據的事務,例如使用insert、update和delete語句,系統自動在所修改的事務上放置排它鎖。排它鎖就是在同一時間內只允許一個事務訪問一種資源,其他事務都不能在有排它鎖的資源上訪問。在有排它鎖的資源上,不能放置共享鎖,也就是說不允許可以產生共享鎖的事務訪問這些資源。只有當產生排它鎖的事務結束之后,排它鎖鎖定的資源才能被其他事務使用。

除了上面的基本鎖以外,根據不同的情況,sql server還可以使用一些其他類型的鎖。這些特殊類型的鎖包括意圖鎖、修改鎖和模式鎖。

系統使用意圖鎖來最小化鎖之間的沖突。意圖鎖建立一個鎖機制的分層結構,這種結構依據鎖定的資源范圍從低到高依次是行級鎖層、頁級鎖層和表級鎖層。意圖鎖表示系統希望在層次低的資源上獲得共享鎖或者排它鎖。例如,放置在表級上的意圖鎖表示一個事務可以在表中的頁或者行上放置共享鎖。在表級上設置共享鎖防止以后另外一個修改該表中頁的事務在包含了該頁的表上放置排它鎖。意圖鎖可以提高性能,這是因為系統只需要在表級上檢查意圖鎖,確定一個事務能否在哪個表上安全地獲取一個鎖,而不需要檢查表上的每一個行鎖或者頁鎖,確定一個事務是否可以鎖定整個表。意圖鎖有三種類型,即意圖共享鎖、意圖排它鎖和使用意圖排它的共享鎖。意圖共享鎖表示讀低層次資源的事務的意圖,把共享鎖放在這些單個的資源上。意圖排它鎖表示修改低層次的事務的意圖,把排它鎖放在這些單個資源上。意圖排它鎖包括意圖共享鎖,它是意圖共享鎖的超集。使用意圖排它的共享鎖表示允許并行讀取頂層資源的事務的意圖,并且修改一些低層次的資源,把意圖排它鎖放在這些單個資源上。例如,表上的一個使用意圖排它的共享鎖把共享鎖放在表上,允許并行讀取,并且把意圖排它鎖放在將要修改的頁上,把排它鎖放在修改的行上。每一個表一次只能有一個使用意圖排它的共享鎖因為表級共享鎖阻止對表的任何修改。使用意圖排它的共享鎖是共享鎖和意圖排它鎖的組合。

當系統將要修改一個頁時,使用修改鎖。在系統修改該頁之前,系統自動地把這個修改頁鎖上升到排它頁鎖,防止鎖之間發生沖突。當第一次讀取頁時,在修改操作的開始階段,獲得修改鎖。修改鎖與共享鎖是兼容的。如果該頁被修改了,那么修改鎖上升到排它鎖。

模式鎖保證當表或者索引被另外一個會話參考時,不能被刪除或者修改其結構模式。sql server系統提供了兩種類型的模式鎖:模式穩定鎖和模式修改鎖。模式穩定鎖確保鎖定的資源不能被刪除,模式修改鎖確保其他會話不能參考正在修改的資源。

有些鎖之間是兼容的,例如共享鎖和修改鎖之間。有些鎖之間是不兼容的,例如排它鎖和共享鎖之間。下面的表1列出了sql server系統提供的各種鎖之間的兼容性。

表1  sql server系統提供的各種鎖之間的兼容性

        鎖名稱

is

s

u

ix

six

x

意圖共享鎖(is)

兼容

兼容

兼容

兼容

兼容

不兼容

共享鎖(s)

兼容

兼容

兼容

不兼容

不兼容

不兼容

修改鎖(u)

兼容

兼容

不兼容

不兼容

不兼容

不兼容

意圖排它鎖(ix)

兼容

不兼容

不兼容

兼容

不兼容

不兼容

意圖排它的共享鎖(six)

兼容

不兼容

不兼容

不兼容

不兼容

不兼容

排它鎖(x)

不兼容

不兼容

不兼容

不兼容

不兼容

不兼容

另外,除了表1中列出的鎖之間的兼容性之外,對于模式鎖來說,模式修改鎖對于全部鎖都是不兼容的,而模式穩定鎖對于除了模式修改鎖之外的全部鎖都是兼容的。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临高县| 镇赉县| 徐水县| 普定县| 新乡县| 宜川县| 阳东县| 诏安县| 仁怀市| 顺义区| 六盘水市| 池州市| 广水市| 武平县| 六枝特区| 万宁市| 朝阳县| 山西省| 吉隆县| 上栗县| 涞水县| 漳平市| 九龙坡区| 濮阳市| 察雅县| 南皮县| 云梦县| 郁南县| 宁南县| 浦江县| 无为县| 丹巴县| 阳东县| 江都市| 广德县| 容城县| 临安市| 腾冲县| 石棉县| 铁力市| 长垣县|