更新时间: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

相关文档