更新时间:2026-07-28 GMT+08:00
列存数据磁盘扩展
HTAP提供列存数据磁盘扩展功能,即当实际列存数据空间占用大于HTAP内存上限时,超出部分通过磁盘空间管理。该功能可通过设置参数htap_memctl_policy='swap'开启。
该功能同时配套冷热数据管理来尽可能减少访问数据的磁盘I/O开销。列存元数据始终存储在内存中,当HTAP可用内存不足时,后台将访问频次较低的列存数据持久化到磁盘上,当内存充足时,则尽可能将磁盘中的热点数据重新加载到内存中维护。列存扫描查询过程中不会进行冷热数据的换入换出,而是由后台线程根据数据冷热进行冷热数据的换入换出。
示例:
--查看GUC参数。
htapdb=# SHOW htap_memctl_policy;
htap_memctl_policy
--------------------
swap
(1 row)
htapdb=# SHOW htap_max_mem_size;
htap_max_mem_size
-------------------
100MB
(1 row)
htapdb=# CREATE TABLE t1(c1 int, c2 int, c3 varchar(512)) WITH (storage_type=ustore);
CREATE TABLE
htapdb=# INSERT INTO t1 VALUES(
generate_series(0,2000000),
generate_series(0,2000000),
repeat('abcabcabc', 50)
);
INSERT 0 2000001
htapdb=# ALTER TABLE t1 COLVIEW;
ALTER TABLE
htapdb=# SELECT 1 FROM gs_imcv_flush('t1');
?column?
----------
1
(1 row)
htapdb=# \x on
Expanded display is on.
--查看溢出的磁盘文件状态。
htapdb=# SELECT * FROM gs_global_htap_file_status('htapdb');
-[ RECORD 1 ]----+-------------------------
node_name | dn_6003_6004
db_oid | 42055
file_name | global/imcu/42055/2_imcu
file_id | 2
extent_size | 1
allocated_blocks | 422
total_blocks | 16384
high_water_mark | 1043
utilization | .0257568
ext |
-[ RECORD 2 ]----+-------------------------
node_name | dn_6001_6002
db_oid | 42085
file_name | global/imcu/42085/2_imcu
file_id | 2
extent_size | 1
allocated_blocks | 701
total_blocks | 16384
high_water_mark | 922
utilization | .0427856
ext |
htapdb=# DROP TABLE t1;
DROP TABLE 父主题: 使用指导