GBase 8s列存存储功能说明
2026/7/22 1:41:35 网站建设 项目流程

在海量数据统计、多维分析类业务场景中,传统行存储往往存在扫描量大、IO 消耗高的性能瓶颈。GBase(gbase database) 提供 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 标识等问题,欢迎在社区留言交流,后续会持续更新相关排错经验与优化案例。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询