【无标题】

       DM数据守护

DM数据守护(DM Data Watch)的实现原理非常简单:将主库(生产库)产生的Redo日志传输到备库,备库接收并重新应用Redo日志,从而实现备库与主库的数据同步。DM数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为Redo日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
DM数据守护系统结构参考图如下。主要由主库、备库、Redo日志、Redo日志传输、Redo日志重演、守护进程(dmwatcher)、监视器(dmmonitor)组成。

主库
Primary模式,提供完整数据库服务的实例,一般来说主库是用来直接支撑应用系统的生产库。
备库
Standby模式,提供只读数据库服务的实例。备库除了用于容灾,还可以提供备份、查询等只读功能,并且备库还支持临时表的Insert/Delete/Update操作。
备库支持临时表修改主要基于两个因素:1.临时表数据的修改不会产生Redo日志,主库对临时表的修改无法同步到备库;2.可以提供更大灵活性,适应更多应用场景。
根据数据同步情况,备库又可以分为可切换备库和不可切换备库。可切换备库是指,主备库之间数据完全同步,主库发生故障、备库切换为主库后,不会造成任何数据丢失的备库。
Redo日志
Redo日志记录物理数据页内容变动情况,是数据库十分重要的一个功能,在数据库系统故障(比如服务器掉电)重启时,利用Redo日志可以把数据恢复到故障前的状态。
Redo日志也是数据守护的实现基础,数据库中Insert、Delete、Update等DML操作以及Create TABLE等DDL操作最终都会体现为对某一个或者多个物理数据页的修改,因此备库通过重做Redo日志可以与主库数据保持一致。
Redo日志传输
主备库之间的Redo日志传输,以日志包RLOG_PKG为单位,主库通过MAL系统发送Redo日志到备库。各种不同数据守护类型的区别,就在于主库日志包RLOG_PKG的发送时机,以及备库收到Redo日志后的处理策略。
Redo日志重演
Redo日志重演的过程,就是备库收到主库发送的Redo日志后,在物理数据页上,重新修改数据的过程。Redo日志重演由专门的Redo日志重演服务完成,重演服务严格按照Redo日志产生的先后顺序,解析Redo日志、修改相应的物理数据页,并且重演过程中备库会生成自身的Redo日志写入联机日志文件。
守护进程
守护进程(dmwatcher)是数据守护系统的核心工具,监控数据库实例的运行状态和主备库数据同步情况,在出现故障时启动各种处理预案。守护进程是各种消息的中转站,接收数据库实例、其他守护进程、以及监视器发送的各种消息;同时,守护进程也会将收到的数据库实例消息转发给其他守护进程和监视器。守护进程必须和被守护的数据库实例部署在同一台机器上。
监视器
监视器(dmmonitor)用来监控守护系统内守护进程、数据库实例信息,执行用户输入命令、监控实例故障、实现自动切换等。监视器一般配置在数据库实例和守护进程以外的机器上。
脏页(内存页)
脏页-linux内核中的概念,因为硬盘的读写速度远赶不上内存的速度,系统就把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存,linux是以页作为高速缓存的单位,当进程修改了高速缓存里的数据时,该页就被内核标记为脏页,内核将会在合适的时间把脏页的数据写到磁盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。
内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。
平时很快的更新操作,都是在写内存和日志,他并不会马上同步到磁盘数据,这时内存数据页跟磁盘数据页内容不一致,我们称之为“脏页”。
一条 SQL 语句,正常执行的时候特别快,偶尔很慢。那这时候可能就是在将脏页同步到磁盘中了。
什么时候会引起将脏页同步到磁盘中?
(1) 当 redo log写满了。这时候系统就会停止所有的更新操作,将更新的这部分日志对应的脏页同步到磁盘中,此时所有的更新全部停止,此时写的性能变为0,必须待刷一部分脏页后才能更新,这时就会导致 sql语句 执行的很慢。
(2) 也可能是系统内存不足时,需要将一部分数据页淘汰掉,如果淘汰的是脏页,则需要先将脏页同步到磁盘,空出来的给别的数据页使用。
(3) 数据库认为系统“空闲”的时候,反正闲着也是闲着反正有机会就同步到磁盘一些数据
(4) 数据库正常关闭。这时候,数据库 会把内存的脏页都同步到磁盘上,这样下次 数据库启动的时候,就可以直接从磁盘上读数据,启动速度会很快。
会造成的影响:
如果是redo log写满了
尽量要避免的。因为出现这种情况的时候,整个系统就不能再接受更新了,所有的更新都都会停止。此时写的性能变为0,必须待刷一部分脏页后才能更新,这时就会导致 sql语句 执行的很慢。
内存不够用了
常态,很正常。
LSN 介绍:
LSN(LogSequence Number)是由系统自动维护的Bigint类型数值,具有自动递增、全局唯一特性,每一个LSN值代表着DM系统内部产生的一个物理事务。物理事务(Physical Transaction,简称ptx)是数据库内部一系列修改物理数据页操作的集合,与数据库管理系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性。
DM数据库中与LSN相关的信息,可以通过查询V R L O G 和 V RLOG和V RLOGVRAPPLY_PARALLEL_INFO表来获取。DM主要包括以下几种类型的LSN:
 CUR_LSN是系统已经分配的最大LSN值。物理事务提交时,系统会为其分配一个唯一的LSN值,大小等于CUR_LSN + 1,然后再修改CUR_LSN=CUR_LSN+1。
 FILE_LSN 是已经写入联机Redo日志文件的日志包的最大LSN值。每次将Redo日志包RLOG_PKG写入联机Redo日志文件后,都要修改FILE_LSN值。
 FLUSH_LSN是已经发起日志刷盘请求,但还没有真正写入联机Redo日志文件的最大LSN值。
 CKPT_LSN是检查点LSN,所有LSN <= CKPT_LSN的物理事务修改的数据页,都已经从Buffer缓冲区写入磁盘,CKPT_LSN由检查点线程负责调整。
 APPLY_LSN是备库已写入联机Redo日志文件的日志包的原始最大LSN值,此LSN取自主库对应的原始日志包中的最大LSN值。如果主库是DMDSC集群,备库分别为主库每一个节点维护一个APPLY_LSN。
 RPKG_LSN是备库重演LSN,表示备库已经重演完成的最大LSN。如果主库是DMDSC集群,备库分别为主库每一个节点维护一个APPLY_LSN。

