
# 前置准备
本节最佳实践基于如下软硬件环境及数据集进行验证：
- 数据库版本：GaussDB Kernel 507.0。
- 硬件环境：鲲鹏服务器，2路CPU，128核。
- 数据集：TPC-H Benchmark （Scale Factor=10）。TPC-H Benchmark介绍及使用请参考<https://www.tpc.org/tpch/>。
在使用HTAP能力前，需要确保相关功能与参数已正确配置。
#### 创建数据库
分布式下HTAP功能仅支持ORA兼容性数据库，如果当前数据非ORA兼容性，需创建ORA兼容性数据库：
```
gaussdb=# CREATE DATABASE htapdb WITH DBCOMPATIBILITY='ORA';
CREATE DATABASE
gaussdb=# \c htapdb
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "htapdb" as user "xxx".
htapdb=#
```
#### 开启HTAP功能
通过参数enable_htap控制HTAP功能开关，需确保其已开启：
```
htapdb=# 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设置单个DN节点上HTAP可使用的最大内存空间。
在缺乏明确业务需求的情况下，建议依据计划创建的IMCV（In-Memory Column View）所需内存规模进行配置。以TPC-H中的lineitem表为例：
查询该表在行存中的实际占用空间，约为92GB：
```
htapdb=# SELECT * FROM pg_relation_size('lineitem'); -- 单位字节
 pg_relation_size 
------------------
       9901547520
(1 row)
```
通常情况下，单表IMCV的内存占用约为其行存空间的1.2～1.5倍。在实际部署中，可基于该经验值对htap_max_mem_size进行初步配置。
此外，也可通过系统函数gs_imcu_size_estimation对IMCV的内存使用情况进行更精确的预估：
```
htapdb=# SELECT * FROM gs_imcu_size_estimation('lineitem', NULL, NULL);
 node_name | estimated_size 
-----------+----------------
 datanode2 | 6780447817
 datanode1 | 6786591780
(2 rows)
```
在实际配置时，建议以系统函数gs_imcu_size_estimation的预估值为参考，并预留一定内存余量，以保证IMCV的稳定创建与运行。
#### 开启列存压缩功能（可选）
当创建IMCV所需内存超过系统可分配的HTAP内存（htap_max_mem_size）时，可通过启用列存压缩来降低内存占用。
通过参数htap_compression_methods控制压缩策略，推荐设置为all，由系统根据数据特征自动选择合适的压缩算法：
```
htapdb=# SHOW htap_compression_methods; -- 查询是否开启压缩
 htap_compression_methods 
--------------------------
 all
(1 row)
```
