为了更好地支持Hologres用户丰富的使用场景,Hologres提供一些GUC参数。本文将介绍Hologres中GUC参数的含义以及如何使用。

GUC参数一览表

GUC名称

适用场景

说明

使用示例

hg_enable_start_auto_analyze_worker

开启Auto Analyze,以及Auto Analyze相关配置,详情请参见ANALYZE和AUTO ANALYZE

HologresV1.1及以上版本默认开启,值为on

set hg_enable_start_auto_analyze_worker = on;

hg_auto_check_table_changes_interval

默认值为10min

set hg_auto_check_table_changes_interval = '10min';

hg_auto_check_foreign_table_changes_interval

默认值为4h

set hg_auto_check_foreign_table_changes_interval = '4h';

hg_auto_analyze_max_sample_row_count

默认值为16777216

set hg_auto_analyze_max_sample_row_count = 16777216;

hg_fixed_api_modify_max_delay_interval

默认值为3d

set hg_fixed_api_modify_max_delay_interval = '3day';

hg_foreign_table_max_partition_limit

查MaxCompute外部表分区限制。

默认值为512,支持范围为0-1024

set hg_foreign_table_max_partition_limit = 128;

hg_experimental_query_batch_size

MaxCompute性能调优参数,详情请参见优化MaxCompute外部表的查询性能

默认值为8192

set hg_experimental_query_batch_size = 4096;

hg_foreign_table_split_size

默认值为64,不建议设置过大。

set hg_foreign_table_split_size = 128;

hg_foreign_table_executor_max_dop

默认值调整为与实例Core数相同,最大为128

set hg_foreign_table_executor_max_dop = 32;

hg_foreign_table_executor_dml_max_dop

默认值为32

set hg_foreign_table_executor_dml_max_dop = 16;

hg_enable_access_odps_orc_via_holo

HologresV1.1及以上版本默认开启,值为on

set hg_enable_access_odps_orc_via_holo = on;

hg_experimental_enable_result_cache

查询结果缓存。

默认值为on,不建议关闭。

set hg_experimental_enable_result_cache = on;

optimizer_join_order

内部性能调优参数,详情请参见优化查询性能

默认值为exhaustive,后面可以接Query命令。

set optimizer_join_order = query;

optimizer_force_multistage_agg

默认值为off,按需开启。

set optimizer_force_multistage_agg = on;

hg_anon_enable

数据脱敏函数,详情请参见数据脱敏

默认值为off,建议数据库级别按需开启。

alter database <db_name> set hg_anon_enable = on;

hg_experimental_encryption_options

数据加密规格设置,详情请参见数据存储加密

默认值为off,建议数据库级别按需开启。

alter database <db_name> set hg_experimental_encryption_options='AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,187xxxxxxxxxxxxx';

statement_timeout

活跃query超时时间,详情请参见Query管理

默认值为8h,建议根据业务情况,session级别设置不同粒度的超时时间。

set statement_timeout = 5000 ;

idle_in_transaction_session_timeout

空闲事务的超时时间,详情请参见Query管理

默认值为10min,建议数据库级别设置,否则当事务泄漏时容易造成死锁。

alter database db_name set idle_in_transaction_session_timeout=300000;

idle_session_timeout

自动释放空闲连接超时时间,详情请参见连接数管理

默认值为0,即不会自动释放。建议设置,否则连接数太多导致超过实例默认上限,从而无法连接。

alter database <db_name> SET idle_session_timeout = 600000;

hg_experimental_functions_use_pg_implementation

时间范围扩展。to_charto_dateto_timestamp函数在处理时间类型时默认范围为1925-2282,通过设置GUC参数支持0000-9999年的时间,详情请参见类型转换函数

HologresV1.1.31版本开始支持,设置后支持时间范围为0000-9999

set hg_experimental_functions_use_pg_implementation = 'to_char';

hg_experimental_approx_count_distinct_precision

调整APPROX_COUNT_DISTINCT误差率,详情请参见APPROX_COUNT_DISTINCT

默认值为17,取值范围为12-20

set hg_experimental_approx_count_distinct_precision = 20;

timezone

时区设置。

默认值为PRC(东八区)。

set timezone='GMT-8:00';

hg_experimental_enable_create_table_like_properties

复制表时同时复制表属性(主键、索引等),详情请参见CREATE TABLE LIKE

默认值为off

set hg_experimental_enable_create_table_like_properties=true;

hg_experimental_affect_row_multiple_times_keep_first

使用insert on conflict,源数据重复时数据保留策略,详情请参见INSERT ON CONFLICT(UPSERT)

默认值为off

set hg_experimental_affect_row_multiple_times_keep_first = on;

hg_experimental_affect_row_multiple_times_keep_last

set hg_experimental_affect_row_multiple_times_keep_last = on;

hg_experimental_enable_read_replica

单实例多副本高可用以及相关配置,详情请参见单实例Shard级多副本

默认值为on

set hg_experimental_enable_read_replica = on;

hg_experimental_display_query_id

通过NOTICE在客户端打印出Query ID,通常适用于HoloWeb和PSQL客户端,如果是JDBC,需要使用statement.getWarnings()来获取NOTICE,从而获得Query ID。

默认值为off

set hg_experimental_display_query_id =on;

查看当前GUC参数的状态或默认值

通过show命令语句可以查看某个GUC参数的状态或者默认值,使用示例如下。

  • 查看是否开启Auto Analyze。

    show hg_enable_start_auto_analyze_worker;
  • 查看读取MaxCompute分区限制大小。

    show hg_foreign_table_max_partition_limit;

设置GUC参数

GUC在使用时,可以设置为session级别或者数据库级别生效。

说明

具体是session级别还是数据库级别,需要根据业务场景以及参数的详情合理评估,不建议所有的参数都设置为数据库级别。

  • session级别

    通过set命令可以在session级别设置GUC参数。session级别的参数只在当前session生效,当连接断开之后,将会失效,建议加在SQL前一起执行。

    • 语法示例如下。

      set <GUC_name> = <values>;

      GUC_name为GUC参数的名称,values为GUC参数的值。

    • 使用示例如下。

      -- 开启Auto Analyze
      set hg_enable_start_auto_analyze_worker = on;
      
      -- 读取MaxCompute的分区限制变为1024
      set hg_foreign_table_max_partition_limit =1024;
  • 数据库级别

    可以通过alter database xx set xxx命令来设置DB级别的GUC参数,执行完成后在整个DB级别生效,设置完成后当前连接需要重新断开连接才能生效。新建DB不会生效,需要重新手动设置。

    • 语法示例如下。

      alter database <db_name> set <GUC_name> = <values>;

      db_name为数据库名称,GUC_name为GUC参数的名称,values为GUC参数的值。

    • 使用示例如下。

      -- DB级别开启Auto Analyze
      alter database testdb set hg_enable_start_auto_analyze_worker = on;
      
      -- DB级别读取MaxCompute的分区限制变为1024
      alter database testdb set hg_foreign_table_max_partition_limit =1024;