64-Oracle Redo Log

小伙伴們,關于數據庫的redo log相信大家都操作很多次了,且這是OCM考試必考內容。Oracle Redo Log是一種特殊的日志文件,用于完整地記錄數據庫中所有數據變更的詳細信息。當數據庫執行插如、更新或刪除等更新操作,這些操作并不會立刻寫入數據庫的實際數據文件。依賴WAL這個規則(所有關系型數據庫幾乎都是)變更會首先被記錄到Redo Log文件中而后后臺進程刷盤落庫。

一、 Redo Log 核心功能與原理?

?1.1 核心功能??
  • ?數據持久性?:記錄所有數據變更(INSERT/UPDATE/DELETE/DDL),確保已提交事務不丟失。
  • ?崩潰恢復?:實例崩潰時,通過Redo Log前滾(Roll Forward)重做已提交事務,回滾(Roll Back)未提交事務。
  • ?介質恢復?:結合歸檔日志恢復損壞的數據文件。
  • ?日志寫先行(WAL)??:先寫Redo Log到磁盤,再寫數據文件,保證事務持久性。
1.2 技術原理?
? 寫入流程?:
  1. 事務執行生成 Redo 記錄
  2. 寫入 Log Buffer(SGA 中的循環緩沖區)
  3. LGWR 進程觸發條件滿足(事務提交/Buffer 滿 1/3/3 秒超時)
  4. Redo 記錄寫入 Online Redo Log 文件
  5. 磁盤持久化(調用 fsync 強制刷盤)
  6. 通知事務完成
  7. DBWR 進程寫入數據文件?
1.3 日志結構?:?

1.4 核心組件?

?組件

?作用

?Redo Log Buffer?

SGA中的循環緩沖區,臨時存儲redo條目(約10MB-15MB)。

?LGWR進程?

將Redo Log Buffer寫入Redo Log文件。

?Redo Log文件?

物理文件組(通常3組),每組包含多個成員(鏡像)。

1.5. 版本演進?

?版本?

?演進特性?

9i?

引入LogMiner,支持Redo Log分析。

?10g

LOG_BUFFER自動計算(Granule機制),

默認值 ≈ max(512KB, 128KB * CPU_COUNT)

?11g?

引入In-Memory Undo,減少恢復時間。

?12c

多租戶下每個PDB有獨立Redo線程,支持Far Sync異步redo傳輸。

?19c?

優化Active Data Guard實時redo應用。

二. 實操腳本與驗證?

?2.1 查看Redo配置
-- 查看Redo Log Buffer大小
SELECT * FROM v$sgainfo WHERE name IN ('Fixed SGA Size', 'Redo Buffers');
--
NAME                   BYTES RESIZEABLE       CON_ID
_________________ __________ _____________ _________
Fixed SGA Size       4922232 No                    0
Redo Buffers         4530176 No                    0-- 查看Redo Log文件組
SELECT group#, bytes/1024/1024 size_mb, members, status 
FROM v$log;
--
SYS@CDB$ROOT> alter system switch logfile;
System altered.
SYS@CDB$ROOT> SELECT group#, bytes/1024/1024 size_mb, members, statusFROM v$log;GROUP#    SIZE_MB    MEMBERS STATUS
_________ __________ __________ ___________1        200          1 CURRENT2        200          1 INACTIVE3        200          1 ACTIVE
2.2 Redo Log管理腳本(11g+)

2.2.1 創建與維護

