首页 > 数据库 >解读GaussDB(for MySQL) 冷热存储分离实现原理

解读GaussDB(for MySQL) 冷热存储分离实现原理

时间:2024-09-12 14:27:47浏览次数:9  
标签:存储 GaussDB 分离 MySQL 冷热 分区

本文分享自华为云社区《GaussDB(for MySQL)新特性解读:冷热存储分离》,作者:GaussDB 数据库。

技术背景

业务长期运行,但随着时间推移,越来越多的数据被访问频率降低,从而变成为所谓的"冷数据"。若直接将这些冷数据删除,会面临数据丢失的风险以及高昂的恢复成本;若保持冷数据现有的存储方式不变,存储空间占用越来越多,存储成本将持续增加。

同时,在无法有效利用查询索引加速的情况下,数据表的记录膨胀会进一步降低查询效率。如若用户自己识别、分离并转存冷数据至低成本存储中,需要考虑诸多因素:

a. 如何构建脚本。从表中dump一行行冷数据到OBS等超低成本存储中,这需要借助其它计算资源完成;

b. 如何提升在线迁移效率,同时降低对现有业务性能的影响;

c. 如何保障数据一致性和可靠性,并在出现问题时快速处理;

d. 当导出的数据无法直接访问时,如何倒回到实例的表中;

这一系列问题,不仅涉及的改造工程量庞大,而且实施成本很高。

 

特性价值

GaussDB(for MySQL)冷热存储分离新特性,支持冷表/分区可读和混合分区管理。

 

冷热存储分离特性能够通过一条简单SQL语句实现表/分区的灵活转储,并快速将物理页并行地从CDE转储到OBS中,单位存储成本最高可降低90%。同时,冷数据在线可读写,确保现有的基于Innodb的访问方式,支持事务,满足数据一致性,访问冷表无需对业务进行改造。

此外,冷热存储分离特性还支持定义规则。通过自动创建分区和指定何时为冷分区并将其自动归档到OBS中,同时可指定“冷分区对查询计划不可见”(rds_schs_enable_partition_visible)的模式,来提升对表中热数据的访问性能,实现冷热混合分区的统一高效管理。

 

实现原理

GaussDB(for MySQL)冷热存储分离特性实现原理如下:

 

1. 并行地从分布式存储中抽取冷数据对应的页面组装成Object,并快速地将冷数据归档到OBS中,实现数据0丢失。

2. 通过meta管理,使得数据操作涉及的Page可以快速实现定位和寻址。

3. 通过meta管理,转储过程支持断点续传,即用户可以重试数据转储操作,确保已转储的数据无需重复转储,从而在HA(高可用性)故障恢复中显著提高重做效率。

4. 归档的数据支持备份恢复的能力,支持按指定时间点进行恢复,且恢复后这些被归档的数据能够快速投入使用。

5. 通过“多版本快照的 Lock free”这一转储方式,在任何时刻,被归档的表都能够无阻塞地进行数据操作。

6. 无需使用Innodb Buffer Pool等性能关键的资源,不仅对主机资源占用小,CPU和内存占用始终在10%以下,还能提供转储过程中的流控能力,从而最大程度地避免因争抢公共IO资源而影响业务。

 

业务场景/流程

1. 新实例开启冷热存储分离

登录管理控制台,在云数据库 GaussDB(for MySQL)的“实例管理”页面,单击目标实例名称,进入基本信息页面。在左侧导航栏,点击“冷热分离”,在“冷热分离”右侧点击图片,在弹框中点击“确定”,打开冷热分离开关。

 

2.使用冷热存储分离

下面采用DAS数据管理服务,通过SQL命令来介绍冷热存储分离特性的使用。

1)创建冷表

CALL dbms_schs.make_io_transfer("start", "库名", "表名", "分区名", "", "obs");

例如:

CALL dbms_schs.make_io_transfer("start", "test", "table1", "", "", "obs");

 

2)回迁冷表

CALL dbms_schs.make_io_transfer("start", "库名", "表名", "分区名", "obs", "");

例如:

CALL dbms_schs.make_io_transfer("start", "test", "table1", "", "obs", "");

 

3)查询归档或回迁状态

CALL dbms_schs.show_io_transfer("库名", "表名", "分区名");

例如:

CALL dbms_schs.show_io_transfer("test", "table1", "");

 

总结

GaussDB(for MySQL)冷热存储分离特性,支持用户直接针对Innodb的page进行归档和回迁操作,且无需调整上层业务即可访问冷数据。另一方面,在支持分区进行冷热存储分离的基础上,还支持混合分区管理,使得用户在不变更业务的情况下,可以灵活选择在查询时是否快速过滤冷分区。

 

