【openGauss实战13】闪回技术
📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及GP 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
文章目录
- 前言
- 📣 1.闪回概述
- 📣 2.参数设置
- 📣 3.回收站的恢复
- ✨ 3.1 TRUNCATE 恢复
- ✨ 3.2 TRUNCATE 恢复
- 📣4.MVCC数据恢复
- 📣 5.技能总结
前言
本篇结合企业实战介绍了openGauss闪回技术。📣 1.闪回概述
openGauss闪回功能能够有选择性的高效撤销一个已提交事务的影响,从人为错误中恢复。
在采用闪回技术之前,只能通过备份恢复、PITR等手段找回已提交的数据库修改,恢复时长需要数分钟甚至数小时。
采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。1)误删除表的场景;
2)需要将表中的数据恢复到指定时间点或者CSN闪回支持两种恢复模式:
1.基于MVCC多版本的数据恢复:适用于误删除、误更新、误插入数据的查询和恢复,用户通过配置旧版本保留时间,
并执行相应的查询或恢复命令,查询或恢复到指定的时间点或CSN点。
2.基于类似windows系统回收站的恢复:适用于误DROP、误TRUNCATE的表的恢复。用户通过配置回收站开关,并执行相应的恢复命令,
可以将误DROP、误TRUNCATE的表找回。
📣 2.参数设置
## 参数说明:1.启用回收站参数enable_recyclebin
2.设置回收站对象保留时间recyclebin_retention_time,超过该时间的回收站对象将被自动清理。单位为s,最小值为0,最大值为2147483647。
3.设置内存中可分配的undo zone数量undo_zone_count,0代表禁用undo和Ustore表,建议取值为max_connections*4openGauss=# select name,setting,min_val,max_val from pg_settings where name like 'enable_recyclebin';name | setting | min_val | max_val
-------------------+---------+---------+---------enable_recyclebin | off | |openGauss=# select name,setting,min_val,max_val from pg_settings where name like 'recyclebin_retention_time';name | setting | min_val | max_val
---------------------------+---------+---------+------------recyclebin_retention_time | 900 | 1 | 2147483647openGauss=# select name,setting,min_val,max_val from pg_settings where name like 'undo_zone_count';name | setting | min_val | max_val
-----------------+---------+---------+---------undo_zone_count | 0 | 0 | 1048576select name,setting,min_val,max_val from pg_settings where name like 'max_connections';name | setting | min_val | max_val
-----------------+---------+---------+---------max_connections | 5000 | 10 | 262143## 何设置参数
gs_guc set -N all -I all -c "undo_zone_count=20000"
gs_guc set -N all -I all -c "enable_recyclebin=on"
gs_guc set -N all -I all -c "recyclebin_retention_time=1440min"
gs_om -t restart
📣 3.回收站的恢复
回收站的方式有两种:
1.闪回TRUNCATE:可以恢复误操作或意外被进行truncate的表,从回收站中恢复被truncate的表及索引的物理数据。
闪回truncate基于回收站机制,通过还原回收站中记录的表的物理文件,实现已truncate表的恢复。2.闪回DROP:可以恢复意外删除的表,从回收站(recyclebin)中恢复被删除的表及其附属结构如索引、表约束等。
闪回drop是基于回收站机制,通过还原回收站中记录的表的物理文件,实现已drop表的恢复。
✨ 3.1 TRUNCATE 恢复
openGauss=# \c
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "postgres" as user "omm".openGauss=# CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0;
openGauss=# CREATE USER mesdb PASSWORD 'Gauss@123';
openGauss=# GRANT ALL PRIVILEGES TO mesdb;
openGauss=# \duopenGauss=# \c mydb mesdb
Password for user mesdb:
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "mydb" as user "mesdb".密码:Gauss@1231.建表、插入测试数据
create SCHEMA tpcds;
DROP TABLE IF EXISTS tpcds.reason; CREATE TABLE tpcds.reason( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100) ) with(STORAGE_TYPE=USTORE); INSERT INTO tpcds.reason VALUES (1, 'AA', 'reason1'),(2, 'AB', 'reason2'),(3, 'AC', 'reason3');
select * from tpcds.reason;说明:
Ustore存储引擎将最新版本的“有效数据”和历史版本的“垃圾数据”分离存储。将最新版本的“有效数据”存储在数据页面上,并单独开辟一段UNDO空间,用于统一管理历史版本的“垃圾数据”,因此数据空间不会由于频繁更新而膨胀,“垃圾数据”集中回收效率更高。Ustore存储引擎结合UNDO空间,可以实现更高效、更全面的闪回查询和回收站机制,能快速回退人为“误操作”,为openGauss提供了更丰富的企业级功能。
数据库启动之前,在postgresql.conf中设置“enable_default_ustore_table=on”,默认指定用户创建表时使用USTORE存储引擎。
select name,setting,min_val,max_val from pg_settings where name like 'enable_default_ustore_table';如果有以下报错,由于openGauss建表默认为astore模式,是不支持闪回的。所以,现在需要修改建表脚本为ustore模式才可以闪回。
mydb=> TIMECAPSULE TABLE tpcds.reason1 to BEFORE TRUNCATE;
ERROR: timecapsule does not support astore yet2.误操作TRUNCATE
mydb=> TRUNCATE TABLE tpcds.reason;
mydb=> select * from tpcds.reason;r_reason_sk | r_reason_id | r_reason_desc
-------------+-------------+---------------
(0 rows)3.闪回数据
mydb=> TIMECAPSULE TABLE tpcds.reason to BEFORE TRUNCATE;
TimeCapsule Table
mydb=> select * from tpcds.reason;r_reason_sk | r_reason_id | r_reason_desc
-------------+------------------+--------------1 | AA | reason12 | AB | reason23 | AC | reason3
说明:以上数据已经被闪回了
✨ 3.2 TRUNCATE 恢复
1.误操作DROP
mydb=> DROP TABLE tpcds.reason;
mydb=> select * from tpcds.reason;
ERROR: relation "tpcds.reason" does not exist on dn_6001_60022.闪回
mydb=> TIMECAPSULE TABLE tpcds.reason to BEFORE DROP;
TimeCapsule Table
mydb=> select * from tpcds.reason;r_reason_sk | r_reason_id | r_reason_desc
-------------+------------------+--------------1 | AA | reason12 | AB | reason23 | AC | reason3
说明:以上数据已经被闪回了
📣4.MVCC数据恢复
1.建表
drop table if EXISTS tpcds.time_table;
create table tpcds.time_table(idx integer, snaptime timestamp, snapcsn bigint, timeDesc character(100)) with(STORAGE_TYPE=USTORE); INSERT INTO tpcds.time_table select 1, now(),int8in(xidout(next_csn)), 'time1' from gs_get_next_xid_csn();
INSERT INTO tpcds.time_table select 2, now(),int8in(xidout(next_csn)), 'time2' from gs_get_next_xid_csn();
--出去上个厕所再回来
INSERT INTO tpcds.time_table select 3, now(),int8in(xidout(next_csn)), 'time3' from gs_get_next_xid_csn();
--去买了包烟
INSERT INTO tpcds.time_table select 4, now(),int8in(xidout(next_csn)), 'time4' from gs_get_next_xid_csn();
--刷了会视频
INSERT INTO tpcds.time_table select 5, now(),int8in(xidout(next_csn)), 'time5' from gs_get_next_xid_csn();mydb=> select * from tpcds.time_table;idx | snaptime | snapcsn | timedesc
-----+----------------------------+---------+----------------------------------------1 | 2023-04-09 09:37:10.415875 | 2124 | time12 | 2023-04-09 09:37:15.374307 | 2127 | time23 | 2023-04-09 09:41:49.92012 | 2311 | time34 | 2023-04-09 09:41:55.351731 | 2316 | time45 | 2023-04-09 09:41:59.390929 | 2319 | time52.设置参数
mydb=> show undo_retention_time;undo_retention_time
---------------------0undo_retention_time --参数用于设置undo旧版本的保留时间。
undo_zone_count=16384 --代表的时候undo log的一种资源个数
enable_default_ustore_table=on --默认指定用户创建表时使用USTORE存储引擎gs_guc set -N all -I all -c "undo_retention_time=2000s"
gs_guc set -N all -I all -c "undo_retention_time=1440min"
gs_guc set -N all -I all -c "undo_zone_count=16384"
gs_guc set -N all -I all -c "enable_default_ustore_table=on"
gs_guc set -N all -I all -c "undo_retention_time=1440min"gs_ctl reload -D /opt/openGauss/data/dn --加载参数3.误删除数据
mydb=> delete tpcds.time_table;4.根据时间点闪回
SELECT * FROM tpcds.time_table TIMECAPSULE TIMESTAMP to_timestamp('2023-04-09 09:41:49.92012','YYYY-MM-DD HH24:MI:SS.FF');
idx | snaptime | snapcsn | timedesc
-----+----------------------------+---------+---------1 | 2023-04-09 09:37:10.415875 | 2124 | time12 | 2023-04-09 09:37:15.374307 | 2127 | time25.基于SCN闪回
SELECT * FROM tpcds.time_table TIMECAPSULE CSN 2316;idx | snaptime | snapcsn | timedesc
-----+----------------------------+---------+---------1 | 2023-04-09 09:37:10.415875 | 2124 | time12 | 2023-04-09 09:37:15.374307 | 2127 | time23 | 2023-04-09 09:41:49.92012 | 2311 | time3
📣 5.技能总结
##清空回收站
mydb=> purge recyclebin; ## ustore VS astore
现在反思下我遇到的两个问题,都是因为表的存储方式为astore,而闪回特性不支持该种类型导致的,建表时指定为ustore就可以解决。so,有没有办法默认建表时就是ustore存储呢?继续翻看产品文档,是有参数可以设置的。gs_guc set -N all -I all -c "enable_default_ustore_table=on" --设置参数
gs_ctl reload -D /opt/openGauss/data/dn --加载参数astore:
openGauss内核当前使用的行引擎采用的是Append Update(追加更新)模式,该模式在INSERT、DELETE、HOT UPDATE(页面内更新)的场景下有较好的表现。主要面向通用的在线交易处理类业务应用场景,适合高并发、小数据量的单点或小范围数据读、写操作。astore为行存储格式,向上提供元组形式的读、写;向下以页面为单位通过可扩展的介质管理器对存储介质进行读、写操作;并通过页面粒度的共享缓冲区来优化读、写操作的效率。
因此,astore存储格式比较适合频繁插入、少量更新的业务场景.ustore:
ustore属于In-place Update更新模式,中文意思为:原地更新,是openGauss内核新增的一种存储模式。astore对于非HOT UPDATE场景,垃圾回收不够高效。ustore存储模式提供“原地更新”能力,主要思路是将最新版本的“有效数据”和历史版本的“垃圾数据”分离存储。将最新版本的“有效数据”存储在数据页面上,而单独开辟一段undo(回滚)空间,用于统一管理历史版本的“垃圾数据”,因此数据空间不会由于频繁更新而膨胀,垃圾回收效率更高。通过NUMA-aware的undo子系统设计,使得undo子系统在多核平台上高效扩展。同时通过对元组和数据页面结构的重新设计,减少存储空间的占用。采用多版本索引技术,解决索引膨胀问题,彻底去除autovacuum(垃圾清理线程)机制,提升存储空间的回收复用效率。当前USTORE存储引擎不支持极致RTO回放模式。对于主机,在recovery_parse_workers参数设置大于1的情况下,创建USTORE存储引擎的表将返回报错;对于备机,如果数据库中已经包含USTORE表,那么后续如果再打开极致RTO功能,可能会导致回放失败和报错,严重情况下甚至可能导致备机数据损坏(这种情况下需要执行备机重建进行修复)。## 其他设置
mydb=> show server_version;server_version
----------------9.2.4
mydb=> \copyright
GaussDB Kernel Database Management System
Copyright (c) Huawei Technologies Co., Ltd. 2018. All rights reserved.mydb=> \conninfo
You are connected to database "mydb" as user "mesdb" via socket in "/opt/openGauss/tmp" at port "15400".mydb=> show AUTOCOMMIT;autocommit
------------on


