小伙伴们,关于数据库的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…