HTAP混合负载
本章节介绍HTAP(Hybrid Transactional/Analytical Processing,混合事务/分析处理)特性相关参数。
enable_htap
参数说明:是否开启HTAP特性,开启HTAP特性后,会加载COLVIEW关键字指定列的存量行存数据到内存IMCV(In-memory Column View,列式内存引擎)中,用于提高AP(Analytical Processing,分析处理)查询效率。
参数类型:布尔型
参数单位:无
取值范围:
- on:打开HTAP特性。
- off:关闭HTAP特性。
默认值:off
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:该参数默认关闭,如果需要开启,请结合数据库使用场景,存在大量AP查询时,开启该参数可以优化查询效率。纯TP查询场景不建议开启该参数。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
htap_max_mem_size
参数说明:依赖HTAP特性开启状态,设置HTAP特性可用的内存上限。当GaussDB动态内存使用达到上限后,即使HTAP内存使用未达到上限,也无法继续分配内存。
参数类型:整型
参数单位:kB
取值范围:102400 ~ 1073741824
默认值:1048576(即1GB)
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。例如,设置为1000000,不带单位,表示1000000kB;设置为1GB,带单位,表示1GB。取值如果要带单位,必须为kB、MB、GB。在不重启的情况下,可增大该参数值。如果改小该参数值,不报错,但仅重启后生效,即重启前为修改前的值,重启后为修改后的值。
设置建议:该参数不应该超过max_process_memory和最大共享内存,并根据实际使用场景合理分配空闲内存作为该参数的值。htap_memctl_policy=swap或者escape时,在加载和重建过程中可能看到htap_used_memory值略大于htap_max_mem_size,加载或重建结束后,htap_used_memory会自动回落到htap_max_mem_size以下。
手动加载/重建时内存计数极端情况下的溢出量为:同时加载表数量 * htap_rowgroup_pagenum * 8KB * 并行度(参考gs_imcv_flush)。
业务运行时极端情况下自动重建导致的溢出量为:htap_flush_workers(后台线程数) * htap_rowgroup_pagenum * 8KB。
设置不当的风险与影响:htap_max_mem_size的设置基于GaussDB的动态内存和内存管理机制。当max_process_memory设置不当、htap_max_mem_size设置过大、关闭逻辑内存管理时,可能会导致系统内存不足。当htap_max_mem_size设置过小时,根据htap_memctl_policy的取值,可能会导致创建IMCV时频繁触发内存不足异常或者触发IMCV表的落盘。
- 该参数的最大可用内存,指的是HTAP中列存形态的用户数据占用的内存,除此之外,还有IMCU的描述符等元数据的内存,不统计在该范围内。因此HTAP实际使用的内存会比这个值要大。
- 由于HTAP列存的行组是和行存一定数量的页面做映射的,即参数htap_rowgroup_pagenum,一个行组包含的IMCU个数又和表的列数对应,因此元数据底噪受到表的数据量大小、列数和行存页面映射数的影响。在页面映射数为8192,单表列数为100,加载到列存的数据量为1TB的大数据量场景,HTAP元数据底噪在1.5GB以内。
- 最大动态内存和已使用的动态内存可以通过gs_total_memory_detail视图查询获得,max_dynamic_memory表示最大动态内存,dynamic_used_memory表示已使用的动态内存。
htap_rowgroup_pagenum
参数说明:依赖HTAP特性开启状态,设置HTAP特性的行组和行存页面映射数的关系。
参数类型:整型
参数单位:无
取值范围:1000、2048、4096、8192
默认值:1000
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐100GB列存数据以下的小数据量场景使用默认值,1TB以上的列存数据场景使用最大值8192。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
htap_eviction_threshold
参数说明:依赖HTAP特性开启状态,设置HTAP特性缓冲区的换入换出阈值。
参数类型:整型
参数单位:%
取值范围:0 ~ 100
- 0:表示没有任何IMCU会被加载到共享缓冲区。
- 100:表示缓冲区只会在内存使用量超出内存上限时执行淘汰,其余时间不执行任何淘汰或加载动作。
- 其他值:表示HTAP内存占用到htap_max_mem_size * htap_eviction_threshold/ 100时,缓冲区才会开始淘汰任务。
默认值:90
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,设置0或100两个特殊值时,需要充分理解参数含义,评估影响。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
htap_memctl_policy
参数说明:依赖HTAP特性开启状态,设置HTAP特性内存管理的策略模式。
参数类型:枚举类型
参数单位:无
取值范围:
- delete:废弃参数值,强制修改后,实际生效值为escape。
- swap:表示当HTAP内存不足时,会发生数据交换,使用的策略为Anti-Cache和懒加载,不常用数据会异步落盘到本地磁盘中。如果是DDL加载表到列存,内存不足时超内存部分会直接落盘。
- escape:表示当HTAP内存不足时,新增列存数据会仅存储元数据,查询时这部分数据会回行读取而不是以列存形态存储,和所有页面全为脏页的行组类似。
默认值:swap
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
该策略在以下两种内存不足场景下生效:
- HTAP内存使用达到htap_max_mem_size (HTAP内存上限) 设置的上限;
- 全局动态内存使用量达到动态内存管控上限。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
enable_imcvscan
参数说明:依赖HTAP特性开启状态,设置是否打开HTAP内存列扫描算子IMCVScan。
参数类型:布尔型
参数单位:无
取值范围:
- on:打开HTAP内存列扫描算子IMCVScan。
- off:关闭HTAP内存列扫描算子IMCVScan。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
enable_hybrid_imcvscan
参数说明:依赖HTAP特性开启状态和enable_imcvscan参数取值,设置是否打开HTAP列回行混合扫描特性。
参数类型:布尔型
参数单位:无
取值范围:
- on:打开HTAP列回行混合扫描特性,只有当enable_imcvscan取值为on时才会真正开启该特性。
- off:关闭HTAP列回行混合扫描特性,不受enable_imcvscan的取值影响。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
imcvscan_consistency
参数说明:依赖HTAP特性开启状态和enable_imcvscan参数取值,设置列存扫描的一致性语义。
强一致语义下,无论列存数据是否存在未同步的行存变更,列存扫描始终保持和行存结果的一致。
弱一致语义下,仅扫描列存数据,当列存数据存在未同步的行存变更时,不保证和行存结果的一致,不支持列回行、备机IMCVScan。
参数类型:枚举类型
参数单位:无
取值范围:
- strong:强一致性,保证和行存扫描结果的强一致。
- weak:弱一致性,仅扫描列存数据,当列存数据存在未同步的行存变更时,不保证和行存结果一致。
默认值:strong
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值,建议仅当列存扫描结果和行存数据没有强一致诉求的场景下使用弱一致性语义。弱一致性语义不支持列回行,当enable_hybrid_imcvscan=on时,将忽略imcvscan_consistency=weak设置,并使用强一致性语义。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。弱一致性语义下,注意不要将列存扫描的结果作为业务操作的依据,以免造成数据问题。
htap_router_mode
参数说明:依赖HTAP特性开启状态,设置HTAP透明路由的模式。
参数类型:枚举类型
参数单位:无
取值范围:
- row:强制使查询负载选择行存计划。
- column:当查询请求中的列加载到IMCV时,无视代价高低,强制执行列存(IMCVScan)计划;若存在未加载到IMCV的列时,执行行存计划。
- auto:根据查询请求中的列是否加载到IMCV,以及行列计划代价高低,自动选择行、列、行列混合计划。
默认值:row
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:当使用场景有混合负载时,推荐该参数设置为auto。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
htap_flush_workers
参数说明:依赖HTAP特性开启状态,设置HTAP最大后台工作线程数,后台线程用于执行同步增量行存数据到IMCV行组,异步加载,缓冲区换入换出任务。
参数类型:整型
参数单位:无
取值范围:1 ~ 256
默认值:3
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:在需要加载多个表的场景下,可以调高该参数,加载完成后,调低该参数至默认值。
设置不当的风险与影响:设置过大可能影响TP性能,设置过小可能影响AP性能。
htap_flush_pagenum
参数说明:依赖HTAP特性开启状态,设置同步增量行存数据到IMCV行组的脏页阈值,脏页数量大于该值时触发同步过程。
参数类型:整型
参数单位:无
取值范围:-1, 1 ~ 8192(其中-1取值表示阈值无穷大,不按照脏页数量做同步。)
默认值:512
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:一般不建议修改,降低该参数可以提高AP性能,但是可能会影响TP性能;增加该参数会影响AP性能。该参数的值和htap_rowgroup_pagenum关联,如果大于页面映射数,生效的值为htap_rowgroup_pagenum。
设置不当的风险与影响:设置过小可能影响TP性能,设置过大可能影响AP性能,建议使用默认值。
htap_flush_interval
参数说明:依赖HTAP特性开启状态,设置同步增量行存数据到IMCV行组的最大时间间隔。
参数类型:整型
参数单位:s(秒)
取值范围:-1, 1 ~ 36000 (其中-1取值表示阈值无穷大,不按照时间间隔做同步。)
默认值:300
设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。
设置建议:一般不建议修改,降低该参数可以提高AP性能,但是可能会影响TP性能;增加该参数会影响AP性能。
设置不当的风险与影响:设置过小可能影响TP性能,设置过大可能影响AP性能,建议使用默认值。
enable_async_populate
参数说明:依赖HTAP特性开启状态,控制ALTER .. COLVIEW命令是否同步等待列存数据加载后返回。分布式下不支持同步等待列存数据加载,无论如何设置,实际生效值为on。
参数类型:布尔型
参数单位:无
取值范围:
- on:ALTER ... COLVIEW命令创建元数据后直接返回,实际加载数据到IMCV的动作在后台执行。
- off:ALTER ... COLVIEW命令创建元数据后,等待后台线程加载数据到IMCV后返回。
默认值:on
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
htap_deploy_mode
参数说明:依赖HTAP特性开启状态,设置HTAP部署模式。分布式下仅支持主机部署HTAP。分布式下无论如何设置,实际生效值为primary。
参数类型:枚举类型
参数单位:无
取值范围:
- primary:表示仅在主机上部署。只在主机上开启HTAP功能,备机不会回放IMCV DDL日志。当主备切换,主降备时会卸载IMCV,备升主时会重新加载IMCV。
- all:表示主备机全部部署,主备切换时保留主机和备机的IMCV数据。
- standby:表示仅在备机上部署。只在备机上开启HTAP功能,主上创建IMCV时只创建元数据,不加载数据。当主备切换,主降备时会加载IMCV,备升主时会卸载IMCV,只创建元数据。
默认值:primary
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。在主备集群中,该参数需保持主备节点设置一致。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
htap_compression_methods
参数说明:依赖HTAP特性开启状态,设置IMCV列存压缩特性是否开启以及启用的压缩算法列表。
参数类型:枚举类型
参数单位:无
取值范围:
- none:表示不开启IMCV列存压缩特性。
- delta_plus_rle:表示开启IMCV列存压缩特性,并且启用delta_plus_rle算法。
- dict:表示开启IMCV列存压缩特性,并且启用dict算法。
- lz4:表示开启IMCV列存压缩特性,并且启用lz4算法。
- all:表示开启IMCV列存压缩特性,并且同时启用delta_plus_rle、dict、lz4三种算法。
默认值:none
设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。
设置建议:内存充足时,推荐使用默认值。针对内存小、数据量大的环境,开启IMCV列存压缩特性,让尽可能多的数据在内存中。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。