-- 添加ASM存儲的日志組(示例)
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 4 ('+DATA/redo04a.log','+FRA/redo04b.log'
) SIZE 2G;-- 驗證日志組,所有日志組狀態
SELECT group#, member, status FROM v$logfile;GROUP# MEMBER                                 STATUS
_________ ______________________________________ _________3 /opt/oracle/oradata/FREE/redo03.log2 /opt/oracle/oradata/FREE/redo02.log1 /opt/oracle/oradata/FREE/redo01.log
--
SELECT * 
FROM (SELECTl.GROUP# AS "Group ID",l.STATUS AS "Group Status",COUNT(f.MEMBER) AS "Members",ROUND(l.BYTES / POWER(1024, 2), 2) AS "Size (MB)",l.SEQUENCE# AS "Sequence"FROM v$log lJOIN v$logfile f ON l.GROUP# = f.GROUP#GROUP BY l.GROUP#, l.STATUS, l.BYTES, l.SEQUENCE#
)
ORDER BY "Group ID";
--Group ID Group Status       Members    Size (MB)    Sequence
___________ _______________ __________ ____________ ___________1 CURRENT                  1          200          792 INACTIVE                 1          200          773 INACTIVE                 1          200          78-- 在線重定位日志文件-ASM自動處理重平衡
ALTER DATABASE RENAME FILE '+DATA/redo04b.log' TO '+N_DG/redo04b.log';
2.2.2 大小調整?
-- 通過替換組調整大小(官方手冊)
ALTER DATABASE ADD LOGFILE GROUP 5 ('+DATA/redo05.log') SIZE 4G;
ALTER SYSTEM SWITCH LOGFILE; -- 執行直到舊組狀態為INACTIVE
ALTER DATABASE DROP LOGFILE GROUP 4;
2.3. 觀察redo(11g+)?
-- 查找所有非正常狀態的日志成員
SELECT *
FROM (SELECTl.GROUP# AS group_id,f.MEMBER AS file_path,f.STATUS AS member_status,l.STATUS AS group_statusFROM v$log lJOIN v$logfile f ON l.GROUP# = f.GROUP#
)
WHERE member_status IS NOT NULL OR group_status NOT IN ('INACTIVE', 'CURRENT');
--no rows selected-- 日志文件狀態驗證
SELECT group#, status, archived, sequence#, 
bytes/1024/1024 size_mb
FROM v$log ORDER BY group#;
--GROUP# STATUS      ARCHIVED       SEQUENCE#    SIZE_MB
_________ ___________ ___________ ____________ __________1 CURRENT     NO                    79        2002 INACTIVE    YES                   77        2003 INACTIVE    YES                   78        200
2.4. 分析 Redo 性能的推薦方法(不使用事件跟蹤)?
-- LGWR瓶頸檢測
SELECT event, total_waits, wait_class
FROM v$system_event 
WHERE event IN ('log file parallel write', 'log file sync');
--
EVENT                         TOTAL_WAITS WAIT_CLASS
__________________________ ______________ _____________
log file parallel write              9192 System I/O
log file sync                          62 Commit-- 查看 Redo 生成統計
SELECT stat.name AS metric,sess.value
FROM v$sesstat sess
JOIN v$statname stat ON sess.statistic# = stat.statistic#
WHERE sess.sid = (SELECT sid FROM v$mystat WHERE rownum = 1)
AND stat.name IN ('redo size', 'redo entries', 'redo writes','redo synch time','redo wastage'
);
--
METRIC                VALUE
__________________ ________
redo entries             20
redo size              7448
redo wastage              0
redo writes               0
redo synch time           0-- 查看日志切換頻率
SELECT thread#,sequence#,(next_time - first_time) * 86400 AS duration_sec,blocks * block_size / 1024 / 1024 AS size_mb
FROM v$archived_log 
ORDER BY sequence# DESC 
FETCH FIRST 10 ROWS ONLY;
--THREAD#    SEQUENCE#                                  DURATION_SEC           SIZE_MB
__________ ____________ _____________________________________________ _________________1           78     4302.000000000000000000000000000000000003    29.217285156251           77                                             0     0.003417968751           76                                             5       42.839843751           75                                             0     0.004394531251           74     1699.000000000000000000000000000000000004          18.031251           73                                             0      0.00292968751           72                                             3    42.750488281251           71    0.9999999999999999999999999999999999999996     0.007324218751           70                                           176     0.131347656251           69                                             7     0.0102539062510 rows selected.
?2.5. 監控 LGWR 行為的標準方法
-- 查看 LGWR 活動
SELECT event,total_waits,time_waited_micro,average_wait
FROM v$system_event
WHERE event LIKE 'log file%';
--
EVENT                          TOTAL_WAITS    TIME_WAITED_MICRO    AVERAGE_WAIT
___________________________ ______________ ____________________ _______________
log file sequential read               140                54353            0.04
log file single write                   14                 8084            0.06
log file parallel write              10035              9100663            0.09
log file sync                           65                42242            0.06-- 查看日志緩沖區使用率
SELECT (SELECT value FROM v$sysstat WHERE name = 'redo buffer allocation retries') / (SELECT value FROM v$sysstat WHERE name = 'redo entries') * 100 AS retry_pct
FROM dual;
--RETRY_PCT
____________0

四. 最佳實踐(源于MOS文檔)

4.1 配置規范

?環境?

?日志大小?

?組數

?存儲?

?冗余策略?

OLTP生產

2-4GB

4+

NVMe SSD

MULTIPLEX 3路

RAC集群

2GB

每實例3組

ASM HIGH冗余

FAILGROUP隔離

云環境(ExaCC)

2GB

4

持久內存+ASM

跨可用域部署

