數據庫事務相關知識總結

    從硬件資源的維度分析,數據庫性能出現瓶頸主要包括三方面內容:內存、磁盤和CPU。數據庫中的所有數據都存儲在磁盤中,當數據庫從磁盤中讀取或寫入數據庫頁面時,會消耗內存,當內存不夠時,數據將被分頁寫入磁盤,這對性能是很大的損失。同理,如果系統磁盤出現問題,讀寫磁盤的數據都會導致讀寫數據速度變慢。

    【併發性】是指多個線程在相同時間訪問或者更改共享數據。一般情況下,一個系統在互不干擾的情況下可以激活的併發用戶的進程數越多,說明系統的性能越強。

進行併發時,容易產生以下幾種情況的異常:

    【丟失更新】指兩個進程對同一個數據進行讀取操作,並且同時試圖對該數據值進行更新時,很容易導致更新初始值錯誤的現象。

    【髒讀】指對提交的數據進行讀取操作,一個進程對數據進行了修改,但是未提交,即沒有更新成功,但是另一個進程已經讀取到修改後的值並開始使用了。

    【不可重複讀】是指一個進程在同一個事務中對數據進行了兩次讀取操作,有可能兩次讀取結果不一致。

    【幻影】指一個處理插入和刪除一行數據的事務,在處理該事務時,該數據行被另一個事務讀取到了。

    事務是數據庫併發控制的基本單元,可以執行一個或多個動作。事務分爲顯式事務和隱式事務,顯式事務是指顯式地開始一個事務並顯式地提交或者回滾事務。而隱式事務是指自動提交事務,如果語句執行失敗,自動回滾或取消這個事務。

    事務必須滿足ACID特性。

              1【原子性】一個事務是一個整體,如果執行過程中有一個動作失敗,事務中之前所有的動作都必須回滾,回到之前沒執行的狀態。

              2【一致性】在一個用戶未提交他的事務前(比如更新一個字段),其他用戶 Select 出來的結果都一樣。

              3【隔離性】併發事務之間互相影響的程度,比如一個事務會不會讀取到另一個未提交的事務修改的數據。

                        事務的隔離級別從低到高有:

                        讀取未提交Read Uncommitted:最低的隔離級別,什麼都不需要做,一個事務可以讀到另一個事務未提交的結果。所有的併發事務問題都會發生。

                        讀取提交Read Committed:只有在事務提交後,其更新結果纔會被其他事務看見。可以解決髒讀問題。

                        可重複讀Repeated Read:在一個事務中,對於同一份數據的讀取結果總是相同的,無論是否有其他事務對這份數據進行操作,以及這個事務是否提交。可以解決髒讀、不可重複讀。

                        可串行化Serialization:事務串行化執行,隔離級別最高,犧牲了系統的併發性。可以解決併發事務的所有問題。

            4【持久性】事務提交後,對系統的影響是永久的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章