前置准备
本节最佳实践基于如下软硬件环境及数据集进行验证:
- 数据库版本:GaussDB Kernel 507.0。
- 硬件环境:鲲鹏服务器,2路CPU,128核。
- 数据集:TPC-H Benchmark(Scale Factor=100) 。TPC-H Benchmark介绍及使用请参考https://www.tpc.org/tpch/。
在使用HTAP能力前,需要确保相关功能与参数已正确配置。
开启HTAP功能
通过参数enable_htap控制HTAP功能开关,需确保其已开启:
gaussdb=# SHOW enable_htap; -- 查看enable_htap参数是否开启 enable_htap ------------- on (1 row)
如果enable_htap=off,可通过gs_guc工具设置,该参数为POSTMASTER类型,需要重启生效,参考命令:
gs_guc set -Z coordinator -Z datanode -N all -I all -c "enable_htap= on"; cm_ctl stop; cm_ctl start;
设置HTAP最大可用内存
用户可通过参数htap_max_mem_size设置HTAP可使用的最大内存空间。
在缺乏明确业务需求的情况下,建议依据计划创建的IMCV(In-Memory Column View)所需内存规模进行配置。以TPC-H中的lineitem表为例:
查询该表在行存中的实际占用空间,约为92GB:
gaussdb=# SELECT * FROM pg_relation_size('lineitem'); -- 单位字节
pg_relation_size
------------------
99043278848
(1 row) 通常情况下,单表IMCV的内存占用约为其行存空间的1.2~1.5倍。在实际部署中,可基于该经验值对htap_max_mem_size进行初步配置。
此外,也可通过系统函数gs_imcu_size_estimation对IMCV的内存使用情况进行更精确的预估:
gaussdb=# SELECT * FROM gs_imcu_size_estimation('lineitem', NULL, NULL);
node_name | estimated_size
-----------+----------------
datanode1 | 99918380106
(1 row) 在实际配置时,建议以系统函数gs_imcu_size_estimation的预估值为参考,并预留一定内存余量,以保证IMCV的稳定创建与运行。
开启列存压缩功能(可选)
当创建IMCV所需内存超过系统可分配的HTAP内存(htap_max_mem_size)时,可通过启用列存压缩来降低内存占用。
通过参数htap_compression_methods控制压缩策略,推荐设置为all,由系统根据数据特征自动选择合适的压缩算法:
gaussdb=# SHOW htap_compression_methods; -- 查询是否开启压缩 htap_compression_methods -------------------------- all (1 row)