資料庫系統概論—恢復與併發

来源:https://www.cnblogs.com/wht-de-bk/archive/2023/07/08/17537766.html
-Advertisement-
Play Games

# 資料庫概論系統—系統篇 ## 一、關係查詢處理和查詢優化 ### 1.1關係資料庫的查詢處理 查詢處理可分為四個階段:查詢分析、檢查檢查、查詢優選和查詢執行(其中查詢優化可分為代數和物理優化) ### 1.2關係資料庫系統的查詢優化 查詢優化的優點不僅在於用戶不必考慮如何最好地表達查詢以獲得較高 ...


資料庫概論系統—系統篇

一、關係查詢處理和查詢優化

1.1關係資料庫的查詢處理

查詢處理可分為四個階段:查詢分析、檢查檢查、查詢優選和查詢執行(其中查詢優化可分為代數和物理優化)

1.2關係資料庫系統的查詢優化

查詢優化的優點不僅在於用戶不必考慮如何最好地表達查詢以獲得較高的效率,而且在於系統可以比用戶程式“優化”做的更好

會將建立原始樹,並能夠將其轉化為優化查詢樹

image

二、資料庫恢復技術

2.1事務

2.1.1事務的基本概念

事務:是用戶定義的一個資料庫操作序列,要不全做,要不全不做,是一個不可分割的工作單位(是資料庫恢復和併發控制的基本單位)

  • 一般來書,一個程式中包含多個事務(事務,程式兩個概念)

COMMIT:提交,即提交事務的所有操作

ROLLBACK:回滾,即撤銷該事務完成的操作,回滾到事務開始狀態

2.1.2事務的ACID準則

原子性,一致性(正確性),隔離性和持續性

2.2故障的種類(處理非預期的)

  • 事務內部的故障:此處專指非預期的故障
  • 系統故障:是指造成系統停止運行的任何事件,使得系統要重新啟動,不破壞數據數。故障時,正在進行的事務會撤銷,已完成的在緩存區的事務要重做
  • 介質故障:又叫做硬故障,破壞最大
  • 電腦病毒

2.3恢復的實現技術

資料庫恢復的原理十分簡單:建立冗餘—數據轉儲和建立日誌文件

2.3.1數據轉儲

  • 靜態轉儲:系統停止事務進行轉儲。期間不能操作資料庫
  • 動態轉儲:轉儲和事務併發操作。但是數據會過時,一般的情況一個完整的副本 = 轉儲 + 日誌文件
  • 還有海量和增量轉儲

2.3.2日誌文件

  • 登記的次序嚴格按照併發事務執行的時間次序

  • 先寫日誌文件,再寫資料庫

    2.4恢復策略

  • 事務故障恢復:利用日誌文件撤銷。反向掃描,進行逆操作,知道讀到事務的開始標記

  • 系統故障恢復:先站隊列,正向掃描日誌,有開始和提交->重做;只有開始->撤銷;有開始和回滾->什麼也不去。再對撤銷隊列中的事務進行撤銷操作(見上)

  • 介質故障恢復:重裝資料庫然後重做已完成的事務(管理員接入)

2.5具有檢查點的恢復技術

再日誌文件中加入新記錄—檢查點記錄,增加一個重新開始文件。讓恢復子系統在登錄日誌文件期間動態維護日誌。

  • 建立檢查點時刻所有正在執行的事務清單
  • 這些事務最近一個日誌記錄的地址(正在進行中開始最早的)

image

2.6資料庫鏡像

處理介質故障,是提高資料庫可用性的解決方案,提高併發性的辦法

正常運行時,主盤自動複製到副盤;發生故障後副盤晉升為主盤並自動複製到新的副盤上。

三、併發控制

事務是併發控制的基本單位

3.1併發的概述

併發控制的目的是為了保證事務的隔離性和一致性

併發操作有可能會帶來丟失修改,不可重覆讀,讀"臟數據"的問題

image

針對上述的問題採取了各種方法

3.2封鎖

事務T對某個數據對象操作前,像系統發出申請,對其加鎖,加鎖後事務會對數據有一定的控制

  • 排他鎖、寫鎖、X鎖:只允許讀取和修改,其他事務不能對其加任何鎖,直到釋放
  • 共用鎖、讀鎖、S鎖:可以讀但不能修改,其他事務可以對其加S鎖

3.3封鎖協議

  • 一級封鎖:事務T修改前+X鎖,直到事務結束才釋放
  • 二級封鎖:在一級的基礎上,事務T讀前+S鎖,讀完釋放
  • 三級封鎖:在一級的基礎上,事務T讀前+S鎖,直到事務結束才釋放

image

不同級別的封鎖可解決不同的問題

image

3.4活鎖和死鎖

3.4.1活鎖

事務有了優先順序,會插隊 =>先來先服務

3.4.2死鎖

事務之間形成閉環

  • 死鎖的預防

一次封鎖法:一次將所有使用數據全部枷鎖

順序封鎖法:預先對數據對象排序

  • 死鎖的診斷與解除

超時法:規定等待時間,若超過等待時間,則認為是死鎖

等待圖法:選擇代價最小的一個事務撤銷

