併發一致性問題
封鎖隔離級別
事務:是指滿足acid
特性的一組操作。可以通過 commit 提交乙個事務,也可以使用 rollback 進行回滾。
在關係型資料庫中,乙個事物可以是一條sql語句,一組sql語句或 整個程式。
acid原則並不是一種平級關係:
mysql 預設採用的是自動提交方式(autocommit)。也就是說,如果不顯式使用start transaction
語句來開始乙個事務,那麼每個查詢操作都會被當做乙個事務並自動提交。
在併發環境下,事務的隔離性很難保證,因此會出現很多併發一致性問題。
產生併發一致性問題,主要原因是破壞了事務的隔離性,解決方法是通過併發控制
來保證隔離性。併發控制可以通過封鎖
來實現,但是封鎖操作需要使用者自己來控制,相當複雜。資料庫管理系統(dbms)提供了事務的隔離級別
,讓使用者以一種更輕鬆的方式處理併發一致性問題。
封鎖物件可以很大也可以很小,例如對整個資料庫加鎖、對某個屬性值加鎖。
封鎖物件的大小稱為封鎖粒度。
應該盡量只鎖定需要修改的那部分資料,而不是所有資源。
鎖定的資料量越少,發生鎖爭用的可能性就越小,系統的併發程度就越高。
但是,加鎖需要資源,鎖的各種操作,都會增加系統開銷。
因此,封鎖的粒度越大,系統中能夠被封鎖的物件就越少,併發度也就越小,但系統開銷也越小;封鎖的粒度越小,併發度越高,但開銷也就越大。
在選擇封鎖粒度時,需要在鎖開銷和併發程度之間做權衡。
讀寫鎖
共享鎖:記為s鎖,又稱為讀鎖。
封鎖協議指對 資料物件加鎖時,需要約定的一些規則:
兩段鎖協議
加鎖和解鎖分為兩個階段進行。
可序列化排程
是指,通過併發控制,使得併發執行的事務結果與某個序列執行的事務結果相同。
可序列性是並行排程正確性的唯一準則,兩段鎖協議就是為保證並行排程可序列性而提供的封鎖協議。
兩段鎖協議的內容:
**封鎖協議
一級封鎖協議:
事務t1要修改資料a時必需加x鎖,直到t結束才釋放鎖。
可以解決丟失修改問題
,因為不能有兩個事務同時修改乙個資料,這樣,事務的修改就不會被覆蓋。
二級封鎖協議:
在一級的基礎上,事務t2要求讀取資料a的時候,必須加s鎖,讀取完馬上釋放s鎖。
可以解決讀髒資料的問題
,因為如果乙個事務t1在對a資料進行修改,根據一級封鎖協議,會加x鎖,此時該事務t2就不能再加s鎖了,也就不會讀入資料。
**封鎖協議:
在二級的基礎上,要求讀取資料a的時候,必須加s鎖,知道事務結束了才釋放s鎖。
可以解決不可重複讀的問題
,因為讀a時,其他事務不能對其加x鎖,從而避免了在讀期間資料發生改變。
隔離級別從允許的併發***(讀髒資料,不可重複讀,幻影讀)的角度進行描述。
當多個事務同時進行時,通過設定隔離界別來處理讀髒資料、不可重複讀和幻影讀。
未提交讀 read uncommitted:將查詢的隔離級別指定為0
事務中的修改,即使沒有提交,對其他事務也是可見的。
讀髒資料:一事務對資料進行了增刪改,但未提交,有可能回滾,另一事務卻讀取了未提交的資料。
提交讀 read committed:將查詢的隔離級別指定為1
乙個事務只能讀取已經提交的事務所做的修改,也就是說,乙個事務所做的修改在提交之前對其它事務是不可見的。
避免了髒讀,但可以出現不可重複讀和幻影讀。
可重複讀 repeatable read:將查詢的隔離級別指定為2
保證在同一事務中多次讀取同一資料的結果是一樣的。
避免髒讀,不可重複讀,但會出現幻影讀。
可序列化讀 serializable:將查詢的隔離級別指定為3
強制事務序列執行,這樣多個事務互不干擾,不會出現併發一致性問題。該隔離級別需要加鎖實現,因為要使用加鎖機制保證同一時間只有乙個事務執行,也就是保證事務序列執行。
讀髒資料
不可重複讀
幻影讀未提交讀××
×提交讀√×
×可重複讀√√
×可序列化√√
√文章學習自cyc ❤
資料庫 資料庫系統原理
事務指的是滿足 acid 特性的一組操作,可以通過 commit 提交乙個事務,也可以使用 rollback 進行回滾。事務被視為不可分割的最小單元,事務的所有操作要麼全部提交成功,要麼全部失敗回滾。回滾可以用回滾日誌來實現,回滾日誌記錄著事務所執行的修改操作,在回滾時反向執行這些修改操作即可。資料...
資料庫系統 資料庫 資料庫管理系統 資料庫系統
繼續寫資料庫系統的文章,第二篇 資料庫 資料庫管理系統 資料庫系統。本文主要談談這三者之間的關係。下方,摘自老師的ppt,非原創。資料庫管理系統 從系統角度看資料庫管理系統 資料庫系統 資料庫指的是長期儲存在計算機內有組織的,大量的,相關聯的,可共享的資料集合。資料應當是有組織的,不應該是雜亂無章的...
資料庫原理 資料庫系統概述
資料庫 組織 儲存和管理資料的資料倉儲,這個倉庫是儲存在計算機儲存裝置上的。嚴格上講資料庫 是指長期儲存在計算機內的 有組織的 可共享的資料集合。資料庫中的資料按一定的資料模型組織 描述和儲存,具有較小的冗餘度 較高的資料獨立性和易擴充套件性,並為各種使用者共享。資料庫管理系統 是使用者和作業系統之...