首页 > 其他分享 >mogdb里xlog相关的几个参数

mogdb里xlog相关的几个参数

时间:2024-03-28 11:44:35浏览次数:21  
标签:02 闪回 06 16 xlog mogdb 参数 2022 openGauss

openGauss/MogDB 3.0 闪回恢复测试
本文出处:https://www.modb.pro/db/411368

介绍
闪回恢复功能是数据库恢复技术的一环,可以有选择性的撤销一个已提交事务的影响,将数据从人为不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR 等手段找回已提交的数据库修改,恢复时长需要数分钟甚至数小时。采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。

闪回支持两种恢复模式:
基于 MVCC 多版本的数据恢复(仅支持 Ustore):适用于误删除、误更新、误插入数据的查询和恢复,用户通过配置旧版本保留时间,并执行相应的查询或恢复命令,查询或恢复到指定的时间点或 CSN 点。
基于数据库回收站的恢复(仅支持 Ustore):适用于误 DROP、误 TRUNCATE 的表的恢复。用户通过配置回收站开关,并执行相应的恢复命令,可以将误 DROP、误 TRUNCATE 的表找回。 说明: 回收站暂不支持 Astore 引擎(闪回 DROP/TRUNCATE)。
测试环境
操作系统:centos7.6 x86
数据库版本:openGauss 3.0
数据库环境:单机
(在这里数据库安装过程省略),根据上述提到的两种恢复模式下面分别进行测试。

闪回查询和表
闪回查询可以查询过去某个时间点表的某个 snapshot 数据,这一特性可用于查看和逻辑重建意外删除或更改的受损数据。闪回查询基于 MVCC 多版本机制,通过检索查询旧版本,获取指定老版本数据。

前置条件
数据库配置文件 postgresql.conf 参数配置

enable_default_ustore_table=on ###开启默认支持Ustore存储引擎
undo_zone_count=16384 ###内存中可分配的undo zone数量,0代表禁用undo和Ustore表,建议取值为max_connections*4
undo_retention_time=2000 ###用于设置undo旧版本的保留时间,默认为0,单位s。
测试过程
---创建测试表并插入两条数据
openGauss=# create table u_tb (id int,c1 varchar(10));
CREATE TABLE

openGauss=# insert into u_tb values (1,'Aso'),(2,'Hocx');
INSERT 0 2

openGauss=# select clock_timestamp();
clock_timestamp

2022-06-02 16:21:38.123874+08
(1 row)
---再插入新数据
openGauss=# insert into u_tb values (3,'Ysad');
INSERT 0 1

openGauss=# select clock_timestamp();
clock_timestamp

2022-06-02 16:21:52.773089+08
(1 row)
---基于timestamp的闪回查询
openGauss=# SELECT * FROM u_tb TIMECAPSULE TIMESTAMP to_timestamp ('2022-06-02 16:21:38.123874', 'YYYY-MM-DD HH24:MI:SS.FF');
id | c1
----+------
1 | Aso
2 | Hocx
(2 rows)

openGauss=# select clock_timestamp();
clock_timestamp

2022-06-02 16:22:36.596661+08
(1 row)
---修改一行数据
openGauss=# update u_tb set id = 4 where id =3;
UPDATE 1