4.2 優化設計
  1. ?成員分離?:日志組成員放置在不同物理磁盤,Redo Log文件放在高速低延遲存儲(NVMe/RAID 10)
  2. ?大小計算?:日志大小(MB) = (每小時Redo量GB × 1024) / 目標切換次數
  3. ?監控指標?:
  • 日志切換頻率:<20次/小時,建議切換間隔15-30分鐘(避免頻繁切換)
  • Log File Sync等待:<5ms
  • 壓縮比:>2:1(Data Guard環境)

五、使用體驗

Oracle在保障ACID的前提下,Redo Log使Oracle數據庫實現:

  • RPO=0(零數據丟失),RTO<60秒(自動化恢復),支持>1百萬TPS的交易負載

Oracle Redo Log機制通過持續創新實現:

  • ?性能優化?:從磁盤I/O到持久內存(19c+),延遲從ms級降至μs級
  • ?高可用增強?:實時壓縮(11g)、Far Sync(12c)、跨域冗余(23ai)
  • ?智能運維?:自適應壓縮、區塊鏈集成、AI預測(23ai)

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

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

相關文章

hive集群優化和治理常見的問題答案

Hive 集群優化與治理常見問題答案合集 &#x1f42d;1. Q&#xff1a;Hive中如何優化大表Join操作&#xff1f; A&#xff1a; 使用Map Join&#xff08;小表Join大表時&#xff09;避免Reduce階段。啟用自動Map Join&#xff08;設置hive.auto.convert.jointrue&#xff09;…

C#采集電腦硬件(CPU、GPU、硬盤、內存等)溫度和使用狀況

這是采集出來的Json&#xff0c;部分電腦&#xff08;特別是筆記本&#xff09;無法獲取到&#xff1a; {"HardwareList": [{"Name": "MITX-6999","Type": "主板","Sensors": [],"WmiReport": null}, …

C3新增特性

? 一、選擇器&#xff08;Selectors&#xff09; 1. 屬性選擇器 [attr^value]: 匹配屬性值以特定字符串開頭的元素。[attr$value]: 匹配屬性值以特定字符串結尾的元素。[attr*value]: 匹配屬性值包含特定字符串的元素。 2. 子元素和兄弟元素選擇器 :nth-child(n): 匹配父元…

報錯 @import “~element-ui/packages/theme-chalk/src/index“;

報錯 import "~element-ui/packages/theme-chalk/src/index"; 具體報錯報錯原因 具體報錯 SassError: Can’t find stylesheet to import. import “~element-ui/packages/theme-chalk/src/index”; src\views\login\theme\element-variables.scss 8:9 root stylesh…

ESLint從入門到實戰

引言 作為前端開發者&#xff0c;你是否遇到過這樣的情況&#xff1a;團隊成員寫出的代碼風格各異&#xff0c;有人喜歡用分號&#xff0c;有人不用&#xff1b;有人用雙引號&#xff0c;有人用單引號&#xff1b;代碼評審時總是在糾結這些格式問題而不是業務邏輯&#xff1f;…

vue3實現markdown文檔轉HTML并可更換樣式

vue3實現markdown文檔轉HTML 安裝marked npm install marked<template><!-- 后臺可添加樣式編輯器 --><div class"markdown-editor" :class"{ fullscreen: isFullscreen, preview-mode: isPreviewMode }"><div class"editor-c…

Temu 實時獲取商品動態:一個踩坑后修好的抓數腳本筆記

Temu 作為一個增長迅猛的購物平臺&#xff0c;其商品價格、庫存等信息&#xff0c;對許多做運營分析的小伙伴來說非常有參考價值。 我在寫這個小工具的時候&#xff0c;踩了很多坑&#xff0c;特別記錄下來&#xff0c;希望對你有用。 初版代碼&#xff1a;想當然的“直接來一下…

【軟考高級系統架構論文】論數據分片技術及其應用

論文真題 數據分片就是按照一定的規則,將數據集劃分成相互獨立、 正交的數據子集,然后將數據子集分布到不同的節點上。通過設計合理的數據分片規則,可將系統中的數據分布在不同的物理數據庫中,達到提升應用系統數據處理速度的目的。 請圍繞“論數據分片技術及其應用”論題…

VR飛奪瀘定橋沉浸式歷史再現?

當你戴上 VR 設備開啟這場震撼人心的 VR 飛奪瀘定橋體驗&#xff0c;瞬間就會被拉回到 1935 年那個戰火紛飛的 VR 飛奪瀘定橋的歲月&#xff0c;置身于瀘定橋的西岸 。映入眼簾的是一座由 13 根鐵索組成的瀘定橋&#xff0c;它橫跨在波濤洶涌的大渡河上&#xff0c;橋下江水咆哮…

