GBase 8s
其他
文章

南大通用GBase 8s列存存储功能说明

发表于2026-07-18 16:45:2195次浏览0个评论

在海量数据统计、多维分析类业务场景中,传统行存储往往存在扫描量大、IO 消耗高的性能瓶颈。GBase 提供 INMEMORY 列存存储能力,通过列式数据组织形式显著提升聚合、分组、排序等分析类查询效率。下文为官方完整列存存储使用文档,涵盖建表语法、属性修改、查询规则、参数配置、系统表等全部核心内容,供开发与运维人员查阅使用。

列存存储

列存定义

--创建t1表,表属性指定为列存
CREATE TABLE t1( a int, b int, c int) INMEMORY;
--创建t2表,表属性指定为列存,c指定为非列存
CREATE TABLE t2( a int, b int,c int) INMEMORY INMEMORY(a,b) NO INMEMORY(c);
--创建t3表,表属性指定为非列存,a,b指定为列存
CREATE TABLE t3( a int, b int,c int) NO INMEMORY INMEMORY(a,b) ;
--创建t4表,不指定表的列存属性,c指定为非列存,a,b指定为列存
CREATE TABLE t4( a int, b int,c int) INMEMORY(a,b) NO INMEMORY(c);

修改列存属性

--修改t1表为非列存表
ALTER TABLE t1 NO INMEMORY;
--修改t2表a字段为非列存
ALTER TABLE t2 NO INMEMORY(a);
--修改t3表a,b为非列存,c为列存
ALTER TABLE t3 INMEMORY(c) NO INMEMORY(a,b);

列存表强制同步

ALTER TABLE table_name FORCE INMEMORY;

列存查询支持场景

  • 带聚合函数的查询 带包含order by, group by, olap函数,聚合函数等至少一种分析算子的查询 如SELECT c4, COUNT(c1), AVG(c7) FROM t1 WHERE c10 > '2025-01-01 08:00:00' GROUP BY c4;

  • 参数 / HINT 强制查询 参数 INMEMORY_QRY 配置为2(如 onmode -wf INMEMORY_QRY = 2) 使用 INMEMORY HINT(如 SELECT /*+ INMEMORY */ * FROM 表名;) 查询界面无法知道语句是否执行了INMEMORY查询,可以通过查看执行计划中的Query Statistics,如果为memqry则为列存查询。

QUERY: (OPTIMIZATION TIMESTAMP: 11-18-2025 17:30:15)
------
select sum(c1) from t1
?
Estimated Cost: 2
Estimated # of Rows Returned: 1
?
 1) gbasedbt.t1: SEQUENTIAL SCAN
?
?
Query statistics:
-----------------
?
 Table map :
 ----------------------------
 Internal name     Table name
 ----------------------------
?
 type     rows_prod  est_rows  time       est_cost
 -------------------------------------------------
 memqry   1          0         00:00.00   0

相关参数配置

列存相关的配置参数位于$GBASEDBTDIR/etc/onconfig.servername(servername为实例名后缀),配置方式参考如下:

INMEMORY0 关闭列存功能1 为默认值,打开列存功能1.修改配置文件重启数据库服务
INMEMORY_QRY0 数据库不进行列存查询1 只有符合要求且存在olap分析算子(order by/group by/olap函数/聚合函数)的查询语句进行列存查询2 强制进行列存查询1.修改配置文件重启数据库服务2.动态设置onmode -wf INMEMORY_QRY=1
INMEM_MEM_LIMITINMEMORY的内存大小限制1.修改配置文件重启数据库服务2.set environment inmemory memlimit '4G';
INMEM_TEMPDBSINMEMORY的临时磁盘空间大小限制1.修改配置文件重启数据库服务2.set environment inmemory tempdbs '50G';
INMEM_THREADS列存线程数1.修改配置文件重启数据库服务
INMEM_TEMPDBS_PATH配置临时空间目录,默认值修改为 $GBASEDBTDIR/tmp1.修改配置文件重启数据库服务

可以使用以下命令查询当前INMEMORY内存和磁盘使用情况:

info?inmemory;

系统表

sysmaster库下新增系统表sysinmemory,用于保存表的列存相关属性。

类型解释
databasechar(128)数据库
ownernchar(32)所属者
tabnamenvarchar(128,0)表名
tabidserial表ID
objnamenvarchar(128,0)对象名
objtypechar(1)对象列存类型objtype为”T”表示该行记录为列存,若为”C”则表示列存表中开启列存功能列的信息。
objpartninteger表的物理存储位置
objcolnosmallint列存列的列号
objcoltypesmallint列存列类型
objcolleninteger列存列长度

本文完整收录 GBase INMEMORY 列存存储原生文档内容,覆盖建表、属性变更、查询校验、参数调优、系统表查询全流程操作。大家在报表、离线分析等 OLAP 场景开发时,可直接参考文中 SQL 语法与参数配置;若实操中遇到列存未生效、内存资源不足、执行计划无 memqry 标识等问题,欢迎在社区留言交流,后续会持续更新相关排错经验与优化案例。

评论

登录后才可以发表评论