一文搞懂oracle事務提交以及臟數據落盤的原則

本文基于oracle 19c 做事務提交以及oracle臟數據落盤的相關解讀

第一章 相關進程及組件介紹:

1.LGWR:

重做日志條目在系統全局區域 (SGA) 的重做日志緩沖區中生成。LGWR 按順序將重做日志條目寫入重做日志文件。如果數據庫具有多重做日志,則 LGWR 會將重做日志條目寫入一組重做日志文件。

2.DBWn:

數據庫寫入器進程 (DBW)?將數據庫緩沖區的內容寫入數據文件。DBW 進程將數據庫緩沖區緩存中修改的緩沖區寫入磁盤。

盡管一個數據庫寫入器進程 (DBW0) 對于大多數系統來說已經足夠了,但您可以配置其他進程(DBW1 到 DBW9、DBWa 到 DBWz 以及 BW36 到 BW99),以便在系統大量修改數據時提高寫入性能。這些額外的 DBW 進程在單處理器系統上沒有用。

3.CKPT:

在特定時間,CKPT 通過向 DBWn?發送消息來啟動檢查點請求,以開始寫入臟緩沖區。在完成單個檢查點請求后,CKPT 會更新數據文件頭和控制文件以記錄最近的檢查點。

CKPT 每 3 秒檢查一次,查看內存量是否超過初始化參數的值,如果是,則執行“PGA_AGGREGATE_LIMIT”中描述的操作。

4 buffer cache:

數據庫緩沖區高速緩存(也稱為緩沖區高速緩存)是存儲從數據文件中讀取的數據塊副本的內存區域。

緩沖區是一個主內存地址,緩沖區管理器在其中臨時緩存當前或最近使用的數據塊。并發連接到數據庫實例的所有用戶共享對緩沖區緩存的訪問權限。

數據庫緩沖區緩存的用途

Oracle 數據庫使用緩沖區緩存來實現多個目標。

目標包括:

  • 優化物理 I/O

    數據庫更新緩存中的數據塊,并將有關更改的元數據存儲在重做日志緩沖區中。之后,數據庫將重做緩沖區寫入聯機重做日志,但不會立即將數據塊寫入數據文件。相反,數據庫寫入器 (DBW)?在后臺執行延遲寫入。COMMIT

  • 將經常訪問的塊保存在緩沖區緩存中,并將不經常訪問的塊寫入磁盤

    啟用數據庫智能閃存緩存(閃存緩存)后,部分緩沖區緩存可以駐留在閃存緩存中。此緩沖區緩存擴展存儲在一個或多個閃存設備上,這些設備是使用閃存的固態存儲設備。數據庫可以通過在閃存中緩存緩沖區而不是從磁盤讀取來提高性能。

    使用 和 初始化參數配置多個閃存設備。緩沖區緩存跟蹤每個設備,并將緩沖區均勻地分配給設備。DB_FLASH_CACHE_FILEDB_FLASH_CACHE_SIZE

緩沖區狀態

翻譯出來就是:

  • 閑置

    緩沖區可供使用,因為它從未使用過或當前未使用過。這種類型的緩沖區是數據庫最容易使用的。

  • 干凈

    此緩沖區以前使用過,現在包含截至某個時間點的塊的讀取一致性版本。該塊包含數據,但“干凈”,因此不需要檢查點。數據庫可以固定塊并重用它。

  • 緩沖區包含尚未寫入磁盤的已修改數據。數據庫在重用塊之前必須對塊進行檢查點。

第二章 事務提交

當事務提交時,將發生以下操作:

  • 數據庫為 .COMMIT

    關聯撤消表空間的內部事務表記錄了事務已提交的記錄。事務的對應唯一SCN被分配并記錄在事務表中。

  • 日志寫入器進程 (LGWR)?進程將重做日志緩沖區中剩余的重做日志條目寫入聯機重做日志,并將事務 SCN 寫入聯機重做日志。此原子事件構成事務的提交。

  • Oracle 數據庫釋放了對行和表的鎖。

    在未提交事務持有的鎖上排隊等待的用戶可以繼續他們的工作。

  • Oracle 數據庫刪除保存點。

    在表 10-1?中,事務中不存在任何保存點,因此不會擦除任何保存點。sal_update

  • Oracle 數據庫執行提交清理。

