日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第7章 事务管理技术

發布時間:2024/3/13 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第7章 事务管理技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下圖片來自西安交通大學侯迪老師的ppt,僅供學習和復習使用,請勿轉載或他用

7.1 事務的概念

定義事務:

事務的ACID特性:

原子性A:要么都做,要么都不做

一致性C:只包含成功事務提交的結果,如果出現故障,那么一部分修改已經完成,而一部分未完成,處于不正確狀態

隔離性I:一個事務與其他并發事務隔離,不能互相干擾

持續性D:一個事務一旦提交,對數據庫中數據的修改時永久性的。

7.2 數據庫恢復技術

7.2.1 概述

7.2.2 故障的種類

  • 事務內部故障

  • 系統故障

  • 介質故障

  • 計算機病毒

  • 事務內部故障

  • 系統故障

  • 介質故障

  • 計算機病毒

  • 7.2.3 恢復的實現技術

    兩類:數據轉儲和日志文件

    (1)數據轉儲

    定期將數據庫復制到存儲介質上進行備份

    分類:靜態和動態,海量和增量

    靜態和動態的區別在于:

    靜態轉儲時數據庫不能做更新等操作,必須等靜態轉儲完成后才能對數據庫進行操作。

    而動態轉儲的時候是可以對數據庫進行操作的,但這樣保證不了一致性,因此需要配合日志記錄下轉儲過程中對數據庫的操作。

    海量和增量轉儲的區別在于:

    海量每次轉儲數據庫中所有的數據

    增量只是轉儲上次轉出后更新過的數據

    海量轉儲恢復起來方便,但數據庫大,事務處理頻繁時增量轉儲更有效

    (2)日志文件

    作用:

    • 進行事務故障恢復

    • 進行系統故障恢復

    • 協助后備副本進行介質故障恢復

    具體作用:

    • 事務故障恢復和系統故障恢復必須使用日志文件

      事務故障恢復需要undo已經修改磁盤中數據但未完成的事務

      系統故障恢復需要undo已經修改磁盤中數據但未完成的事務+redo已經提交但是還未修改磁盤數據的事務

    必須先寫日志文件的原因:如果先寫數據庫可能再數據庫寫的過程中發生故障,導致日志文件沒有登記上。

    7.2.4 恢復策略

    事務故障的恢復

    恢復步驟:

    系統故障的恢復

    恢復步驟:

    介質故障的恢復

    • 重裝數據庫

    • 重做已完成的事務

    7.2.5 具有檢查點的恢復技術

    恢復策略:

    從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,藉此找到最后一個檢查點記錄,然后根據將所有在建立該檢查點記錄時正在執行的事務加入一個active-list,將所有active-list中的事務都暫時放在undolist里,從檢查點開始正向掃描日志文件,若提交了則將其從undolist中移到redolist直到日志文件結束。

    最后對undolist里的undo,redolist里的redo。

    7.2.6 數據庫鏡像(解決介質故障)

    7.3 并發控制

    7.3.1 概述

    7.3.2 封鎖

    什么是封鎖?

    兩類鎖:

    • 排他鎖 X鎖

    • 共享鎖 S鎖

    事務T對數據對象A加X鎖后不能再加其他鎖,只能T對A進行讀寫

    加S鎖后還可以加S鎖,但不能加X鎖,S鎖只能讀

    鎖的相容矩陣:

    XS_
    XNNY
    SNYY
    _YYY

    7.3.3 封鎖協議

  • 一級封鎖協議

  • 修改數據之前必須加X鎖,直到事務結束釋放。

    可以防止丟失修改,并保證事務是可恢復的

    但是不可以防止不可重復讀和臟讀

    為什么不能防止臟讀:因為雖然A事務對數據加了X鎖,但是B事務仍舊可以通過select來讀取數據,因此若A事務回滾,則B會讀到臟數據

    不可重復讀類似。

  • 二級封鎖協議

  • 修改數據之前必須加X鎖,且讀數據前必須加S鎖讀完后即可釋放。

    可防止數據丟失以及讀臟數據

    但是依舊不能防止不可重復讀,因為讀完后即可釋放。假設A事務先讀一次然后釋放,這時候如果B事務加X鎖修改數據然后釋放,A再加S鎖讀就會讀不一樣的數據。

  • 三級封鎖協議

  • 修改數據之前必須加X鎖,且讀數據前必須加S鎖事務結束后才可釋放。

    可防止3個問題

    小結:

    7.3.4 活鎖和死鎖

    活鎖

    活鎖,即先請求的鎖一直沒有獲得,導致永遠等待:

    死鎖

    T1T2
    Lock R1? ? ?
    ?Lock R2
    ? ?? ?
    Lock R2?
    等待
    等待
    等待Lock R1
    等待等待
    等待等待
    ? ? ?

    死鎖的預防

  • 一次封鎖法,必須一次將所有需要的數據加鎖

    但是會降低系統并發度,且一開始不知道要哪些數據

  • 順序封鎖,對數據對象定一個封鎖順序,必須按這個順序進行封鎖

  • 事務卷回重執,利用時間戳

  • 兩種策略:

    年老的(先開始執行的事務)等待,重新執行

    年老的擊傷年輕的,使年輕的重新執行

    死鎖的診斷與解除

  • 超時法

  • 等待時間超過了時限

  • 等待圖法

  • 存在回路則有死鎖

    解除死鎖:

    7.3.5 并發調度的串行性

    可串行化:并發執行的結果與串行執行這些事務中的某種情況結果相同。

    沖突可串行化調度

    沖突:不同事務對一個數據的讀寫和寫寫操作,即除了兩個都讀

    下標表示哪個事務,由于操作的數據對象不一樣,所以可以交換。

    注意: 沖突可串行化是可串行化的充分條件,但不是必要。

    不是沖突可串行化,但是可能可串行化。

    7.3.6 兩段鎖協議

    即釋放一個鎖之后不再請求任何鎖

    是沖突可串行化的,因此是可串行化的。

    注意:

    兩段鎖協議保證可串行化,但是可能產生死鎖。

    7.3.7 封鎖粒度

    封鎖對象的大小:如頁(大)和元組(小)

    封鎖對象越大,則并發度越小,但系統開銷小

    封鎖對象小,則并發度高,但是開銷大

    多粒度封鎖

    顯式封鎖:直接對數據對象加鎖

    隱式封鎖:由于數據對象的某個父節點被加鎖而存在鎖

    檢查封鎖時,必須要檢查隱式封鎖,包括了所有父節點和子節點,如果有不相容鎖就不能加鎖。

    由于這樣檢查的太多了,所以引入一個意向鎖:

    意向鎖

    對任一結點加鎖需要對它的所有上層節點加意向鎖

    三種意向鎖:

    SIX表示要對某個節點進行讀操作,同時可能對其下層節點進行寫操作。

    意向鎖都是準備對子節點加鎖,而不是已經加了鎖。

    SIX是已經對數據對象加S鎖,同時可能對子節點加X鎖,而IS是可能對子節點加S鎖,因此相容。而IX是要對子節點加X鎖,由于已經有S鎖,所以不相容。

    IS和IX都是意向,因此任意兩個都是相容的。

    總結

    以上是生活随笔為你收集整理的第7章 事务管理技术的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。