DM8:LSN理解及疑问

2023-11-10 21:31
文章标签 理解 疑问 dm8 lsn

本文主要是介绍DM8:LSN理解及疑问,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DM8 LSN理解

一、LSN介绍

LSN(Log Sequence Number)是由系统自动维护的Bigint类型数值,具有自动递增、全局唯一特性,每一个LSN值代表着DM系统内部产生的一个物理事务。物理事务(Physical Transaction,简称ptx)是数据库内部一系列修改物理数据页操作的集合,与数据库管理系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性。

DM数据库中与LSN相关的信息,可以通过查询v$rlog和V$RAPPLY_PARALLEL_INFO表来获取。DM主要包括以下几种类型的LSN:

  • CUR_LSN 是系统已经分配的最大LSN值。物理事务提交时,系统会为其分配一个唯一的LSN值,大小等于CUR_LSN + 1,然后再修改CUR_LSN=CUR_LSN+1。
  • FLUSH_LSN 是已经发起日志刷盘请求,但还没有真正写入联机Redo日志文件的最大LSN值。
  • FILE_LSN   是已经写入联机Redo日志文件的最大LSN值。每次将Redo日志包RLOG_PKG写入联机Redo日志文件后,都要修改FILE_LSN值。
  • CKPT_LSN 是检查点LSN,所有LSN <= CKPT_LSN的物理事务修改的数据页,都已经从Buffer缓冲区写入磁盘,CKPT_LSN由检查点线程负责调整。

数据库故障重启时,CKPT_LSN之前的REDO日志不需要重做,只需要从CKPT_LSN+1开始重做REDO日志,就可以将系统恢复到故障前状态。并且,在联机重做日志文件中,LSN值<=CKPT_LSN的REDO日志都可以被覆盖。

  • APPLY_LSN 是数据库还原恢复后已经写入联机Redo日志文件的日志包的原始最大LSN值,APPLY_LSN取自源库的原始日志包中的最大LSN值。DSC集群的每一个节点独立维护APPLY_LSN。
  • RPKG_LSN 是数据库还原恢复后已经重演日志的最大LSN。DSC集群的每一个节点独立维护RPKG_LSN。

二、包序号介绍

每个RLOG_PKG都有对应的序号属性,称之为包序号(PKG SEQNO),日志包生成时按照序号连续递增。包序号包括本地包序号(LSEQ)和全局包序号(GSEQ),本地包序号是节点内唯一、连续递增的值,用于校验联机日志连续性;全局包序号由数据守护集群的主备库共同维护,具有全局唯一、连续、递增的特性,用于校验归档日志的连续性。

DM数据库中与全局包序号相关的信息,可以通过查询v$rlog和V$RAPPLY_PARALLEL_INFO表来获取。数据库端主要包括以下几种类型的全局包序号:

  • CUR_SEQ 是系统已经分配的最大全局包序号。RLOG_PKG写入联机日志文件前,系统会为其分配一个唯一的全局包序号。
  • FILE_SEQ 是已经写入联机Redo日志文件的最大全局包序号。每次将Redo日志包RLOG_PKG写入联机Redo日志文件后,都要修改FILE_SEQ值。
  • APPLY_SEQ 是数据库还原恢复后已经写入联机Redo日志文件的原始最大全局包序号,APPLY_SEQ取自源库的原始日志包的包序号。DSC集群的每一个节点独立维护APPLY_SEQ。
  • RPKG_SEQ 是数据库还原恢复后已经重演日志的最大全局包序号。DSC集群的每一个节点独立维护RPKG_SEQ。

三、检查点

DM数据库运行过程中,用户的所有操作都在内存中进行。每修改一条记录都必须先把记录所在的数据页加载到BUFFER缓冲区中,然后进行修改。事务运行时,会把生成的REDO日志保留在Redo日志包RLOG_PKG中,每条日志记录对应一个LSN,当事务提交或Redo日志包满或执行检查点时会进行日志刷盘。

检查点(checkpoint)是一个数据库事件,它的功能是按照数据页的修改顺序,依次将BUFFER缓冲区中的脏页写入磁盘,并在这个过程中动态调整CKPT_LSN值,释放日志空间。

DM的检查点分为两种:完全检查点和部分检查点:

  • 完全检查点:会将内存缓冲区中的所有脏页写入磁盘,并调整CKPT_LSN,在数据库正常关闭时会产生一个完全检查点。
  • 部分检查点:根据dm.ini配置文件中的参数CKPT_FLUSH_RATE和CKPT_FLUSH_PAGES,确定每次检查点刷脏页的数量。执行部分检查点的过程中,DDL/DML操作都可以正常执行,DM系统中绝大多数情况下触发的都是部分检查点。

数据库运行过程中产生的待写入日志首先写入Redo日志包RLOG_PKG,当日志刷盘时一起写入联机日志文件中。在联机日志文件中,可以覆盖写入REDO日志的文件长度为可用日志空间;不能被覆盖的REDO日志,系统故障重启需要重做的REDO日志为有效日志,有效日志的LSN取值范围是(CKPT_LSN,FILE_LSN]。

下图说明了联机日志文件、Redo日志包RLOG_PKG以及相关各LSN之间的关系。

四、个人理解及疑问

理解:

  • cur_lsn 是当前数据库最大的lsn,即当事务提交时,会自动增加。
  • file_lsn是写入redolog的最大lsn
  • apply_lsn是数据库还原后写入redolog日志文件日志包的最大lsn
  • ckpt_lsn是检查点lsn,所有小于ckpt_lsn的日志都已经从redo buffer写入redolog。
  • 若数据库异常宕机,在数据库利用最新备份和归档restore,recover后,当apply_scn等于崩溃前file_lsn时,代表数据库已经恢复至崩溃前状态
  • 在数据库启动时,要保证cur_lsn>=file_lsn才可正常启动,也表示当前的归档日志已经完全应用完成。

如下图实验:

在红色区域2021-11-26 15:53:10时向数据库插入数据,在2021-11-26 15:57:10插入结束并且之后数据库无任何事务进行

CREATE TABLE TAB_FOR_RECOVER(C1 INT);

BEGIN

FOR I IN 1..100000 LOOP

INSERT INTO TAB_FOR_RECOVER VALUES(I);

COMMIT;

END LOOP;

END;

/

疑问:

  1. g_next_seq增长不规律
  2. ckpt_lsn在事务结束之后为什么还会增长
  3. 是否cur_lsn总是和flush_lsn相等,并且总是大于等于file_lsn,最终在redolog都写完之后,file_lsn=cur_lsn=flush_lsn。

达梦社区地址:https://eco.dameng.com

这篇关于DM8:LSN理解及疑问的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/385378

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是