变更Heap表或AO表为Beam表
云原生数据仓库 AnalyticDB PostgreSQL 版支持的存储引擎有Heap(堆表Heap Table),AO(Append-Only)和Beam。每种存储引擎都有各自的特定和适用的业务场景。当业务需求发生变化时,例如从高并发写入变为高并发读取,您可以直接变更表的存储引擎,而无需新建表并迁移原表数据。
三种存储引擎特性如下。
Heap:可承载OLTP业务,支持并发更新删除。默认情况下对不压缩数据。不支持高效的范围扫描。数据量较大时,存储成本比较高。随机读取通常更加耗时,且I/O容易成为瓶颈。适用于高并发写入和数据量较大但查询复杂度不高的场景。
AO:支持ao_row(行式存储),ao_column(列式存储)两种存储方式,但不支持设置主键。适用于高并发读取、大量写入操作和需要长期保存但访问频率较低的数据集的场景。
Beam:自研行列混存模型。支持数据压缩,支持设置主键,结合列裁剪和Zonemap提高筛选能力。支持设置压缩算法,降低数据存储成本。大幅降低了查询时的磁盘I/O次数,提高了I/O利用率。适用于高性能实时写入和高吞吐批量导入场景。
版本限制
内核版本为7.0.6.2及以上的AnalyticDB for PostgreSQL7.0版实例。
注意事项
变更存储引擎时会锁表,阻塞读写。锁表的时间与数据量有关。建议您在业务低峰期变更引擎。如果较长时间未解锁,请提交工单获取技术支持。
语法
ALTER TABLE table_name SET ACCESS METHOD access_method
参数说明
access_method
:要变更的存储引擎,取值为:heap
、beam
、ao_row
和ao_column
。
使用示例
变更普通表的存储引擎
以如下Heap表为例,为您介绍如何变更表的存储引擎。
CREATE TABLE testtable (i int) USING heap;
INSERT INTO testtable SELECT * FROM generate_series(1,10000);
将Heap表转换为Beam表。
ALTER TABLE testtable SET ACCESS METHOD beam;
将Beam表转换为Heap表。
ALTER TABLE testtable SET ACCESS METHOD heap;
指定Beam压缩算法和压缩级别,将Heap表转化为Beam表。
SET beam_default_storage_options = 'compresstype=auto, compresslevel=5'; ALTER TABLE testtable SET ACCESS METHOD beam;
说明压缩算法和压缩级别的取值,请参见压缩算法。
上述设置压缩算法和压缩级别为会话级别的设置。在设置过程中可能会导致读写速度变慢。
变更分区表的存储引擎
以如下分区表am_partitioned为例,为您介绍如何变更分区表和分区的存储引擎。
CREATE TABLE am_partitioned(x INT, y INT)
PARTITION BY HASH (x) USING heap;
CREATE TABLE am_partitioned_1 PARTITION OF am_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 0);
CREATE TABLE am_partitioned_2 PARTITION OF am_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 1);
将所有分区的存储引擎转换为Beam。
ALTER TABLE am_partitioned SET ACCESS METHOD beam;
将单个分区的存储引擎转换为Beam。
ALTER TABLE am_partitioned_1 SET ACCESS METHOD beam;
将所有分区的存储引擎从Beam转换为Heap。
ALTER TABLE am_partitioned SET ACCESS METHOD heap;