openGauss=# select * from u_tb;
id | c1
----+------
1 | Aso
2 | Hocx
4 | Ysad
(3 rows)
---查询timestamp对应的CSN
openGauss=# select snptime,snpcsn from gs_txn_snapshot where snptime between '2022-06-02 16:21:52.773089' and '2022-06-02 16:22:36.596661';
snptime | snpcsn
-------------------------------+--------
2022-06-02 16:22:36.330093+08 | 45012
2022-06-02 16:22:33.306022+08 | 45011
2022-06-02 16:22:30.279709+08 | 45010
2022-06-02 16:22:27.256441+08 | 45009
2022-06-02 16:22:24.232027+08 | 45008
2022-06-02 16:22:21.208859+08 | 45007
2022-06-02 16:22:18.181382+08 | 45006
2022-06-02 16:22:15.15771+08 | 45005
2022-06-02 16:22:12.132989+08 | 45004
2022-06-02 16:22:09.109973+08 | 45003
2022-06-02 16:22:06.086961+08 | 45002
2022-06-02 16:22:03.064702+08 | 45001
2022-06-02 16:22:00.042871+08 | 45000
2022-06-02 16:21:57.009696+08 | 44999
2022-06-02 16:21:53.985716+08 | 44998
(15 rows)
---基于CSN的闪回查询
openGauss=# SELECT * FROM u_tb TIMECAPSULE CSN 45009;
id | c1
----+------
1 | Aso
2 | Hocx
3 | Ysad
(3 rows)
---基于CSN的闪回表
openGauss=# TIMECAPSULE TABLE u_tb TO CSN 45009;
TimeCapsule Table

openGauss=# select * from u_tb;
id | c1
----+------
1 | Aso
2 | Hocx
3 | Ysad
(3 rows)
---基于timestamp的闪回表
openGauss=# TIMECAPSULE TABLE u_tb TO TIMESTAMP to_timestamp ('2022-06-02 16:21:38', 'YYYY-MM-DD HH24:MI:SS.FF');
TimeCapsule Table

openGauss=# SELECT * FROM u_tb;
id | c1
----+------
1 | Aso
2 | Hocx
(2 rows)
闪回 drop/truncate
闪回 DROP:可以恢复意外删除的表,从回收站(recycle bin)中恢复被删除的表及其附属结构如索引、表约束等。闪回 drop 是基于回收站机制,通过还原回收站中记录的表的物理文件,实现已 drop 表的恢复。

闪回 TRUNCATE:可以恢复误操作或意外被进行 truncate 的表,从回收站中恢复被 truncate 的表及索引的物理数据。闪回 truncate 基于回收站机制,通过还原回收站中记录的表的物理文件,实现已 truncate 表的恢复。

前置条件
enable_recyclebin=on ###启用回收站。 recyclebin_retention_time=30min ###参数用于设置回收站对象保留时间,超过该时间的回收站对象将被自动清理。
测试过程
---创建测试表
openGauss=# create table u_tb2 (id int,c1 varchar(10));
CREATE TABLE

openGauss=# insert into u_tb2 values (1,'Aso'),(2,'Hocx');
INSERT 0 2

openGauss=# select * from u_tb2;
id | c1
----+------
1 | Aso
2 | Hocx
(2 rows)
---truncate表
openGauss=# truncate u_tb2;
TRUNCATE TABLE

openGauss=# select * from u_tb2;
id | c1
----+----
(0 rows)
---闪回truncate操作
openGauss=# timecapsule table u_tb2 to before truncate;
TimeCapsule Table

openGauss=# select * from u_tb2;
id | c1
----+------
1 | Aso
2 | Hocx
(2 rows)
---误drop表
openGauss=# drop table u_tb2;
DROP TABLE
---查看回收站
openGauss=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;
rcyname | rcyoriginname | rcytablespace
-------------------------------+---------------+---------------
BIN$3C774EBC071$23FB27078==$0 | u_tb2 | 0
(1 row)
---闪回drop表并且rename
openGauss=# timecapsule table u_tb2 to before drop rename to u_tb2_bak;
TimeCapsule Table

openGauss=# select * from u_tb2_bak;
id | c1
----+------
1 | Aso
2 | Hocx
(2 rows)
---删除表时不放到回收站
openGauss=# drop table u_tb2_bak purge;
DROP TABLE
---检查回收站
openGauss=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;
rcyname | rcyoriginname | rcytablespace
---------+---------------+---------------
(0 rows)
总结 3.0 和 2.1 的区别

如果是 2.1 版本测试闪回查询和闪回表则需要配置参数 version_retention_age(设置旧版本保留的事务数,超过该事务数的旧版本将被回收清理),不是配置 undo_retention_time;在 3.0 版本中 version_retention_age 参数已被弃用,使用的参数就是 undo_retention_time(undo 旧版本保留时间)做闪回查询。回收站在 2.1 版本中对 Astore 表支持,在 3.0 中不再支持 Astore 表,而是 ustore 表才支持。