相关文章:
【openGauss实战13】闪回技术
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...
Top大学教授:青年学者,请避免这些写作问题→
在科研初期,很多作者由于缺乏经验和指导,糊里糊涂地发了一些质量较低的论文。 为了帮助青年科学家提高写作能力,比利时鲁汶大学的Blocken教授(同时也是Building & Environment、Journal of Wind Engineering & Industrial…...
使用midjourney搞出一套三国人物画像!
当下已进入如火如荼的全民AI时代,最近体验了下midjourney,使用它的以图生图功能生成出来一套三国人物画像,和大家分享下使用心得。 使用midjourney的准备工作 下载工具 使用midjourney生产图片依赖的工具和流程,大致如下&#x…...
ELK日志分析系统
ELK日志分析系统 日志主要包括系统日志/var/log 应用日志 安全日志secure, rsyslog远程传输日志进行汇总集中化管理,日志统计和检索又成为一件比较麻烦的事情,、 1、完整日志系统基本特征 收集:能够采集多种来源的日志数据 …...
整型在内存中的存储
目录 一、为什么内存中存储补码? 二、大小端概念 百度笔试试题: 几道小题: 一、为什么内存中存储补码? 上一节我们了解了原码,反码,补码的概念(http://t.csdn.cn/N0grg)ÿ…...
子集-回溯算法
1题目 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出:[[],[1],[2],[1…...
公司study three
ctrlwind:新建桌面 ctrlwin 箭头 切换桌面 WIN CTRL F4 删除桌面 stream foreach遍历 instFormModifytracesList.stream().forEach(s->{ s.setModifyUser(sysUserTemplate.getNameById(s.getModifyUser()));});拼接 String collect2 peopleList.stream()…...
【运维】speedtest测试
目录 docker 布署 布署云端 docker布署 云端放置于已有容器里 librespeed/speedtest: Self-hosted Speedtest for HTML5 and more. Easy setup, examples, configurable, mobile friendly. Supports PHP, Node, Multiple servers, and more (github.com) docker 布署 获取…...
CycloneDDS开源代码在Linux系统上编译生成可执行文件的详细步骤
cyclonedds开源代码在Linux系统上编译生成可执行文件的详细步骤 1 远程仓库CycloneDDS源码下载2 创建build目录3 进入build目录4 指定安装路径前缀5 编译 cmake --build6 编译完成后进行安装7 版本构建并编译7.1 虚拟机网络桥接7.2 镜像源添加7.3 CUnit单元测试工具安装7.4 编译…...
PLL锁相环的一部分--鉴频鉴相器
鉴频鉴相器作为锁相环的一部分也是有相对应的独立芯片. 鉴频鉴相器芯片主要有以下几种: LM565/LM565C 鉴频鉴相器芯片XR2211CP 鉴频鉴相器芯片NE567 比较器、鉴频、鉴相 ICMC1496/LM1496 综合运算放大器与调制/解调器 ICLM567 比较器、鉴频、鉴相 ICMC100EP2100 高…...
CSS实现磨砂玻璃(毛玻璃)效果样式
要实现磨砂玻璃背景,可以使用 CSS3 中的 ::before 伪元素和 backdrop-filter 属性,结合 opacity 属性和 blur() 函数来实现。 具体实现步骤如下: 创建一个具有背景的元素,例如一个 div 元素。 div {background-image: url(&quo…...
Solidity拓展:数学运算过程中数据长度溢出的问题
在数学运算过程中假如超过了长度则值会变成该类型的最小值,如果小于了该长度则变成最大值 数据上溢 uint8 numA 255; numA;uint8的定义域为[0,255],现在numA已经到顶了,numA会使num变成0(由于256已经超过定义域,它会越过256&…...
【C语言】经典题目(一)
【C语言】字符串刷题篇在这里哦! 【C语言】字符串—刷题篇 【C】语言经典题目,五个摘录为一篇,将会持续更新啦!💞 C语言经典题目 三位数水仙花数完数求利润三个数数字排序 三位数 💫题目 已知有1、2、3、4…...
Linux 设备树文件手动编译的 shell 脚本
前言 前面通过 Makefile 实现手动编译 Linux 设备树 dts 源文件及其 设备树依赖 dtsi、.h 头文件,如何写成一个 shell 脚本,直接编译呢? 其实就是 把 Makefile 重新编写为 shell 脚本即可 编译设备树 shell 脚本 脚本内容如下:…...
C++核心编程——初识STL——STL的基本概念和六大组件
文章目录💬 一.前言二.STL基本概念和组成①容器②算法③迭代器④空间配置器⑤适配器⑥仿函数 三.STL工作机制 一.前言 长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出“可重复运用的东西”的方法,让程序员的心血不止于…...
5.2图的BFS与DFS遍历
一.BFS遍历 1.图的广度优先遍历代码实现 说明: 1.广度优先遍历,类比树的层次遍历(树属于特殊的图) 2.对应算法想象图的物理结构存储: 邻接矩阵表示唯一时间复杂度:O(|V|^2); 邻接表不唯一:O(|V|2|E|)&…...
JSP+SQL网上选课系统(源代码+论文+答辩PPT)
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。学生选课系统作为一种现代化的教学技术,以越来越受到人民的重视,是一个学校不可缺少的部分, 学生选课系统就是为了管理好选课信息而设计的。学…...
C语言数据结构——树、堆(堆排序)、TOPK问题
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,数据结构 🔥座右铭:“不要等到什么都没…...
springboot+vue 刘老师
课程内容 前端:vue elementui 后端:springboot mybatisplus 公共云部署 ------boot-------- 热部署 不用devtools,交给jrebel工具 RequestMapping 参数 value 路径 method 方法consumes 请求媒体类型 如 application/jsonproduces …...
学生网上考试报名系统的设计与实现
技术栈: MySQL、Maven、SpringBoot、Spring、SpringMVC、MyBatis、HikariCP、fastjson、slf4j系统功能:用户角色: (1)登录:用户在登录界面输入正确的账户名和密码,点击登录,系统将与…...
大数据领域 OLAP 技术的发展趋势展望
大数据领域OLAP技术的发展趋势展望 关键词:OLAP、大数据分析、实时决策、云原生、AI融合 摘要:本文从超市老板的"销售密码"故事出发,用通俗易懂的语言拆解OLAP(在线分析处理)技术的核心逻辑,结合当前大数据技术演进趋势,深入探讨OLAP在实时化、云原生化、AI融…...
突破限制:NCM音乐格式转换与跨平台播放完全指南
突破限制:NCM音乐格式转换与跨平台播放完全指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 音乐文件解密是许多音乐爱好者面临的实际需求,尤其是当你希望在不同设备上自由播放从网易云音乐下载的NCM格式文…...
【力扣100题】09.反转链表
一、题目描述 给定单链表的头节点 head,反转链表并返回反转后的链表。 示例 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]输入:head [1,2] 输出:[2,1]输入:head [] 输出:[]二、核心思路 关键观察…...
【卷积神经网络作业实现人脸的关键点定位功能】
下面是完成这道题目的代码:import os import cv2 import numpy as np import pandas as pd import torch import torch.nn as nn from torch.utils.data import Dataset,DataLoader from torchvision import transforms import matplotlib.pyplot as plt1. 数据集定…...
UV固化三防漆好用吗?光固化速度与设备要求
UV固化三防漆好用吗?光固化速度与设备要求高效快速的固化优势 UV固化三防漆(也称紫外光固化保形涂层)是一种专为印刷电路板(PCB)设计的保护材料,通过紫外光照射触发光引发剂瞬间聚合,实现快速固…...
告别硬件烧钱!用Proteus仿真Arduino UNO做智能小车传感器方案选型
告别硬件烧钱!用Proteus仿真Arduino UNO做智能小车传感器方案选型 在创客和电子竞赛领域,智能小车一直是热门项目,但高昂的硬件成本常常让爱好者望而却步。一套完整的智能车系统可能包含多个传感器、电机驱动模块和控制器,实体采购…...
Element Plus访问优化指南:从卡顿到流畅的开发体验提升方案
Element Plus访问优化指南:从卡顿到流畅的开发体验提升方案 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus 在前端开发过程中,你是否…...
intv_ai_mk11多场景落地:覆盖内容运营、教育辅助、行政办公等6大方向
intv_ai_mk11多场景落地:覆盖内容运营、教育辅助、行政办公等6大方向 1. 模型介绍与核心能力 intv_ai_mk11是一款基于Llama架构的中等规模文本生成模型,特别适合处理通用问答、文本改写、解释说明和简短创作等任务。这个模型已经完成了本地部署优化&am…...
别再傻傻分不清了!一文搞懂微信支付代金券和商家券的核心区别与适用场景
微信支付代金券VS商家券:技术选型与场景化应用指南 在数字化营销的浪潮中,优惠券作为连接商户与消费者的重要纽带,其技术实现方式直接影响营销效果与用户体验。微信支付提供的代金券与商家券看似功能相似,实则存在架构级差异。本文…...
优化算法避坑指南:为什么BFGS比DFP更常用?从数值稳定性到工程实践详解
优化算法避坑指南:为什么BFGS比DFP更常用?从数值稳定性到工程实践详解 在机器学习模型训练和工程优化问题中,我们常常需要求解无约束优化问题。当目标函数的海森矩阵难以计算或维度较高时,拟牛顿法因其出色的平衡性成为首选。但面…...
