全部產品
Search
文件中心

Hologres:GUC參數

更新時間:Jun 30, 2024

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