為了更好的支援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;