本文介绍了如何免费体验PolarDB PostgreSQL版的冷数据分层存储。
背景
PolarDB PostgreSQL版支持冷热数据分层存储功能,在保证正常增删改查的同时,使用OSS等更低成本的存储介质,将冷热数据进行分层存储。将访问频率和更新频率低的数据转存到OSS中,可以有效降低存储成本。相比其他的分层存储方案,我们的方案具有以下优势:
透明访问:冷数据表的功能和使用方式和普通表完全对齐,无需改写SQL,即可支持所有数据类型的增删改查(普通的分层存储功能通常只读),建立索引/视图等操作。
缓存加速:针对冷数据的查询,支持预热、预读、读写合并、本地缓存等功能,优化对冷数据读写的性能。
安全可靠:支持对OSS数据使用各类备份恢复功能,包括数据快照和快照恢复、按时间点恢复、库表恢复等。
模式多样:支持对索引、子分区、单独列等不同数据库对象进行分层存储。
影响
本功能体验不涉及生产环境的部署,因此不会影响业务。
费用
本次体验中,由于体验涉及到的资源不归属于您,因此不会产生任何费用,您可以放心体验。
体验内容
体验环境
在本免费体验中,阿里云提供了预置环境供您操作体验,预置环境的详情如下:
集群:提供了两个基础配置一致的PolarDB PostgreSQL版集群,其中一个集群开启冷数据分层存储功能。基础配置如下:
内核版本:14.11.21.1
产品版本:标准版
子系列:通用规格
集群规格:集群包含1个主节点,规格为2核4 GB
存储类型: ESSD PL1云盘
是否开启热备集群:关闭存储热备集群
测试数据集:集群中预置测试所用的表为part_test表,数据量为39311995条数据。
观测指标
存储大小:数据存储空间大小。单位:GB。
存储价格:数据存储价格。单位:元/小时。
操作步骤
进入瑶池解决方案体验馆。
单击核心功能体验,在冷数据分层存储-存储降本页面单击免费体验。
单击页面下方创建免费体验任务按钮,并在弹出框中单击确定开始创建PolarDB PostgreSQL冷数据分层存储任务。
稍等片刻后,单击刷新任务列表,可以看到您创建的体验任务。
单击查看详情,进入实时查询情况页面。
在未开启冷数据存储功能的集群中执行普通查询任务。
说明请根据页面按钮提示,手动单击按钮执行每一步操作。若在倒计时结束时没有手动单击按钮,则会自动执行对应操作。
整个体验过程中,您可以在左侧观察数据存储空间和存储价格。
单击开始任务按钮。
单击查看原始表的结构按钮,自动执行如下命令。
select * from part_test limit 20; t | v ---------------------+---------------------------------- 2024-01-01 00:00:00 | 8bc3c32888431fb2ca78368589edbb51 2024-01-01 00:00:00 | 10dd16b02fad7066b4532605a46633ac 2024-01-01 00:00:00 | 890283616bf80665f93e1d6966120ff4 2024-01-01 00:00:00 | 6cd1b1f8d6084799ffb603220a1289dd 2024-01-01 00:00:01 | b6f33d62732fea57d6781f0f51bdac2c 2024-01-01 00:00:01 | 4bb3cb8afcbcb135228f8db8427ea6f1 2024-01-01 00:00:01 | 6a0383df7f073dc7715130225c21294b 2024-01-01 00:00:01 | e9ce438e298faedf843e4ea66420b5a2 2024-01-01 00:00:01 | 5bbfc2a3e418c09db587de32dcacd45d 2024-01-01 00:00:02 | 8fc4fa3aacab7a9cf53b8711fcba61df 2024-01-01 00:00:02 | f0218aef3d38936b96f39686770f7e10 2024-01-01 00:00:02 | 5489bcebc362f05f0655313b707e1f9d 2024-01-01 00:00:02 | fc62e6e232eabe77ec595aab06140113 2024-01-01 00:00:02 | bcf574b2873d39d7a7af17212ee38aab 2024-01-01 00:00:03 | 72204146ddf432c9172085eece1259bd 2024-01-01 00:00:03 | 4dd4e626b48a21630868d116a7df388e 2024-01-01 00:00:03 | bac57e9610f0f143f5ba9a58b546ac6e 2024-01-01 00:00:03 | aec801864fe43c2b71531c48717ff58d 2024-01-01 00:00:03 | e4a1546f7ca7cdc76441f79147e12469 2024-01-01 00:00:04 | 4875d5728e08fdc447f467e006d643ea (20 rows)
单击查看原始表数据量按钮,自动执行如下命令。
select count(*) from part_test; count ---------- 39311995 (1 row)
单击体验普通查询性能按钮,自动执行以下SQL语句,普通状态下查询表中一条数据,请关注查询时间。
\timing Timing is on. SELECT v from part_test where t = '2024-03-12 13:32:21'; v ---------------------------------- 0fcd3ff19a556f266875fc5203267b5c b547775465c7f69e3504f3cfb1249220 7b8902297d9fcd0fa492f562dcb86692 d7f022205e5bedd795a8cb03dbb7a39a a0faf266a3be094876f0689402f6ba16 (5 rows) Time: 0.891 ms \timing Timing is off.
单击查看普通状态下存储空间状况按钮,自动执行以下SQL语句,普通状态下,数据全部存储在云盘中,存储大小和存储费用可见左侧数据全部存储在云盘表格。
SELECT polar_evict_smgrcache(); polar_evict_smgrcache ----------------------- (1 row) SELECT pg_size_pretty(polar_total_partition_table_size_1('part_test')) AS local_size ,pg_size_pretty(polar_osfs_total_partition_table_size_1('part_test' )) AS oss_size; local_size | oss_size ------------+---------- 3320 MB | 0 bytes (1 row)
在普通查询完成后,任务将自动切至开启冷数据分层存储集群继续执行任务。请根据页面按钮提示,手动点击按钮执行每一步操作。若在倒计时结束时没有手动点击执行,则会自动执行对应操作。
单击转移第一分区数据存储按钮,自动执行如下SQL语句,转存部分数据。
ALTER table part_test_partition_1 SET tablespace oss;
单击查看当前存储空间状况按钮,自动执行如下SQL语句,部分数据被转存到OSS存储中,在左侧图表中可见转存第一个分区后数据占用的存储空间及价格。
SELECT polar_evict_smgrcache(); polar_evict_smgrcache ----------------------- (1 row) SELECT pg_size_pretty(polar_total_partition_table_size_1('part_test')) AS local_size ,pg_size_pretty(polar_osfs_total_partition_table_size_1('part_test' )) AS oss_size; local_size | oss_size ------------+---------- 2189 MB | 331 MB (1 row)
单击查询一条未转存数据按钮,自动执行如下SQL语句,可正常操作未转存的分区数据。
SELECT v from part_test where t = '2024-03-12 13:32:21'; v ---------------------------------- 0fcd3ff19a556f266875fc5203267b5c b547775465c7f69e3504f3cfb1249220 7b8902297d9fcd0fa492f562dcb86692 d7f022205e5bedd795a8cb03dbb7a39a a0faf266a3be094876f0689402f6ba16 (5 rows)
单击转移剩余分区数据,查看左图中转存后存储空间及价格变化按钮,自动执行以下SQL语句,转存全部数据至OSS存储,存储成本降低。
ALTER table part_test_partition_2 SET tablespace oss; ALTER TABLE SELECT polar_evict_smgrcache(); polar_evict_smgrcache ----------------------- (1 row) SELECT polar_evict_smgrcache(); polar_evict_smgrcache ----------------------- (1 row) SELECT pg_size_pretty(polar_total_partition_table_size_1('part_test')) AS local_size ,pg_size_pretty(polar_osfs_total_partition_table_size_1('part_test' )) AS oss_size; local_size | oss_size ------------+---------- 1131 MB | 641 MB (1 row) ALTER table part_test_partition_3 SET tablespace oss; ALTER TABLE mydb=> SELECT polar_evict_smgrcache(); polar_evict_smgrcache ----------------------- (1 row) SELECT polar_evict_smgrcache(); polar_evict_smgrcache ----------------------- (1 row) SELECT pg_size_pretty(polar_total_partition_table_size_1('part_test')) AS local_size ,pg_size_pretty(polar_osfs_total_partition_table_size_1('part_test' )) AS oss_size; local_size | oss_size ------------+---------- 0 bytes | 972 MB (1 row) select polar_osfs_prewarm('part_test_partition_3',0); polar_osfs_prewarm -------------------- 125440 (1 row)
单击对已转存的表,查询一条数据按钮,自动执行以下SQL语句,对于转存的表,可正常进行增删改查操作,且对比普通查询,无明显性能变化。
\timing Timing is on. SELECT v from part_test where t = '2024-03-12 13:32:21'; v ---------------------------------- 0fcd3ff19a556f266875fc5203267b5c b547775465c7f69e3504f3cfb1249220 7b8902297d9fcd0fa492f562dcb86692 d7f022205e5bedd795a8cb03dbb7a39a a0faf266a3be094876f0689402f6ba16 (5 rows) Time: 1.623 ms \timing Timing is off.
单击插入一条数据并查看结果按钮,自动执行以下SQL语句。
INSERT INTO part_test (t, v) SELECT '2024-02-03 01:00:23', 'NEW INSERT TE XT'; INSERT 0 1 SELECT * FROM part_test WHERE t = '2024-02-03 01:00:23'; t | v ---------------------+---------------------------------- 2024-02-03 01:00:23 | f7dddbb0f15bdc11eec19630b1487167 2024-02-03 01:00:23 | 75398f09019613565f39a3abc180ca0f 2024-02-03 01:00:23 | a7c0befc45d019360f31c3ebd8880268 2024-02-03 01:00:23 | a3c0f17c371b8ab7459f4e47df69a393 2024-02-03 01:00:23 | NEW INSERT TEXT 2024-02-03 01:00:23 | 1a8925ab15c73a5813393e3b07b6be14 (6 rows)
单击更新一条数据并查看结果按钮,自动执行以下SQL语句。
UPDATE part_test SET v = md5(random()::text) WHERE t= '2024-02-03 01:00:2 3' AND v = (SELECT v FROM part_test WHERE t= '2024-02-03 01:00:23' LIMIT 1); UPDATE 1 SELECT * FROM part_test WHERE t = '2024-02-03 01:00:23'; t | v ---------------------+---------------------------------- 2024-02-03 01:00:23 | 667bf9e88cb9c234b1e9cd75895df104 2024-02-03 01:00:23 | 75398f09019613565f39a3abc180ca0f 2024-02-03 01:00:23 | a7c0befc45d019360f31c3ebd8880268 2024-02-03 01:00:23 | a3c0f17c371b8ab7459f4e47df69a393 2024-02-03 01:00:23 | NEW INSERT TEXT 2024-02-03 01:00:23 | 1a8925ab15c73a5813393e3b07b6be14 (6 rows)
单击转存索引按钮,自动执行以下SQL语句,将索引转存到OSS内,依然可以进行正常的增删改查操作。
ALTER index part_test_t_idx set tablespace oss; ALTER INDEX SELECT polar_evict_smgrcache(); polar_evict_smgrcache ----------------------- (1 row) SELECT pg_size_pretty(polar_total_partition_table_size_1('part_test')) AS local_size ,pg_size_pretty(polar_osfs_total_partition_table_size_1('part_test') ) AS oss_size; local_size | oss_size ------------+---------- 0 bytes | 972 MB (1 row)
单击删除一条数据按钮,自动执行以下SQL语句。
DELETE FROM part_test WHERE t = '2024-02-03 01:00:23' AND v = 'NEW INSERT TEXT';
(可选)对于已创建的任务,您可以在PolarDB PostgreSQL冷数据分层存储页面,单击体验记录,在任务列表中,单击全部任务或我的任务,查看体验结果及其详情。
结果分析
降低存储成本:PolarDB PostgreSQL版可将冷数据存储至OSS中,降低90%以上的存储成本。
使用方式无变化:转存至OSS的冷数据表其使用方式和普通表完全对齐,无需改写SQL语句。
性能无明显变化:可自动缓存冷数据表中的热点访问区域,使其性能与普通表无明显变化。