【MySQL】双写、重做日志对宕机时脏页数据落盘的作用的疑问及浅析

众所周知,双写机制、重做日志文件是mysql的InnoDB引擎的几个重要特性之二。其中两者的作用都是什么,很多文章都有分析,如,双写机制(Double Write)是mysql在crash后恢复的机制,而重做日志文件(Redo Log File)也是mysql崩溃恢复机制的一部分。但是,这两者是如何保证mysql能够正确恢复数据的呢?对此,我在看书查证和思考过程中,产生了很多的疑问,也有一些收获,写在下面。

一,介绍双写机制、重做日志文件

首先,我先介绍或者说概括一下双写机制,和重做日志文件。在《MySQL技术内幕 InnoDB技术引擎》[1]一书中,双写机制部分介绍原文如下:

如果说Insert Buffer带给InnoDB存储引擎的是性能上的提升,那么doublewrite(两次写)带给InnoDB存储引擎的是数据页的可靠性。
当发生数据库宕机时,可能InnoDB存储引擎正在写入某个页到表中,而这个页只写了一部分,比如16kb的页,只写了前4kb,之后就发生了宕机,这种情况被成为部分写失效(partial page write)。在InnoDB存储引擎未使用doublewrte技术前,曾经出现过因为部分写失效而导致数据丢失的情况。
有经验的DBA也许会想,如果发生写失效,可以通过重做日志进行恢复。这是一个办法,但是必须清楚的意识到,重做日志中记录的是对页的物理操作,如偏移量800,写’aaa’记录。如果这个页本身已经发生了损坏,再对其进行重做是没有意义的。这就是说,在应用(apply)重做日志之前,用户需要一个页的副本,当写入失效发生时,先通过页的副本来还原该页,再进行重做,这就是doublewrite。在InnoDB存储引擎中doublewrite的体系架构如图2-5所示。
doublewrite由2部分组成,一部分是内存中的doublewrite buffer,大小为2MB,另一部分是物理磁盘上共享表空间中连续的128个页,即2个区(extent),大小同样为2MB。在对缓冲池的脏页进行刷新时,并不直接写磁盘,而是会通过memcpy函数将脏页先复制到内存中的doublewrite buffer,之后通过do

