本文介绍了将冷数据归档为IBD格式的方法。
归档为IBD格式目前处于灰度发布阶段。如需使用,请前往配额中心,根据配额ID polardb_innodb_oss_enable
找到配额名称,在对应的操作列单击申请来开通该功能。
前提条件
PolarDB MySQL版集群需为MySQL 8.0.1版本且修订版本为8.0.1.1.43或以上。
已开启冷数据归档功能。
注意事项
归档后的表的使用方法与存储在InnoDB引擎上的表一致,能正常执行DML操作且支持事务,但无法执行DDL操作。
执行冷数据归档时,将无法访问正在归档中的表数据。
说明支持将参数
polar_oss_ddl_shared
的值设置为ON,以便读取访问正在执行冷数据归档的表数据。执行数据备份操作时,不会对OSS上的数据进行备份,故无法对OSS上的数据执行库表恢复和按时间点恢复操作。
归档冷数据的过程中会占用一定量的网络和存储I/O资源,建议在业务低峰期或非活跃集群上执行冷数据归档操作。
对象存储I/O时延是块存储I/O时延的百倍以上,您需评估因此导致的长SQL时延的影响。
使用说明
将表数据归档至OSS
当表中的数据为冷数据且对延时不敏感,或访问集中可被缓存且尾访问延迟不敏感时,您可以通过该语法将PolarStore块存储表转换为OSS对象存储表:
ALTER TABLE table_name STORAGE_TYPE OSS;
将数据导回至PolarStore存储
ALTER TABLE table_name STORAGE_TYPE NULL;
删除OSS上对应的文件
当您将OSS上的表删除或导回至PolarStore后,OSS上的文件不会同步删除。确定数据不再使用后,您可以使用如下语法删除OSS上对应的文件:
CALL dbms_oss.delete_table_file('database_name', 'table_name');
由于删除OSS上对应文件的操作是异步执行的,故需要等待集群中的所有节点都不再依赖OSS文件后才可完全删除,且流量较大时存在一定时延。因此,如果上述命令执行失败并返回错误信息OSS files are still in use
时,您可以等待一段时间后再重新执行该命令。
示例
执行如下命令,创建数据库。
CREATE DATABASE oss;
使用数据库。
USE oss;
执行如下命令,创建表
toss1
。CREATE TABLE `toss1`( `uid` int NOT NULL AUTO_INCREMENT, `text_data` text NOT NULL, `save_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY(`uid`) ) ENGINE = InnoDB;
执行如下命令,创建存储过程
populate
。DELIMITER | CREATE PROCEDURE populate(IN `cnt` INT) BEGIN DECLARE i INT DEFAULT 1; WHILE (i <= cnt) DO INSERT INTO `toss1` (`text_data`) VALUES (REPEAT("#", 6333)); SET i = i + 1; END WHILE; END | DELIMITER ;
调用存储过程,向表
toss1
中插入数据。CALL populate(5000);
执行如下命令,将数据归档至OSS。
ALTER TABLE `toss1` STORAGE_TYPE OSS;
查询
toss1
表中的数据。SELECT COUNT(*) FROM `toss1`;
执行如下命令,删除OSS上的
toss1
表。DROP TABLE `toss1`;
执行如下命令,删除OSS数据库。
DROP DATABASE oss;
执行如下命令,删除OSS上对应的文件。
CALL dbms_oss.delete_table_file('oss', 'toss1');
冷数据归档耗时
执行冷数据归档操作的并发线程数量由参数innodb_oss_copy_worker
控制,其参数值与集群规格绑定。
不同线程和数据量的冷数据归档耗时如下:
单张表的数据量 | 冷数据归档耗时 | |
线程数量(4个) | 线程数量(8个) | |
100 GB | 约18分钟 | 约10分钟 |
1 TB | 约2.5小时 | 约1.3小时 |
10 TB | 约24小时 | 约13小时 |