更新时间:2026-07-28 GMT+08:00
列存数据磁盘扩展
HTAP提供列存数据磁盘扩展功能,即当实际列存数据空间占用大于HTAP内存上限时,超出部分通过磁盘空间管理。该功能可通过设置参数htap_memctl_policy='swap'开启。
该功能同时配套冷热数据管理来尽可能减少访问数据的磁盘I/O开销。列存元数据始终存储在内存中,当HTAP可用内存不足时,后台将访问频次较低的列存数据持久化到磁盘上,当内存充足时,则尽可能将磁盘中的热点数据重新加载到内存中维护。列存扫描查询过程中不会进行冷热数据的换入换出,而是由后台线程根据数据冷热进行冷热数据的换入换出。
示例:
--创建和切换数据库。
gaussdb=# CREATE DATABASE db1;
CREATE DATABASE
gaussdb=# \c db1
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "db1" as user "XXX".
--查看GUC参数。
db1=# SHOW htap_memctl_policy;
htap_memctl_policy
--------------------
swap
(1 row)
db1=# SHOW htap_max_mem_size;
htap_max_mem_size
-------------------
100MB
(1 row)
db1=# CREATE TABLE t1(c1 int, c2 int, c3 varchar(512)) WITH (storage_type=ustore);
CREATE TABLE
db1=# INSERT INTO t1 VALUES(
generate_series(0,2000000),
generate_series(0,2000000),
repeat('abcabcabc', 50)
);
INSERT 0 2000001
db1=# ALTER TABLE t1 COLVIEW;
ALTER TABLE
db1=# \x on
Expanded display is on.
--查看溢出的磁盘文件状态。
db1=# SELECT * FROM gs_htap_file_status('db1');
-[ RECORD 1 ]----+-------------------------
db_oid | 16734
file_name | global/imcu/16734/2_imcu
file_id | 2
extent_size | 64
allocated_blocks | 8704
total_blocks | 16384
high_water_mark | 8704
utilization | .53125
ext |
db1=# \c postgres
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "postgres" as user "XXX".
gaussdb=# DROP DATABASE db1;
DROP DATABASE 父主题: 使用指导