为了更好地支持Hologres用户丰富的使用场景,Hologres提供一些GUC参数。本文将介绍Hologres中GUC参数的含义以及如何使用。
GUC参数一览表
GUC名称 | 适用场景 | 说明 | 使用示例 |
hg_enable_start_auto_analyze_worker | 开启Auto Analyze,以及Auto Analyze相关配置,详情请参见ANALYZE和AUTO ANALYZE。 | HologresV1.1及以上版本默认开启,值为 | set hg_enable_start_auto_analyze_worker = on; |
hg_auto_check_table_changes_interval | 默认值为 | set hg_auto_check_table_changes_interval = '10min'; | |
hg_auto_check_foreign_table_changes_interval | 默认值为 | set hg_auto_check_foreign_table_changes_interval = '4h'; | |
hg_auto_analyze_max_sample_row_count | 默认值为 | set hg_auto_analyze_max_sample_row_count = 16777216; | |
hg_fixed_api_modify_max_delay_interval | 默认值为 | set hg_fixed_api_modify_max_delay_interval = '3day'; | |
hg_foreign_table_max_partition_limit | 查MaxCompute外部表分区限制。 | 默认值为 | set hg_foreign_table_max_partition_limit = 128; |
hg_experimental_query_batch_size | MaxCompute性能调优参数,详情请参见优化MaxCompute外部表的查询性能。 | 默认值为 | set hg_experimental_query_batch_size = 4096; |
hg_foreign_table_split_size | 默认值为 | set hg_foreign_table_split_size = 128; | |
hg_foreign_table_executor_max_dop | 默认值调整为与实例Core数相同,最大为 | set hg_foreign_table_executor_max_dop = 32; | |
hg_foreign_table_executor_dml_max_dop | 默认值为 | set hg_foreign_table_executor_dml_max_dop = 16; | |
hg_enable_access_odps_orc_via_holo | HologresV1.1及以上版本默认开启,值为 | set hg_enable_access_odps_orc_via_holo = on; | |
hg_experimental_enable_result_cache | 查询结果缓存。 | 默认值为 | set hg_experimental_enable_result_cache = on; |
optimizer_join_order | 内部性能调优参数,详情请参见优化查询性能。 | 默认值为 | set optimizer_join_order = query; |
optimizer_force_multistage_agg | 默认值为 | set optimizer_force_multistage_agg = on; | |
hg_anon_enable | 数据脱敏函数,详情请参见数据脱敏。 | 默认值为 | alter database <db_name> set hg_anon_enable = on; |
hg_experimental_encryption_options | 数据加密规格设置,详情请参见数据存储加密。 | 默认值为 | alter database <db_name> set hg_experimental_encryption_options='AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,187xxxxxxxxxxxxx'; |
statement_timeout | 活跃query超时时间,详情请参见Query管理。 | 默认值为 | set statement_timeout = 5000 ; |
idle_in_transaction_session_timeout | 空闲事务的超时时间,详情请参见Query管理。 | 默认值为 | alter database db_name set idle_in_transaction_session_timeout=300000; |
idle_session_timeout | 自动释放空闲连接超时时间,详情请参见连接数管理。 | 默认值为 | alter database <db_name> SET idle_session_timeout = 600000; |
hg_experimental_functions_use_pg_implementation | 时间范围扩展。 | HologresV1.1.31版本开始支持,设置后支持时间范围为 | set hg_experimental_functions_use_pg_implementation = 'to_char'; |
hg_experimental_approx_count_distinct_precision | 调整APPROX_COUNT_DISTINCT误差率,详情请参见APPROX_COUNT_DISTINCT。 | 默认值为 | set hg_experimental_approx_count_distinct_precision = 20; |
timezone | 时区设置。 | 默认值为 | set timezone='GMT-8:00'; |
hg_experimental_enable_create_table_like_properties | 复制表时同时复制表属性(主键、索引等),详情请参见CREATE TABLE LIKE。 | 默认值为 | set hg_experimental_enable_create_table_like_properties=true; |
hg_experimental_affect_row_multiple_times_keep_first | 使用 | 默认值为 | 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级多副本。 | 默认值为 | set hg_experimental_enable_read_replica = on; |
hg_experimental_display_query_id | 通过NOTICE在客户端打印出Query ID,通常适用于HoloWeb和PSQL客户端,如果是JDBC,需要使用 | 默认值为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;