第三章:redo從緩沖區記錄到日志文件

在以下情況下,LGWR 會寫入自上次寫入以來已復制到緩沖區中的所有重做條目:

  • 用戶提交事務。

  • 發生聯機重做日志切換。

  • 自 LGWR 上次寫信以來已經過去了三秒鐘。

  • 重做日志緩沖區已滿三分之一或包含 1 MB 的緩沖數據。

  • DBW 必須將修改后的緩沖區寫入磁盤。

    在 DBW 可以寫入臟緩沖區之前,數據庫必須將與緩沖區更改關聯的重做記錄(預寫協議)寫入磁盤。如果 DBW 發現某些重做記錄尚未寫入,它會向 LGWR 發出信號,將記錄寫入磁盤,并等待 LGWR 完成,然后再將數據緩沖區寫入磁盤。

第四章 臟數據落盤:

臟數據落盤主要由DBWn進程來完成,我們來看下官網的解釋:

Process Architecture (oracle.com)

在以下情況下,DBW 進程將臟緩沖區寫入磁盤:

1.描緩沖區數的閾值數后找不到干凈的緩沖區

當服務器進程在掃描緩沖區數的閾值數后找不到干凈的可重用緩沖區時,它會向 DBW 發出寫入信號。如果可能,DBW 在執行其他處理時將臟緩沖區異步寫入磁盤。

這種情況下由參數_db_block_max_scan_pct決定。_db_block_max_scan_pct表示已經掃描的buffer header的個數占整個LRU鏈表上buffer header總數的百分比。

當進程在輔助LRU鏈表和主LRU鏈表上掃描以查找可以覆蓋的buffer header(空閑緩沖區)時,如果已經掃描的buffer header的數量達到一定的限度(由隱藏參數:_db_block_max_scan_pct決定)時,觸發DBWR進程。

如果主LRUW鏈表和輔助LRUW鏈表上的臟數據塊的總數超過一定限度,也將觸發DBWR進程。該限度由隱藏參數:_db_large_dirty_queue決定。

查詢隱含參數的方法:

-- xxx是你想查找的參數名
SELECT   ksppinm, ksppstvl, ksppdesc  FROM   x$ksppi x, x$ksppcv y WHERE   x.indx = y.indx AND  ksppinm like  '%xxxx%';

2.定期啟動

DBW 會定期寫入緩沖區以推進檢查點,檢查點是重做線程中實例恢復開始的位置。檢查點的日志位置由緩沖區緩存中最早的臟緩沖區確定。

在許多情況下,DBW 寫入的塊分散在整個磁盤中。因此,寫入往往比 LGWR 執行的順序寫入慢。DBW 盡可能執行多塊寫入以提高效率。多塊寫入中寫入的塊數因操作系統而異。

這個定期啟動在ckpt解釋中可以找到,每三秒執行一次,檢查點會觸發DBWn進程。

3.其他(這些是在網上搜集的具體沒有驗證)

(1)將表空間設置為離線(offline)狀態時觸發DBWR。

(2)發出命令:alter tablespace … begin backup,從而將表空間設置為熱備份狀態時觸發DBWR。

(3)將表空間設置為只讀狀態時,觸發DBWR。

(4)刪除對象時(比如刪除某個表)會觸發DBWR。

參考:Oracle DBWR,LGWR,CKPT,ARCH 觸發條件 - 墨天輪 (modb.pro)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17921.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17921.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MySQL精通之路】MySQL的使用(3)-命令行連接

本節介紹使用命令行選項來指定如何為MySQL或mysqldump等客戶端建立到MySQL服務器的連接。 有關使用類似URI的連接字符串或鍵值對建立連接的信息,對于MySQL Shell等客戶端,請參閱“使用類似URI字符串或鍵值配對連接到服務器”。 有關無法連接的其他信息&a…