附录

·本文作者    华为云GaussDB(for MySQL)团队

·华为云GaussDB(for MySQL)官方产品文档:

https://support.huaweicloud.com/gaussdbformysql/index.html

 

点击关注,第一时间了解华为云新鲜技术~

标签:存储,GaussDB,分离,MySQL,冷热,分区
From: https://www.cnblogs.com/huaweiyun/p/18410103

相关文章

  • 【编程基础知识】mysql中的insert into ... on DUPLICATE key和replace into的性能对
    一、概述在MySQL中,INSERTINTO...ONDUPLICATEKEYUPDATE和REPLACEINTO都是用来处理插入或更新数据的语句,但它们在性能和行为上有所不同。二、REPLACEINTOREPLACEINTO语句在遇到唯一键或主键冲突时,会先删除旧记录,然后插入新记录。这意味着它会执行两次操作:删除......
  • MySQL基础(10)- 子查询
    目录一、子查询的例子和分类1.举例需求:谁的工资比Abel的高?2.称谓的规范3.子查询的分类二、单行子查询1.单行比较操作符2.子查询中的空值问题3.非法使用子查询三、多行子查询1.多行子查询的操作符2.空值问题四、相关子查询1.基础相关子查询2.EXISTS与NOTEXISTS......
  • MySQL基础(9)- 聚合函数
    目录一、常见聚合函数1.AVG/SUM2.MAX/MIN3.COUNT二、GROUPBY的使用1.查询各个部门的平均工资,最高工资2.查询各个job_id的平均工资3.查询各个department_id,job_id的平均工资4.查询各个部门的平均工资,按照平均工资升序排列三、HAVING的使用 1.查询各个部门中......
  • 科普文:软件架构数据库系列之【MySQL5.7和MySQL 8.0的差异】
    引言MySQL作为最常用的开源关系型数据库管理系统之一,一直在不断发展和改进。随着时间的推移,MySQL也经历了多个版本的演进,每个版本都带来了一系列重要的更新和改进。其中,MySQL5.7和MySQL8是两个备受关注的版本,它们之间存在一些关键的差异。本文将深入探讨这两个版本之间的主......
  • 科普文:软件架构数据库系列之【MySQL5.7的系统表梳理】
    概叙MySQL5.7的系统中包含了多个重要的系统表,这些表分布在不同的数据库中,提供了关于数据库结构、权限、性能等关键信息的访问。mysql>\s;--------------mysqlVer14.14Distrib5.7.21,forWin64(x86_64)Connectionid:3Currentdatabase:Currentuser:......
  • Mysql Non cluster combined fields select where order by field different time co
    usemydb;droptableifexistst1;createtablet1(idintauto_incrementprimarykey,firstnamevarchar(100)notnulldefault'',lastnamevarchar(100)notnulldefault'',indexfn_ln_index(firstname,lastname)); FLUSHBINARYLO......
  • [昌哥IT课堂]|如何确定 MySQL 服务器是否为 LTS 版本(译)
     根据支持LTS(长期支持)发布的新发布模型,给定的MySQL服务器将分为以下两类:要么是LTS版本。要么是创新版本。本博客文章将解释如何确定给定的MySQL服务器是否为LTS版本。 定义发布类型MySQL服务器源代码存储库中包含一个名为MYSQL_VERSION的文件,用于定义当前发......
  • mysql 5.7 删除ibdata1 、ib_logfile 文件的数据恢复
    简介:本文记录删除ibdata1、ib_logfile文件被意外删除且无法还原或损坏的解决方案,当删除后没有重启mysql可以查询进程号,找到删除的文件可以还原回来。参考其他文章。本文介绍ibdata1、ib_logfile文件无法找到或异常没有备份的情况处理。 新安装一台mysql用作从库......
  • MySQL生成指定月份所有日期列表
    SELECTADDDATE(month.firstDay,days.day-1)ASmonthDateFROM(SELECT1ASDAYUNIONALLSELECT2UNIONALLSELECT3UNIONALLSELECT4UNIONALLSELECT5UNIONALLSELECT6UNIONALLSELECT7UNIONALLSELECT8UNIONALLSELECT9UNIONALLSELECT10UNI......
  • 【mysql】mysql之优化
     本站以分享各种运维经验和运维所需要的技能为主《python零基础入门》:python零基础入门学习《python运维脚本》: python运维脚本实践《shell》:shell学习《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战《k8》从问题中去学习k8s《docker学习》暂未更新......