标签:02,闪回,06,16,xlog,mogdb,参数,2022,openGauss
From: https://www.cnblogs.com/helloopenGauss/p/18101251

相关文章

  • vue里面的路由参数和查询参数
    $router.push 在VueRouter中可以用来导航到不同的路由,并且你可以在其中添加参数。这些参数通常被称为“查询参数”或“路由参数”。 查询参数:这些是添加到URL末尾的参数,通常用于向服务器发送某些信息,但不会被包含在路由定义中。查询参数是通过 query 属性来传递的。例......
  • openGauss 参数调优与诊断
    参数调优与诊断可获得性本特性自openGauss1.0.0版本开始引入特性简介本功能是一款数据库集成的参数调优工具,通过结合深度强化学习和全局搜索算法等AI技术,实现在无需人工干预的情况下,获取最佳数据库参数配置。本功能不强制与数据库环境部署到一起,支持独立部署,脱离数据库安装环......
  • openGauss X_Tuner_参数调优与诊断
    X-Tuner:参数调优与诊断可获得性本特性自openGauss1.0.0版本开始引入。特性简介X-Tuner是一款数据库集成的参数调优工具,通过结合深度强化学习和全局搜索算法等AI技术,实现在无需人工干预的情况下,获取最佳数据库参数配置。本功能不强制与数据库环境部署到一起,支持独立部署,脱......
  • openGauss Xlog-no-Lock-Flush
    XlognoLockFlush可获得性本特性自openGauss2.0.0版本开始引入。特性简介取消WalInsertLock争抢及WalWriter专用磁盘写入线程。客户价值在保持原有XLog功能不变的基础上,进一步提升系统性能。特性描述对WalInsertLock进行优化,利用LSN(LogSequenceNumber)及LRC(LogRecor......
  • JavaWeb——HttpServletRequest获取请求头信息和请求中的参数信息用法
    HttpServletRequest接口提供了访问HTTP请求信息的方法,包括请求行和请求头。下面是一些常用的HttpServletRequest方法,用于获取请求行和请求头信息。StringgetMethod():返回请求的HTTP方法,如GET、POST等。StringgetRequestURI():返回请求的URI,不包括查询字符串。String......
  • Mybatis-获取参数值的两种方式
    1.${}和#{}MyBatis获取参数值的两种方式:${}和#{}对于初学者来说,理解MyBatis中获取参数值的两种方式——#{}和${},关键在于明白它们如何影响SQL语句的构建以及为何在安全性、灵活性上有显著差异。下面我将用简单易懂的语言来解释这两者的本质、工作原理及使用注意......
  • 2-15. 绑定 Editor Window 中的参数变量
    点击左侧的东西时同步右侧的内容修改图片项目相关代码代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git标签:20240327_2028......
  • Python学习——访问命令行参数、标准输入输出
    一、sys模块    通过sys.argv()函数访问命令行参数,sys.argv()生成的是一个列表,argv[0]访问脚本,argv[1]访问第一个参数,argv[2]访问第二个参数。例1、通过调用命令行参数n,生成n个随机数。#访问命令行importsys,randomn=int(sys.argv[1])#调用命令行第一个参数,即n......
  • JMeter前置处理器-用户参数详解
    简介在进行性能测试时,对于模拟真实用户行为和生成负载的需求日益增加。JMeter作为一款开源的性能测试工具,在这方面提供了丰富的功能和扩展性。其中,前置处理器是一项强大的功能,可以在发送请求之前对请求进行修改或添加额外的操作。本文将介绍前置处理器中非常重要的一个,用户参数......
  • python教程6 传递参数函数
    #!/usr/bin/python#-*-coding:UTF-8-*-#可写函数说明defprintinfo(kname,age):"打印任何传入的字符串"print("Name:",kname)print("Age",age)return#调用printinfo函数printinfo(age=50,kname="miki")#!/......