自動鎖的概述

2021-07-24 19:02:53 字數 1515 閱讀 3718

oracle 資料庫會為事務自動鎖定資源,以防止其他事務進行某些需要獨佔訪問同一資源的操作資料庫在不同的限制級別自動獲取不同型別的鎖,這依賴於不同的資源和正在執行的操作

注意:

執行簡單讀取時,資料庫絕不會鎖定行。

oracle 資料庫鎖分為以下幾類。

dml鎖

dml 語句自動獲取下列型別的鎖:

 行鎖 (tx)

 表鎖 (tm)

在下面幾節,在每種型別的鎖或鎖模式後的括號中,首字母縮寫詞是用於在oracle 企業管理器 (企業管理器)的鎖監視器中的縮寫。企業管理器中可能將任何的表鎖顯示為tm,而不顯示表鎖的模式(如rs或srx)。

行鎖(tx)

行鎖,也稱為 tx鎖,是乙個表中單個行上的鎖。乙個事務在被insert、 update、delete、merge、或 select … for update等語句所修改的每一行上獲取乙個行鎖。行鎖一直存在直到事務提交或回滾

行鎖主要作為一種排隊的機制,以防止兩個事務修改相同的行。資料庫始終以獨佔模式鎖定修改的行,以便其他事務不能修改該行,直到持有鎖的事務提交或回滾。行鎖定提供了近乎最細粒度的鎖定,並因此提供了近乎最佳的併發性和吞吐量。

注意:

如果乙個事務因為資料庫例項失效而終止,會先進行塊級恢復以使行可用,之後進行整個事務恢復。

如果乙個事務在某行上獲取了乙個鎖,則該事務也將在包含該行的表上獲取乙個鎖。表鎖可防止衝突性的ddl 操作在當前事務中會覆蓋資料更改。圖 9-2 演示了在乙個表中第三行上的更新。oracle 資料庫將自動在更新行上置乙個獨佔鎖,且在表上置乙個次獨佔鎖。

行鎖和併發

表 9-6 說明了oracle資料庫如何在併發事務中使用行鎖。3個會話同時查詢相同的行。會話2 和會話 3 對不同的行進行未提交更新,而會話3沒有做任何更新。每個會話可以看到自己的未提交更新,但看不到其他會話中所做的任何未提交更新。

行鎖儲存

與某些資料庫使用鎖管理器在記憶體中維護乙個鎖列表不同,oracle資料庫將鎖資訊儲存在包含鎖定行的資料塊中。

資料庫使用排隊機制來獲取行鎖。如果事務需要為某個未鎖定的行獲取乙個鎖,則事務將在資料塊上置乙個鎖。被此事務修改的每個行指向儲存在塊頭中的事務 id 的乙個副本。

當事務結束時,事務 id 仍然保留在塊頭中。如果乙個不同的事務想要修改某行,則它使用該事務 id 來確定鎖是否處於活動狀態。如果鎖是活動的,則會話要求該鎖被釋放時得到通知。否則,事務獲取該鎖。

mysql spring鎖 MySQL鎖概述

鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。在資料庫中,除傳統的計算資源 如cpu ram i o等 的爭用以外,資料也是一種供許多使用者共享的資源。如何保證資料併發訪問的一致性 有效性是所有資料庫必須解決的乙個問題,鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。從這個角度來說,鎖對資料...

各種鎖概述

重量級鎖 程序或者執行緒想訪問某個資源,如果沒有執行緒訪問,則占有這個資源,且加上鎖,等用完之後再釋放掉鎖。如果這個資源被其他執行緒占有,就會堵塞,直到其他執行緒讓出該資源並喚醒該執行緒。自旋鎖 把執行緒從執行態轉為阻塞態,會儲存上下文,涉及到核心態到使用者態的轉換,非常浪費時間,被其他執行緒喚醒,...

理解mysql鎖(1)鎖的概述

相對其他資料庫而言,mysql的鎖機制比較簡單 其最顯著的特點是不同的儲存引擎支援不同的鎖機制 但總的來說,mysql各種儲存引擎使用了三種型別的鎖定機制 行級鎖定 頁級鎖定和表級鎖定 其中,myisam主要使用表級鎖定,而使用行級鎖定的主要是innodb。表級鎖 開銷小,加鎖快 不會出現死鎖 鎖定...