期望薪資26K,北京瘋狂游戲golang一面

北京瘋狂游戲一面 1、自我介紹 2、財務業務中,你做了哪些設計來保證金額數據的準確性?(例如,業務涉及多步驟,某一步出了問題怎么解決) 3、如何解決單個業務直接報錯的數據準確性問題 4、分布式場景下&a…

理解Vue 3響應式系統原理

title: 理解Vue 3響應式系統原理 date: 2024/5/28 15:44:47 updated: 2024/5/28 15:44:47 categories: 前端開發 tags: Vue3.xTypeScriptSFC優化Composition-APIRef&Reactive性能提升響應式原理 第一章:Vue 3簡介 1.1 Vue 3概述 Vue 3的誕生背景&#xff1…

怎么把電腦上的文件傳到手機上?可保存文檔的云筆記

在職場中,我們經常需要將電腦上的重要文件、資料傳到手機上,以便隨時查閱和使用。比如,當你在公司完成了一份關鍵報告,但即將外出與客戶溝通,這時如果能將報告傳到手機上,就能在移動中隨時準備應對客戶的咨…

uniapp Androud 離線打包升級APK,覆蓋安裝不更新問題

Android 打包時在assets/data/dcloud_control.xml文件中&#xff0c;如果配置debug"true" syncDebug"true"&#xff0c;則consle打印有效&#xff0c;不然沒有打印數據 <hbuilder debug"true" syncDebug"true"> <apps> …

破解App渠道歸因難題,Xinstall助你實現精準數據追蹤!

在移動互聯網時代&#xff0c;App的推廣和運營面臨著諸多挑戰。其中&#xff0c;渠道歸因問題一直困擾著眾多推廣者。如何準確追蹤用戶來源&#xff0c;分析不同渠道的推廣效果&#xff0c;成為了擺在推廣者面前的一大難題。然而&#xff0c;有了Xinstall的出現&#xff0c;這一…

C++網絡編程——實現一個簡單的echo服務器

在前面講完了服務器從建立套接字、綁定、監聽和提取&#xff0c;以及客戶端的連接&#xff0c;我們已經可以動手實現一個簡單的鏡像服務器。 錯誤處理 在那之前&#xff0c;我們先封裝一個錯誤處理函數 errif 可以定義一個uitl.cpp放里面&#xff0c;需要的地方引用即可 ut…

藍橋杯Web開發【大學組:國賽】2022年真題

1.分一分 如果給你一個數組&#xff0c;你能很快將它分割成指定長度的若干份嗎&#xff1f; 1.1 題目問題 請在 js/index.js 文件中補全函數 splitArray 中的代碼&#xff0c;最終返回按指定長度分割的數組。 具體要求如下&#xff1a; 將待分割的&#xff08;一維&#x…

云WAF如何適應動態變化的網絡安全威脅

云WAF&#xff08;Web Application Firewall&#xff09;是一種專門用于保護Web應用程序的安全系統&#xff0c;它能夠實時監測并分析網絡流量&#xff0c;一旦發現潛在攻擊行為立即進行阻斷&#xff0c;有效防止各類Web應用層攻擊。云WAF的適應性主要體現在以下幾個方面&#…

【Docker故障處理篇】運行容器報錯“docker: failed to register layer...file exists.”解決方法

【Docker故障處理篇】運行容器報錯“docker: failed to register layer...file exists.” 一、Docker環境介紹2.1 本次環境介紹2.2 本次實踐介紹二、故障現象2.1 運行容器消失2.2 重新運行容器報錯三、故障分析四、故障處理4.1 停止 Docker 服務:4.2 備份重要數據4.3 清理沖突…

從了解到掌握 Spark 計算框架(一)Spark 簡介與基礎概念

文章目錄 什么是 Spark&#xff1f;核心特點 Spark 對比 MapReduceSpark 編程模型RDDDataFrameDataset Spark 運行模式Spark 生態 什么是 Spark&#xff1f; Spark 是一個基于內存的分布式計算框架&#xff0c;最初由加州大學伯克利分校的 AMPLab 開發&#xff0c;后來捐贈給了…

