就是愛分享
交易在進行中,同一時間會有很多交易並行處理(Concurrency),也由於並行且交錯處理結果,有可能導致交易之間彼此影響的執行結果,所以採用交錯式排程的方式,並透過測試該排程是否符合可序列化的排程原則,讓該排程可以合理且具有等價序列排程的結果。在並行控制的技術,除了可以利用控制排程的「序列性」(Serializzbility)之外,還有另一種普遍被使用的鎖定協定(Lock Protocol)來達到排程的序列性,也就是達到並行控制的一種技術,其他還包括時戳(Timestamp)、多版本(Multiversion)和樂觀/悲觀(Optimistic/Pessimistic)之技術來達成並行控制之相關技術之探討。

首先要介紹何謂「鎖定協定」(Lock Protocol),一個基本鎖定協定(Lock Protocol)的操作至少有兩個,一個為「鎖定」(Lock),一個為「解除鎖定」(Unlock);例如,當一個交易要對資料項目X進行讀取或寫入操作之前,必須要使用「鎖定」操作(Lock Operation),如同將該資源鎖住後,此資源就僅會提供給這一個交易使用,其他交易的操作就不可以再同時使用該資料項目X,換言之,其他未取得此資源使用權的交易必須要「等待」,直到該資源被釋放;反之,在進行操作之後,可以將該資料項目X立即或延遲釋放讓其他交易可以順利取得該資源進行操作,此釋放動作即稱之為「解除鎖定」(Unlock),得以讓其他交易的操作能順利往下執行交易。

以類別而言,鎖定可以區分為「獨佔模式」和「分享模式」兩種類型,獨佔模式的鎖定有如「二元鎖定」(Binary Locks),分享模式則為「共享/互斥鎖定」(Shared/Exclusive Locks)或稱為「獨/寫鎖定」(Read/Write Locks)。鎖定與解除鎖定的時機,例如兩階段鎖定協定(Two-Phase Locking Protocol,2PL)。

所謂的「兩階段鎖定協定」,也就是在一個交易的進行中,不論任何的鎖定,包括讀取鎖定或寫入鎖定,都必須在第一個解除鎖定之前執行,即稱為遵循「兩階段鎖定協定」。也就是將所有的鎖定(Locks)和所有的解除鎖定(unlocks)完全分為兩階段,第一階段為鎖定階段,稱為「擴增階段」(Expanding Phase)或「成長階段」(Growing Phase),在此階段只能執行鎖定指令,不可有任何解除鎖定穿插其中;第二階段為解除鎖定階段,稱為「削滅階段」(Shrinking Phase),在此階段只能有解除鎖定指令,不可有任何的鎖定指令穿插其中。
0 Responses