1. 程式人生 > >第一節:並發與鎖

第一節:並發與鎖

流操作 一起 時間 其它 log 數據庫服務 數據庫服務器 讀寫操作 鎖機制

1 並發

多用戶數據庫管理系統的一個主要任務是對 並發(concurrency)進行控制,即對多個用戶同時訪問同一數據進行控制。當缺乏有效的並發控制時,修改數據的操作就不能保證正常,從而危害數據完整性。管理數據並發的方法是讓每個用戶輪流操作數據。而數據庫管理系統的目標就是減少每個用戶的等待時間,即讓用戶無需等待或使等待難以察覺。

為保證數據庫性能,Oracle 應用了不同類型的鎖和多版本數據完整性模型(multiversion consistency model)。這些特性都包含在事務(transaction)的概念裏。應用程序開發人員應該在設計事務時充分發揮其中的並發、完整性等特性。

1.1 讀一致性

Oracle 提供的讀完整性包含以下特性:

  • 保證在一個時間點上,用戶通過查詢語句得到的數據是一致的,且語句執行期間數據不會改變(語句級的讀完整性)
  • 保證數據庫中讀數據的用戶無需等待正在讀或寫相同數據的用戶
  • 保證數據庫中寫數據的用戶無需等待正在讀相同數據的用戶
  • 保證在並發事務中寫數據的用戶只需等待正在寫相同數據行的用戶

事務是 Oracle 實現讀完整性的關鍵。事務是一組 SQL 語句(這組語句或者被一起提交,或者都不被提交),事務的作用是:

  • 決定了為查詢用戶生成的保持讀完整性的視圖的起始點
  • 控制著被一個事務修改過的數據何時可以被數據庫中其它進行讀寫操作的事務看到

*只讀事務

默認情況下,Oracle 只保證語句級的讀完整性。由一個查詢返回的數據對同一時間點來說是一致的。但是在有些情況下,用戶可能需要事務級的讀完整性。也就是要使一個事務中的多個查詢對同一時間點來說都是一致的,這樣事務中的每個查詢都不會受到與之沖突的事務的幹擾。如果用戶需要對多個表做多個查詢,建議使用只讀事務。同理,方法(函數)級的事務控制策略至少應該支持只讀事務。

2 各種鎖機制

Oracle 也使用 鎖(lock)來控制對數據的並發訪問。當更新數據時,數據庫服務器鎖定被修改的數據直到此更新被提交。在這期間,任何用戶都不能修改被鎖定的數據。這保證了系統的數據完整性。

Oracle 鎖定數據的操作無需用戶幹預,能夠自動執行。當一個 SQL 執行時,Oracle 根據實際情況的需要,隱式地對數據加鎖。Oracle 的鎖管理器自動地在行級對表數據加鎖,因此對相同的數據競爭可以最小化。

2.1 共享鎖(S鎖)

若事務T對數據對象A加上S鎖,則事務T可以讀A但不能修改A,其他事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。

2.2 排他鎖(X鎖)

若事務T對數據對象A加上X鎖,事務T可以讀A也可以修改A,其他事務不能再對A加任何鎖,直到T釋放A上的鎖。

2.3 有關共享鎖和排他鎖的解釋

鎖機制的基本操作是事務T在操作數據對象A時,其他事務不能繼續對A操作,直到T完成。若允許其他事務對數據A可讀屬於共享鎖,不可讀屬於排他鎖。

擴展閱讀:

1.事務隔離級別

2.Spring事務傳播機制

第一節:並發與鎖