Gauss数据库redo日志

首先理解几个基本概念?

1、脏页

数据库中的脏页是指与磁盘不一致的内存页面。如果一个页面已经被修改但是还没有被写入磁盘,那么它就是脏页。当数据库需要将这些脏页写入磁盘时,会占用磁盘IO,脏页的存在时为了确保数据库的一致性和恢复能力。如果脏页已经持久化到磁盘上,那么系统可以安全的丢弃该页面并释放内存。

2、归档和落盘

将在线日志转换为归档日志的过程称之为归档,归档日志是在线日志的一个副本。redo日志根据自己的ASN归档序列号归档到归档日志,active和inactive的日志都会归档。落盘是指将数据保存到存储介质上,比如磁盘。可是理解为归档是将一份redo日志存在到一个大的文件夹中,归档是逻辑的,落盘是物理的。

3、redo日志

数据库的redo日志是一种用于回复数据的机制。当数据库执行事务时,它会将事务的操作记录到redo日志中,这些操作包括插入、更新和删除等。redo日志记录了这些操作的顺序和细节,一边在数据库崩溃或意外关闭时,可以使用redo日志来恢复数据。当数据库重新启动时,它会检查redo日志并将其中未完成的事务重新执行,以确保数据的一致性。如果redo中的事务嘟已经完成,则数据库可以跳过这个步骤。redo通常是在内存中维护的,因为它需要快速记录事务操作,然儿,为了保证数据的持久性,redo日志也会被写入磁盘。通常redo日志会被分成多个文件,以便在写入的时候可以轮转使用它们,从而提高性能。

4、archive log

归档日志是数据库管理系统中的一个重要概念,它是指将数据库中的事务日志文件(Transaction log)备份并存储到另一个位置,以便数据库在发生故障时可以使用这些归档日志来恢复数据库。归档日志的作用是保证数据库的完整性和可恢复性。当数据库发生故障时,可以使用归档日志恢复数据库到故障前的状态。归档日志还可用于数据备份和恢复,以及数据库性能分析和故障排除。

redo日志的4中状态

current: 当前正在从log buffer写入的redo日志文件

active: 日志对应脏页未落盘的redo日志文件

inactive: 志对应脏页已经落盘的redo日志文件

unused:刚添加的redo日志文件

可以通过DV_LOG_FILES视图查看

SQL> select * from dv_log_files;

SQL> des DV_LOG_FILES;

redo日志各字段含义
序号字段名字段定义字段说明
3FILE_NAMEVARCHAR(256BYTE)日志文件名称
4BYTESBINARY_BEGINT日志文件的大小
5WRITE_POSBINARY_BEGINT日志写位置
6FREE_SIZEBINARY_BEGINT日志剩余空间大小
7RESET_IDBINARY_INTEGER日志的resetid号
8ASNBINARY_INTEGER日志的归档序列号
9BLOCK_SIZEBINARY_INTEGER日志每个block大小
10CURRENT_POINTVARCHAR(128BYTE)当前日志落盘点
11ARCH_POSBINARY_BEGINT日志的归档点

redo日志的状态切换

curent状态的redo日志写满后,就需要切换redo

curent -> active: curent中的write_pos不断推移,current写满之后状态变为active, 下一个序号的redo变为current。

active -> inactive: 处于active的日志文件需要等待脏页落盘后才会变成inactive;手动执行alter system checkpoint落盘后,可以看到active的redo变成inactive了。

inactive -> current: 如果存在inactive的redo, 则current -> active之后,下一个redo inactive -> current。

redo日志追尾

redo日志切换时,会自动找到当前需要的下一个, 如果下一个redo处于active状态,无法立即切换,则称为redo日志追尾。

一般原因:

  1. 业务量大/IO慢,脏页刷新不过来;
  2. 归档日志无法写入,导致active的redo无法归档落盘变成inactive, 阻塞current切换。

增加和删除redo日志

一般redo日志的个数在数据库安装的时候就创建好了。如果出现频繁的redo追尾,可以考虑增加redo日志。

a、增加redo日志

SQL> alter database add logfile('redologxxx' size 512M);

b、删除redo日志。脏页还未落盘的redo日志(active的)删除不了

SQL> alter database drop logfile('redologxxx');

redo日志重演

a、备机回访日志

根据redo日志,把主机的所有操作,在备机上重新做一遍,保证主备机数据的一致性(build)。

b、非一致性关机重启时,数据库做恢复,重演日志

数据库非一致性关机时,脏页队列中可能存在未落盘的页面。再次重启时,通过重演日志,将发生的修改再重新做一遍,保证了数据库数据的一致性。

c、备份集恢复数据库时,重演备份集的归档日志。

归档日志清理

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值