与上述LSN对应,DM数据守护也定义了一批LSN:
 CLSN与CUR_LSN保持一致,数据库已经分配的最大LSN值。
 FLSN与FILE_LSN保持一致,已写入联机日志文件的LSN值。
 ALSN与APPLY_LSN保持一致,备库已写入联机日志文件的原始LSN值。
 RLSN与RPKG_LSN保持一致,备库已经重演完成的最大LSN值。
 SLSN是Standby LSN的缩写,表示备库明确可重演的最大LSN值。
 KLSN是Keep LSN的缩写,表示备库已经收到、但未明确是否可以重演的RLOG_PKG的最大LSN值。在读写分离集群中KLSN == SLSN。
归档文件:
备库归档机制调整后,备库归档日志文件写入的并不是自己重演生成的Redo日志,而是直接将主库产生的Redo日志写入到本地归档日志文件中。为了区分生成Redo日志和写入Redo日志的库,归档日志文件头增加了几个MAGIC字段:

 PMNT_MAGIC永久魔数,用来唯一标识数据库,初始化数据库时生成并保持不变(DDL_CLONE还原库除外),数据守护集群中所有主备库的PMNT_MAGIC是相同的。只有DDL_CLONE还原库的PMNT_MAGIC会发生改变,当一个库使用DDL_CLONE备份集还原并恢复之后,在执行RECOVER DATABASE ……UPDATE DB_MAGIC时,PMNT_MAGIC会发生改变。

 DB_MAGIC数据库魔数,数据库初始化时生成,数据库还原后重新生成新的DB_MAGIC,数据守护集群中所有主备库的DB_MAGIC是不同的。归档日志文件使用DB_MAGIC标识写入Redo日志的库。

SRC_DB_MAGIC源库魔数,产生Redo日志数据库的DB_MAGIC值;主库归档日志文件中SRC_DB_MAGIC与DB_MAGIC相同;备库归档日志文件中SRC_DB_MAGIC与主库的DB_MAGIC值相同。
归档区别:
类型/比较 本地归档 实时归档 即时归档 异步归档
备库数量 0 1~8 1~8 1~8
通过MAL传递数据
否 是 是 是
归档时机 写入联机日志后,再写入本地归档日志文件 写入联机日志前,发送到备库
写入联机日志前,发送到备库
定时启动
归档写入(发送) 归档线程
日志刷盘线程 日志刷盘线程 异步归档线程

失败处理 磁盘空间不足时,系统挂起等待用户释放出足够的磁盘空间。
磁盘损坏导致写入失败时,系统会强制HALT Suspend数据库,保持归档状态不变,等待守护进程干预 Suspend 数据库,并设置归档为无效状态,等待守护进程干预 不做处理,等待下次触发继续发送
备库响应时机 无 收到立即响应 事务一致模式:重演完成后响应;
高性能模式:收到立即响应 收到立即响应
源库模式 Primary
Standby
Normal Primary
Primary
Primary
Standby

目标库模式 无 Standby Standby Standby

                             达梦社区  https://eco.dameng.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值