3.5併發調度的可串列性(瞭解)

3.5.1可串列化調度

多個事務併發是正確的<=>其結果與某一次串列執行的結果相同,即為可串列化調度

3.5.2衝突可串列化調度

衝突可串列化調度是可串列化的充分條件

只有對同一個數據的讀寫和寫寫會產生

  • 已知調度,判斷是否衝突

1.畫有向圖(T,E) T:為事務個數;E:若Ri/Wi/Wi(x)在Wi/Ri/Wi(X)前則TIi—Tj

2.若有迴路,則不是衝突可串列化調度;反之是

3.若為衝突可串列化調度,找一個入度為0的事務將其以及和其相連的邊刪去,再找一個入度為0的事務...重覆

4.最後按照原調度順逆順序對每個事務內部進行排序

3.6兩段鎖協議

事務分成兩個階段對數據項進行加鎖和解鎖

  • 獲得封鎖(擴展階段):事務申請獲得任何數據項上任何類型的鎖
  • 釋放封鎖(收縮階段):事務釋放任何數據項上任何類型的鎖

:遵循兩段鎖是可串列的充分條件。遵循兩段鎖也可能出現死鎖

3.7封鎖的粒度

封鎖粒度,即封鎖對象的大小(邏輯單元,資料庫,元組...)

  • 封鎖粒度越大,資料庫能封鎖的數據單元越,併發度就越,開銷
  • 封鎖粒度越小,資料庫能封鎖的數據單元越,併發度就越,開銷

3.7.1多粒度封鎖

多粒度封鎖允許每個結點被獨立地i加鎖。多粒度封鎖中的鎖有向下繼承關係

image

檢查一個數據是否可以加鎖:先檢查自己,再看上下級的數據結點

3.7.2意向鎖

如果對一個結點加意向鎖,則說明該鎖下層正在被加鎖;對任一結點加鎖,其上層結點都要加意向鎖。可以提高檢查效率

三種意向鎖

  • 意向共用鎖(IS鎖):若對結點+S鎖,則上層結點+IS鎖
  • 意向排他鎖(IX鎖):若對結點+X鎖,則上層結點+IX鎖
  • 意向共用排他鎖(SIX鎖):若對結點+SIX鎖,則它對同一個下結點+S和X鎖(對同一個數據又讀又修改,不排他)![1685974462931]image

註意:是否排他是對不同的事務來說


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 特性 跨平臺 Web API和MVC技術的統一 原生依賴的註入支持 更強的測試性 輕量、高性能的模塊 開源、有社區的支持 項目入口--Main Asp.Net Core應用程式最初作為控制台應用程式啟動,而Program.cs文件中的Main()方法就是入口 CreateHostBuilder()方 ...
  • ## 一:背景 ### 1. 講故事 很多朋友可能會有疑問,C# 是一門托管語言,怎麼可能會有非托管句柄泄露呢? 其實一旦 C# 程式與 C++ 語言交互之後,往往就會被後者拖入非托管泥潭,讓我們這些調試者被迫探究 `非托管領域問題`。 ## 二:非托管句柄泄露 ### 1. 測試案例 為了方便講述 ...
  • # Unity UGUI的所有組件的介紹及使用 本文將介紹Unity UGUI中的各個組件,包括它們的具體介紹、用途 ## 1. Text(文本) - 介紹:Text組件用於在UI界面上顯示文本內容。 - 用途:常用於顯示UI界面的標題、按鈕標簽、提示信息等。 ## 2. Image(圖片) - 介 ...
  • # Unity AssetPostprocessor中Model相關函數的實際應用 Unity AssetPostprocessor是Unity引擎中的一個重要功能,它可以在導入資源時自動一些腳本,以便對資源進行自定義處理。其中,Model相關的函數可以用於對導入的3D模型進行處理,包括修改模型的材 ...
  • 國產系統大勢所趨,如果你公司的winform界面軟體需要在linux上運行,如果軟體是用C#開發的,現在我有一個好的快速解決方案。 世界第一的微軟的Microsoft Visual Studio,確實好用,C# 開發起來確實效率高,不過微軟的開發語言開發的軟體的界面都是跟windows系統綁定的,現 ...
  • 2013年7月1日,痞子衡應屆畢業正式入職飛思卡爾半導體上海 Site,至今已經十年零七天。 上周六是整十年的日子,當時並沒有特別的感覺,但是過去的一周總有種情愫在醞釀,終於今天還是決定花點時間回憶下過去的十年,梳理下那些值得紀念的時刻。 ### Offer抉擇 時間撥回到 2012 年的秋天,痞子 ...
  • 一、影響 Linux 性能的各種因素 1、系統硬體資源 (1)CPU 如何判斷多核 CPU 與超線程 消耗 CPU 的業務:動態 web 服務、mail 服務 (2)記憶體 物理記憶體與 swap 的取捨 選擇 64 位 Linux 操作系統 消耗記憶體的業務:記憶體資料庫(redis/hbase/mong ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230706135746797-1984903730.png) # 1. 複製數據到另一個表 ## 1.1. sql ```sql insert into dept_east ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...