<think>嗯,用户现在想了解达梦数据库重做日志相关参数。之前他们遇到了查询条件`where status !=1`无法得到正确结果的问题,可能是在处理数据遇到了日志或数据一致性的问题,所以现在需要查看重做日志的参数。 首先,我需要回忆一下达梦数据库重做日志是什么。重做日志(Redo Log)在数据库中通常用于记录数据的变化,确保在系统崩溃能够恢复数据。达梦作为国产数据库,应该也有类似的机制。用户可能需要调整或查看这些日志的参数,比如日志文件的大小、数量、存储路径等,以优化性能或解决存储问题。 接下来,用户提到的“相关参数”,可能需要具体的参数名称查看方法。达梦数据库可能有系统视图或系统函数来查询这些参数,比如通过SQL语句查询`V$PARAMETER`视图或者使用特定的系统过程。例如,`SP_GET_PARAMETER`这样的存储过程。 然后,我需要考虑用户的使用场景。用户可能是数据库管理员,负责维护数据库的性能稳定性。他们可能需要调整重做日志的大小,防止日志文件过小导致频繁切换,或者检查日志文件的存放路径是否合理,是否存在磁空间不足的风险。此外,用户可能遇到日志入延迟的问题,需要查看相关的参数配置。 用户可能没有说出来的深层需求,可能包括如何优化重做日志的配置以提高数据库性能,或者在发生故障如何利用重做日志进行恢复。因此,除了查看参数外,可能还需要解释每个参数的作用调整建议,以及如何监控日志的状态。 我还需要确保回答的结构清晰,分步骤说明如何查看这些参数,比如使用哪些SQL语句,访问哪些系统视图。同,要给出参数的含义典型配置值,帮助用户理解当前配置是否合理。例如,`RLOG_FILE_SIZE`可能控制每个重做日志文件的大小,默认可能是256MB,用户可以根据需要调整。 另外,可能需要提醒用户注意事项,比如修改某些参数需要重启数据库,或者在生产环境中谨慎调整日志参数,避免影响数据库的稳定性恢复能力。可能还需要提到如何监控重做日志的使用情况,比如是否有频繁的日志切换,是否出现日志文件无法及归档的情况。 最后,总结一下,用户需要的是如何查看达梦数据库重做日志相关参数,以及这些参数的意义配置建议。确保回答涵盖具体的SQL命令、参数解释、使用场景优化建议,帮助用户全面了解并有效管理重做日志配置。</think>--- ### **达梦数据库重做日志(Redo Log)参数详解** 重做日志(Redo Log)是达梦数据库实现事务持久性崩溃恢复的核心组件,记录所有数据变更操作。以下是关键参数及其查看方法: --- ### **一、查看重做日志参数的方法** #### 1. **通过系统视图 `V$PARAMETER`** ```sql -- 查看所有参数(过滤关键字) SELECT NAME, VALUE, DESCRIPTION FROM V$PARAMETER WHERE NAME LIKE '%RLOG%' OR NAME LIKE '%REDO%'; ``` #### 2. **使用系统过程 `SP_GET_PARAMETER`** ```sql -- 查看单个参数 SP_GET_PARAMETER('RLOG_FILE_SIZE'); -- 示例:重做日志文件大小 ``` #### 3. **通过动态性能视图 `V$RLOG`** ```sql -- 查看当前重做日志状态 SELECT * FROM V$RLOG; ``` --- ### **二、核心重做日志参数说明** | **参数名称** | **默认值** | **作用** | |------------------------|------------|--------------------------------------------------------------------------| | `RLOG_FILE_SIZE` | `256` (MB) | 单个重做日志文件大小。 | | `RLOG_FILE_NUM` | `3` | 重做日志文件组数量(循环覆盖使用)。 | | `RLOG_PARALLEL_ENABLE` | `1` | 是否启用并行重做日志入(`1`启用,`0`禁用)。 | | `RLOG_APPEND_MODE` | `SYNC` | 日志入模式:<br>- `SYNC`:同步入(数据强一致)<br>- `ASYNC`:异步入(高性能) | | `RLOG_PATH` | `./log` | 重做日志文件存储路径。 | | `RLOG_RESERVE_DAYS` | `7` | 归档日志保留天数(需开启归档模式)。 | --- ### **三、参数详细解析** #### 1. **`RLOG_FILE_SIZE`** - **作用**:控制单个重做日志文件的大小。 - **场景建议**: - 若事务频繁,文件过小会导致日志切换频繁,建议调整为 `512 MB` 或 `1 GB`。 - 修改需重启数据库生效。 #### 2. **`RLOG_FILE_NUM`** - **作用**:定义日志文件组的数量。 - **示例**: - 默认 `3` 组,日志满后循环覆盖旧文件。 - 若日志生成极快,可适当增加组数(如 `5`),避免日志覆盖过快导致归档压力。 #### 3. **`RLOG_APPEND_MODE`** - **同步模式(`SYNC`)**: - 事务提交前必须等待日志入磁,确保数据零丢失,但性能较低。 - **异步模式(`ASYNC`)**: - 日志入缓存后即可提交事务,性能高,但宕机可能丢失部分未日志。 #### 4. **`RLOG_PARALLEL_ENABLE`** - **启用并行入**: - 多线程并发入日志,提升高并发场景性能。 - 需确保存储设备支持高 IOPS(如 SSD)。 --- ### **四、操作示例** #### 1. **调整日志文件大小** ```sql -- 修改参数(需重启生效) SP_SET_PARAMETER('RLOG_FILE_SIZE', '512'); ``` #### 2. **查看当前日志状态** ```sql -- 显示日志组、文件路径、状态(ACTIVE/INACTIVE) SELECT GROUP_ID, PATH, STATUS FROM V$RLOGFILE; ``` #### 3. **监控日志切换频率** ```sql -- 统计最近 1 小日志切换次数 SELECT COUNT(*) FROM V$LOG_HISTORY WHERE FIRST_TIME >= SYSDATE - 1/24; ``` --- ### **五、注意事项** 1. **日志文件路径**: - 确保 `RLOG_PATH` 所在磁有足够空间,避免日志满导致数据库挂起。 - 建议日志文件与数据文件分存储,减少 IO 竞争。 2. **归档模式**: - 若开启归档(`ARCHIVELOG`模式),需定期清理过期归档日志,防止磁占满。 3. **参数修改风险**: - `RLOG_APPEND_MODE` 从 `SYNC` 改为 `ASYNC` 可能降低数据安全性,需评估业务容忍度。 --- ### **总结** 达梦重做日志参数直接影响事务持久性、性能数据恢复能力。通过 `V$PARAMETER` `V$RLOG` 视图可快速查看配置,关键参数需根据业务负载硬件条件优化。同步模式保障数据安全,异步模式提升吞吐量,归档设置需结合备份策略使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值