libwebsockets編譯

#安裝 libwebsocket git clone https://github.com/warmcat/libwebsockets && \ mkdir libwebsockets/build && cd libwebsockets/build && \ cmake -DMAKE_INSTALL_PREFIX:PATH/usr -DCMAKE_C_FLAGS"-fpic" .. && \ make &&…

使用docker部署epg節目單,同時管理自己的直播源

配置 Docker 環境 拉取鏡像并運行&#xff1a; docker run -d \--name php-epg \-v /etc/epg:/htdocs/data \-p 5678:80 \--restart unless-stopped \taksss/php-epg:latest 默認數據目錄為 /etc/epg &#xff0c;根據需要自行修改 默認端口為 5678 &#xff0c;根據需要自行修…

H5新增屬性

? 一、表單相關新增屬性&#xff08;Form Attributes&#xff09; 這些屬性增強了表單功能&#xff0c;提升用戶體驗和前端驗證能力。 1. placeholder 描述&#xff1a;在輸入框為空時顯示提示文本。示例&#xff1a; <input type"text" placeholder"請輸…

【C++】簡單學——引用

引用的概念 為一個變量指定一個別名 引用的規則 用之前要初始化使用了之后就不能修改指向了&#xff08;對一個引用賦值實際上是對原本被引用的那個值進行賦值&#xff0c;而不是改變指向&#xff09;一個對象可以同時有多個引用 問&#xff1a;引用可以完全代替指針嗎&…

C#編程與1200PLC S7通信

讀取q0.0的狀態,i0.0的狀態實時在窗口更新 PLC里寫一個程序 用常閉按鈕接i0.0信號 &#xff0c;延時接通Q0.0 按按鈕&#xff0c;上位機測試效果, 2396fcfa823aa951d 程序前提是引用了S7通信文件 using Sharp7; using System; using System.Collections.Generic; using S…

el-table復選框分頁多選

場景&#xff1a; 你想要對el-table表格數據進行批量處理&#xff0c;會使用復選框&#xff0c;但如果表格的數據是分頁請求回來的&#xff0c;則在切換頁碼的時候&#xff0c;之前選中的數據會被清空掉&#xff0c;本文就是為了解決這個問題。 解決思路&#xff1a; 主要分…

大IPD之——學習華為的市場隊伍建設(二十)

企業要生存&#xff0c;就必須要擁有自己的核心競爭力。這樣在行業內與其他企業競爭時&#xff0c;才能立于不敗之地&#xff0c;而伴隨著企業的市場化&#xff0c;市場機制對企業價值創造的影響力越來越大。30多年來&#xff0c;華為高度重視市場隊伍與市場能力建設&#xff0…

Datawhlale_快樂學習大模型_task02_NLP 基礎概念

書籍地址 簡要總結一下個人理解 文章目錄 1.1 NLP1.2 發展歷程1.3 NLP任務1.3.1 中文分詞1.3.2 子詞切分1.3.3 詞性標注1.3.4 文本分類1.3.5 實體識別1.3.6 關系抽取1.3.7 文本摘要1.3.8 機器翻譯1.3.9 自動問答 1.4 文本表示的發展1.4.1 詞向量1.4.2 語言模型1.4.3 Word2Vec…

AUTOSAR圖解==>AUTOSAR_AP_SWS_Persistency

AUTOSAR 持久化功能集群解析 1. 引言 AUTOSAR (AUTomotive Open System ARchitecture) 適配平臺中的持久化功能集群(Persistency Functional Cluster)是一個核心組件&#xff0c;為應用程序提供數據持久化服務。本文檔詳細分析了AUTOSAR持久化功能集群的架構、主要組件和工作…

Ollama常用命令詳解:本地大語言模型管理指南

前言 Ollama是一個強大的本地大語言模型管理工具&#xff0c;讓我們可以輕松地在本地部署和運行各種開源大模型。本文將詳細介紹Ollama的核心命令使用方法&#xff0c;幫助您快速上手本地AI模型的管理和使用。 1. 查看已安裝模型 - ollama list 基本用法 ollama list功能說…

[免費]SpringBoot+Vue共享單車信息系統【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的SpringBootVue共享單車信息系統【論文源碼SQL腳本】&#xff0c;分享下哈。 項目視頻演示 【免費】SpringBootVue共享單車信息系統 Java畢業設計_嗶哩嗶哩_bilibili 項目介紹 快速發展的社會中&#xff…