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

相关文档