事物屬性,以及鎖

2021-08-15 06:02:42 字數 1829 閱讀 9381

事物定義:訪問並可能更新資料庫的執行單元,有4個屬性,語句多事begin transaction  end transaction

1,事物的屬性

1.1 原子性:事物的所有操作要麼全部執行,要麼全部不執行,這個主要是通過日誌來實現,日誌中會記錄我們修改的事物識別符號,修改的資料項識別符號以及資料項的舊值和新值,只有將這些寫入了日誌後,資料庫才會進行事物執行,以確保出錯時候可以回滾

1.2 隔離性:多個使用者併發訪問資料庫的時候,隔離性保證了事物像序列一樣執行(當然這是理論上的)。資料庫可以設定隔離性的級別。級別越高,併發處理效能越差。隔離級別是通過併發控制機制來保證,主要用了鎖,下面會講到鎖

1.2.1 可序列化,隔離級別最高,顧明思議乙個事物執行某個資料庫期間另乙個事物不可以執行

1.2.2 可重複讀:只允許事物讀取另乙個事物已經提交的資料。而且乙個事物兩次讀取乙個資料項期間,不允許其他事物更新該資料。

1.2.3 已提交讀: 只允許事物讀取另乙個事物已提交的資料,但不要可重複讀,比如兩個事物讀取同乙個資料項期間,另乙個事物更新了該資料並提交

1.2.4 未提交讀: 允許讀取未提交資料。這是最低的隔離等級

以前所有的事物都不允許髒寫,乙個事物對乙個資料項進行寫操作,但是還沒有提交,不允許另乙個事物進行寫操作。

1.3 永續性:資料庫的改變對資料庫的影響必須是持久的

1.4 一致性:事物在對資料庫操作完後,資料庫的前後是要保持一致性的,這主要是對程式設計師的職責,而資料庫並不能提供

2 鎖確保隔離性的方法之一是要求對資料項以互斥的方法進行。

資料庫有時候不光是給單個資料項加鎖,某些情況下我要把多個資料項聚為一組,把他們作為乙個同步單元。比如事物t對某個資料庫進行操作,此時不能乙個個去給資料庫下面的每個資料項加鎖,最好資料庫可以提供一種機制,即對資料庫直接上鎖。資料庫為此提供了多粒度機制。多粒度可以概括為樹結構層次

樹中每個結點可以單獨加鎖,此時可以使用共享鎖,排它鎖。當事物對乙個結點加鎖,該事物也隱視的給這個結點的後代加同種型別的鎖,沒有必要給後代顯示加鎖。乙個事物ti給fa加鎖後,另乙個事物tj要對ra進行操作,但是此時ra並沒有顯示加鎖。另一種情況,事物tk要對db加鎖,可是此時ti卻對fa持有鎖了那怎麼辦,因為每次給某個資料項結點加鎖的時候,都要從根結點進行遍歷,在遍歷過程中可以給遍歷過的結點加上鎖,這時候引入了新的鎖,意向鎖型別,和之前的兩用鎖型別,一起組成了共享型意向鎖,排他型意向鎖,共享排它型意向鎖。這五種鎖一起組成了多粒度封鎖協議。當給某乙個結點加鎖的時候,就從根結點遍歷到此結點看有沒有不相容的鎖。

共享鎖和排它鎖是僅僅針對乙個資料項而言,其他三種鎖是在遍歷中給遍歷的結點載入不同的鎖的。

共享型意向鎖:在樹的較低層進行顯示封鎖,但是只能加共享鎖。

排他型意向鎖:在樹的較低層進行顯示封鎖,可以加排它鎖或共享鎖。比如在結點fb加這個鎖,那麼rb1可以是共享或者排它鎖

共享排它意向鎖:

舉例子假設事物t21讀檔案fa記錄ra2,那麼t21就要給資料庫,區域a1,檔案fa加is鎖,最後給ra2加s鎖

假設事物t22要修改fa記錄ra9,那麼t22需要給資料庫,區域a1以及檔案fa加ix鎖,最後給記錄ra9加x鎖

假設事物t23要讀取檔案fa所有記錄,那麼t23需要給資料庫和區域a1加is鎖,最後給fa加s鎖

假設事物t24要對整個資料庫進行讀取,那麼直接給資料庫加s鎖

事物要對乙個資料項加鎖。需要按照多粒度封鎖協議進行,這個協議裡面有一點是事物對某個結點q加鎖,必須對q的父節點具有某種相容鎖才行

TiDB事物隔離級別以及樂觀鎖模型介紹

tidb支援ansi sql 92標準中的 讀已提交 和 可重複讀 兩種事物隔離級別。對於 可重複讀 隔離級別,在tidb中叫做 snapshot isolation 快照隔離級別,簡稱si 這種隔離級別不會產生 幻像讀 但是會產生寫偏斜 write skew tidb預設的事物隔離級別是si,可以...

mysql XA 空事物鎖

今天開發過來和我說有乙個舊賬號總是登入不上,一直卡在登入介面不跳轉,後台程式那邊排查之後,反應說資料庫有鎖。查詢information schema庫下的innodb lock waits和innodb trx表,查詢到當時正在鎖定的事物 select from information schema...

Mysql 鎖和事物

1.共享鎖 讀鎖 讀鎖允許多個連線可以同一時刻併發的讀取同一資源,互不干擾 2.排他鎖 寫鎖 寫鎖會阻塞其他的寫鎖或讀鎖,保證同一時刻只有乙個連線可以寫入資料,同時防止其他使用者對這個資料的讀寫 3.鎖策略 保證了執行緒安全的同時獲取最大的效能之間的平衡策略,因為鎖的開銷是較為昂貴的 a.表鎖 my...