go語言基準測試Benchmark 最佳實踐-冒泡排序和快速排序算法基準測試時間復雜度對比

在go語言中Benchmark基準測試( 在后綴為_test.go的文件中&#xff0c;函數原型為 func BenchmarkXxx(b *testing.B) {}的函數 )可以用來幫助我們發現代碼的性能和瓶頸&#xff0c; 其最佳實踐 應該是我們最常用的 冒泡排序和快速排序的測試了&#xff0c;廢話不說&#xff0c;直…

【MySQL精通之路】InnoDB(9)-表和頁壓縮(2)-頁壓縮

目錄 1.支持的平臺 2.頁面壓縮的工作原理 3.啟用頁面壓縮 4.禁用頁面壓縮 5.頁面壓縮-元數據 6.使用頁面壓縮識別表 7.頁面壓縮限制和使用說明 InnoDB支持對駐留在FPT表空間中的表進行頁面級壓縮。 此功能被稱為透明頁面壓縮。通過使用CREATE TABLE或ALTER TABLE指定COM…

項目9-網頁聊天室3(主界面之用戶信息)

1.前端頁面 CSS: 如何讓img里的圖片自適應div&#xff0c;且不變形_img自適應div大小 鋪滿且不變形-CSDN博客 JavaScript/jQuery 如何改變一個img元素的src屬性|極客教程 (geek-docs.com) 2.要求 左上角顯示用戶的昵稱和頭像. 3.后端代碼 3.1 添加攔截器 3.2 注冊攔截器 …

關于C++的類型轉換一篇搞掂

類型轉換 本篇主要探討C11的新出現的類型轉換方式 隱式類型轉換(意義相近的類型可轉換) 顯示類型轉換(意義不相近的類型需強制類型轉換) C為了加強類型轉換的可視性, 引入了四種命名強制類型轉換操作符 但同時也兼容了C語言之前的類型轉換和強制類型轉換, 只是提供了規范的轉…

go升級后 編譯的exe在win7上無法正常運行

D:/Go/src/runtime/sys_windows_amd64.s:65 x75 fpx22fca sp-0x22fc8日 升級到go 1.21后報一堆錯誤&#xff0c;要死了啊 原來是go 1.21不支持win7了&#xff0c;必須把go退回到1.20版本 谷歌發布編程語言 Go 1.21 版本&#xff1a;取消支持微軟 Win7/8 及蘋果 macOS 10.13/10…

pip install pytorch-quantization error

一 報錯信息 最近安裝pytorch-quantization報錯&#xff0c;安裝失敗報錯信息如下&#xff1a; Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com Collecting pytorch-quantizationDownloading pytorch-quantization-2.2.1.tar.gz (6.8 kB)Prepari…

Alibaba Cloud Linux 安裝docker

阿里云實例基于 Red Hat 的發行版&#xff08;例如 CentOS 或 Alibaba Cloud Linux&#xff09;。在這種情況下&#xff0c;應該使用 yum 或 dnf 包管理器&#xff0c;而不是 apt。以下是如何在 CentOS 或類似系統上安裝 Docker 的步驟&#xff1a; 1. 更新系統 首先&#xf…

網絡滲透思考

1. windows登錄的明文密碼&#xff0c;存儲過程是怎么樣的&#xff0c;密文存在哪個文件下&#xff0c;該文件是否可以打開&#xff0c;并且查看到密文 windows的明文密碼:是通過LSA&#xff08;Local Security Authority&#xff09;進行存儲加密的 存儲過程:當用戶輸入密碼之…

用C語言實現掃雷

本篇適用于C語言初學者&#xff0c;主要涉及對于函數&#xff0c;數組&#xff0c;分支循環的運用。 目錄 設計思想&#xff1a; 總代碼&#xff08;改進后&#xff09;&#xff1a; 運行結果展示&#xff1a; 分布介紹&#xff1a; 聲明&#xff1a; 代碼主體部分&#…