本文介紹ApsaraDB for SelectDB提供的變數管理功能和使用方法,並對時區變數進行詳細介紹,協助您更好的使用ApsaraDB for SelectDB的變數以支撐業務需求。
變數
變數分為兩部分:一部分為ApsaraDB for SelectDB特有變數,另一部分為相容MySQL用戶端協議的變數。具體變數列表可參考本文附錄。
查看與設定變數
查看
可以通過SHOW VARIABLES [LIKE 'xxx'];查看所有變數或指定的變數。
SHOW VARIABLES;
SHOW VARIABLES LIKE '%time_zone%';設定
變數可設定為全域生效即設定全域變數(global variable),也可設定為當前會話生效即設定會話變數(session variable)。
會話變數設定:如果期望僅當前會話生效,可通過SET var_name=xxx;語句來設定,樣本如下。
SET exec_mem_limit = 137438953472;
SET forward_to_master = true;
SET time_zone = "Asia/Shanghai";全域變數設定:如果期望全域生效,通過SET GLOBAL var_name=xxx;設定。設定全域變數生效後,後續新的會話串連中會沿用設定值,當前會話中的值也會改變,樣本如下。
SET GLOBAL exec_mem_limit = 137438953472只有ADMIN使用者可以設定變數全域生效。
既支援當前會話生效又支援全域生效的變數如下。
time_zonewait_timeoutsql_modeenable_profilequery_timeoutinsert_timeoutexec_mem_limitbatch_sizeallow_partition_column_nullableinsert_visible_timeout_msenable_fold_constant_by_be
只支援全域生效的變數如下。
default_rowset_typedefault_password_lifetimepassword_historyvalidate_password_policy
同時,變數設定也支援常量運算式,樣本如下。
SET exec_mem_limit = 10 * 1024 * 1024 * 1024;
SET forward_to_master = concat('tr', 'u', 'e');查詢語句中設定變數
在一些情境中,可能需要對某些查詢針對性設定變數。 通過使用SET_VAR提示可以在查詢中設定會話變數(在單個語句內生效),樣本如下。
SELECT /*+ SET_VAR(exec_mem_limit = 8589934592) */ name FROM people ORDER BY name;
SELECT /*+ SET_VAR(query_timeout = 1, enable_partition_cache=true) */ sleep(3);注釋必須以/*+ 開頭,並且只能跟隨在SELECT之後。
時區
時區作為變數中較為關鍵的一類變數,影響SelectDB內部很多的函數行為和參數值。為支援不同地區不同業務的需求,SelectDB支援自訂時區設定。
SelectDB內部存在以下兩個時區相關參數。
system_time_zone: 當伺服器啟動時,會根據機器的時區參數自動化佈建,設定後不可修改。time_zone: 叢集當前時區,可以修改。
具體操作
查看當前時區相關配置,樣本如下。
SHOW variables LIKE '%time_zone%'重新設定Session中的時區,樣本如下。
SET [GLOBAL] time_zone = 'Asia/Shanghai'如使用GLOBAL關鍵字,則SelectDB會將參數持久化,對之後所有新Session生效。
時區格式
時區值可以使用多種格式,以下是ApsaraDB for SelectDB中支援的標準格式。
標準具名時區格式,如"Asia/Shanghai","America/Los_Angeles"。
標準位移格式,如"+02:30","-10:00"。
縮寫時區格式,當前僅支援。
"GMT"、"UTC",等同於"+00:00"時區。
"CST"等同於"Asia/Shanghai"時區。
單字母Z,代表Zulu時區,等同於"+00:00"時區。
由於實現方式的不同,當前SelectDB可能已經在部分匯入方式中支援了其他時區格式。生產環境不建議依賴其他時區格式,SelectDB對其他時區格式的處理行為隨時可能發生變化。
時區影響
函數
不同時區將影響包括NOW()或CURTIME()等時間函數顯示的值,也包括SHOW load,SHOW backends中的時間值,但不會影響CREATE TABLE中時間類型分區列的less than值,也不會影響儲存為date/datetime類型值的顯示。
受時區影響的函數如下。
FROM_UNIXTIME:指定一個UTC時間戳記,返回指定時區的日期時間。例如FROM_UNIXTIME(0),返回CST時區為1970-01-01 08:00:00。UNIX_TIMESTAMP:指定一個指定時區日期時間,返回UTC時間戳記。例如CST時區下,UNIX_TIMESTAMP('1970-01-01 08:00:00'),返回0。CURTIME:返回指定時區時間。NOW:返回指定時區日期和時間。CONVERT_TZ:將一個日期時間從一個指定時區轉換到另一個指定時區。
時間類型的值
在插入資料類型為DATE、DATEV2、DATETIME和DATETIMEV2的資料時,SelectDB支援對時區進行轉換。
例如資料帶有時區,如"2020-12-12 12:12:12+08:00",而當前SelectDB中time_zone = +00:00,則得到實際值為"2020-12-12 04:12:12"。
例如資料不帶有時區,如"2020-12-12 12:12:12",則認為該時間為絕對時間,不發生任何轉換。
夏令時
夏令時的本質是具體命名時區的實際時間位移量,在一定日期內發生改變。
例如,America/Los_Angeles時區包含一次夏令時調整,起止時間為約為每年3月至11月。即,三月份夏令時開始時,America/Los_Angeles實際時區位移由-08:00變為-07:00,11月夏令時結束時,又從-07:00變為-08:00。
如果不希望開啟夏令時,則應設定time_zone為-08:00而非America/Los_Angeles。
資料來源
時區資料包含時區名、對應時間位移量、夏令時變化情況等。在BE所在機器上,其資料來源依次為:
TZDIR命令返回的目錄。/usr/share/zoneinfo目錄。SelectDB BE部署目錄下產生的
zoneinfo目錄。
SelectDB按順序尋找以上資料來源,如果找到對應時區資料則使用,若在上述三個來源中均未找到,則SelectDB BE將啟動失敗。
最佳實務
時區敏感性資料
SelectDB目前相容各時區下的資料匯入SelectDB。時區問題主要涉及三個影響因素:
Session變數(time_zone):叢集時區。
Stream Load、Broker Load等匯入時指定的Header中(timezone): 匯入時區。
時區類型字面量
"2023-12-12 08:00:00+08:00"中的"+08:00": 資料時區。
由於DATETIME等各個時間類型本身不包含額外的時區資訊,因此SelectDB叢集內的時間類型資料,可以分為兩類:絕對時間和特定時區下的時間。
絕對時間:時間格式上不包含額外的時區資訊,且在匯入時沒有指定時區。例如
"2023-12-12 08:00:00"。它所關聯的資料情境與時區不轉換。這類資料在匯入時不帶有任何時區資訊,在匯入的時候不會受到任何時區設定的影響。因為這類時間不關聯到實際的時區,取其unix_timestamp等函數結果是無實際意義的,叢集time_zone的改變也不會影響它的使用。特定時區下的時間:時間資料中本身帶有時區資訊,在匯入時會受到時區設定的影響。例如
"2020-12-12 12:12:12+02:00"。此類時間資料在匯入時會根據設定的時區資訊進行處理。對於
INSERT INTO操作,時間資料受Session變數(time_zone)設定影響。對於 Stream Load 操作,時間資料受Stream Load的Header中(timezone)設定的影響。與Session變數(time_zone)中的設定不同的場合,以Header中(timezone)設定為準。
此處的“特定時區”,指的是叢集中設定的Session變數(time_zone)。該變數應當在資料匯入前確定,且不再更改。此時SelectDB叢集中的該類時間資料,其實際意義為:時區類型字面量的資料時區下描述的時間值,在
time_zone時區下對應的時間。
特定時區下的時間和最佳實務中不建議修改Session變數(time_zone),樣本如下。
mysql> SELECT@@time_zone;
+----------------+
| @@time_zone |
+----------------+
| Asia/Hong_Kong |
+----------------+
1 row in set (0.12 sec)
--- 絕對時區為+02:00
mysql> INSERT INTO dtv23 VALUES('2020-12-12 12:12:12+02:00');
Query OK, 1 row affected (0.27 sec)
mysql> SELECT* FROM dtv23;
--- 被轉換為 Doris 叢集時區 Asia/Hong_Kong,應當保持此語義
+-------------------------+
| k0 |
+-------------------------+
| 2020-12-12 18:12:12.000 | 。
+-------------------------+
1 row in set (0.19 sec)
mysql> SET time_zone = 'America/Los_Angeles';
Query OK, 0 rows affected (0.15 sec)
mysql> SELECT* FROM dtv23;
--- 如果修改 time_zone,時間值不會隨之改變,其意義發生紊亂。
+-------------------------+
| k0 |
+-------------------------+
| 2020-12-12 18:12:12.000 |
+-------------------------+
1 row in set (0.18 sec)
mysql> insert into dtv23 values('2020-12-12 12:12:12+02:00');
Query OK, 1 row affected (0.17 sec)
mysql> SELECT* FROM dtv23;
--- 此時可以發現,資料已經發生錯亂。
+-------------------------+
| k0 |
+-------------------------+
| 2020-12-12 02:12:12.000 |
| 2020-12-12 18:12:12.000 |
+-------------------------+
2 rows in set (0.19 sec)綜上所述,處理時區問題最佳的實踐如下。
在使用前確認該叢集所表徵的時區並設定
time_zone,在此之後不再更改。在匯入時設定Header
timezone同叢集time_zone一致。對於絕對時間,匯入時不帶時區尾碼;對於有時區的時間,匯入時帶具體時區尾碼,匯入後將被轉化至 SelectDB
time_zone時區。
夏令時
夏令時的起訖時間來自於當前時區資料來源,不一定與當年度時區所在地官方實際確認時間完全一致。該資料由ICANN進行維護。如果需要確保夏令時表現與當年度實際規定一致,請保證SelectDB所選擇的資料來源為最新的 ICANN 所公布時區資料。下載途徑,詳情請參見擴充閱讀。
附錄
支援的變數
開關類參數
這類參數一般只有true和false兩個參數取值,與某類功能或特性的啟用與否有關。
參數名稱 | 參數說明 |
delete_without_partition | 在執行DELETE命令刪除分區表資料時,即使不指定特定的分區,該DELETE操作仍將自動應用於所有分區。預設為false。 重要 自動應用到所有分區可能導致DELETE命令的執行時間增加,並觸發大量子任務,從而導致整體執行時間增長。建議不要開啟此功能。 |
disable_colocate_join | 是否禁用Colocation Join功能,預設為false。 表示啟用該功能。true表示禁用該功能。當該功能被禁用後,查詢規劃將不會嘗試執行Colocation Join。 |
enable_bucket_shuffle_join | 是否啟用Bucket Shuffle Join功能,預設為true。 表示啟用該功能。false表示禁用該功能。當該功能被禁用後,查詢規劃將不會嘗試執行Bucket Shuffle Join。 |
disable_streaming_preaggregations | 是否禁用流式預彙總,預設為false。 即開啟。當前不可修改。 |
enable_insert_strict | 通過INSERT語句進行資料匯入時,是否開啟 即不開啟 |
enable_spilling | 是否開啟巨量資料量落盤排序,預設為false。 即關閉該功能。當使用者未指定ORDER BY子句的LIMIT條件,同時設定 該功能啟用後,會使用BE資料目錄下 該功能主要用於使用有限的記憶體進行巨量資料量的排序操作。 重要 該功能為實驗性質,生產環境下不建議使用。 |
forward_to_master | 是否將一些展示類命令轉寄到Master FE節點執行,預設為 即轉寄,SelectDB執行個體中存在多個FE節點,其中一個為Master節點。通常使用者可以串連任意 FE節點進行全功能操作。但部分資訊查看指令,只有從Master FE節點才能擷取詳細資料。例如 當前受該參數影響的命令如下:
|
enable_profile | 是否需要查看查詢的Profile,預設為 false。 即不需要Profile。預設情況下,只有在查詢發生錯誤時,BE才會發送Profile給 FE,用於查看錯誤。考慮到發送Profile會產生一定的網路開銷,對高並發查詢情境不利,正常結束的查詢不會發送Profile。 當使用者希望對一個查詢的Profile進行分析時,可以在將這個變數設為true後發送查詢。查詢結束後,可以通過在當前串連的FE的Web頁面查看到Profile:
其中會顯示最近100條開啟 |
rewrite_count_distinct_to_bitmap_hll | 是否將Bitmap和HLL類型的 |
allow_partition_column_nullable | 建表時是否允許分區列為NULL,預設為true。 表示允許為NULL。false表示分區列必須被定義為NOT NULL。 |
enable_exchange_node_parallel_merge | Exchange node是否採取並行的歸併排序,來減少額外的CPU和記憶體消耗。預設為false。 在一個排序的查詢之中,一個上層節點接收下層節點有序資料時,會在Exchange node上進行對應的排序來保證最終的資料是有序的。但是單線程進行多路資料歸併時,如果資料量過大,會導致Exchange node出現單點歸併瓶頸。 SelectDB在這部分進行了最佳化處理,如果下層的資料節點過多,Exchange node會啟動多線程進行並行歸併來加速排序過程。 |
extract_wide_range_expr | 是否開啟「寬泛公因式提取」的最佳化,預設為false。 |
enable_fold_constant_by_be | 用於控制常量摺疊的計算方式,預設為false。 即在FE進行計算;若設定為true,則通過RPC請求經BE計算。 |
disable_join_reorder | 用於關閉所有系統自動的Join reorder演算法。預設為false。 即表示採用系統自動的Join reorder演算法。設定為true後,系統會關閉所有自動排序的演算法,採用SQL原始的表順序執行Join。 |
enable_infer_predicate | 是否進行謂詞推導,預設為true。 即進行謂詞擴充。關閉後,SelectDB不再進行謂詞推導,而是採用原始的謂詞進行相關操作。 |
trim_tailing_spaces_for_external_table_query | 用於控制查詢Hive外表時是否過濾掉欄位末尾的空格,預設為false。 |
enable_inverted_index_query | 是否啟用倒排索引,預設true。 |
skip_missing_version | 是否忽略錯誤版本,預設為false。 在某些極端情境中,表的Tablet下所有副本都有版本缺失,使得這些Tablet沒有辦法被恢複,導致整張表都不能查詢。 這個變數可以用來控制查詢的行為,當設定為true時,查詢會忽略FE Partition中記錄的visibleVersion,轉而使用replica version。如果BE上的Replica有缺失的版本,則查詢會直接跳過這些缺失的版本,只返回仍存在版本的資料。 此外,查詢將會總是選擇所有存活的BE中所有Replica裡LastSuccessVersion最大的那一個,這樣可以儘可能的恢複更多的資料。 這個變數應該只在上述緊急情況下才被設定為true,僅用於臨時讓表恢複查詢。 重要 此變數與use_fix_replica變數衝突,當use_fix_replica變數不等於-1時,此變數不起作用。 |
enable_parquet_lazy_materialization | 控制Parquet reader是否啟用延遲物化技術,預設為true。 |
enable_orc_lazy_materialization | 控制Orc reader是否啟用延遲物化技術,預設為true。 |
enable_strong_consistency_read | 是否開啟強一致讀,預設為true。 SelectDB預設支援同一個會話內的強一致性,即同一個會話內對資料的變更操作是即時可見的。如需要會話間的強一致讀,則需將此變數設定為true。 |
truncate_char_or_varchar_columns | 是否按照表的Schema來截斷char或者varchar列,預設為false。 使用外表進行資料管理時,表的Schema中char或者varchar列的最大長度和底層Parquet或者ORC檔案中的Schema可能存在不一致的情況。 開啟該選項,會按照表的Schema中的最大長度進行截斷。 |
jdbc_clickhouse_query_final | 是否在使用JDBC Catalog功能查詢ClickHouse時增加final關鍵字,預設為false。 該選項將用於ClickHouse的ReplacingMergeTree表引擎查詢去重。 |
enable_memtable_on_sink_node | 是否在資料匯入中啟用MemTable前移,預設為false。 當啟用時,SelectDB會在DataSink節點上構建MemTable,並通過BRPC Streaming發送Segment到其他BE。該方法減少了多副本之間的重複工作,並且節省了資料序列化和還原序列化的時間。 |
enable_unique_key_partial_update | 是否對INSERT INTO語句啟用部分列更新的語義。 false(預設):禁用列更新。 true:啟用列更新。 重要
|
describe_extend_variant_column | 是否展示Variant的拆解列。預設為false。 |
dry_run_query | 是否開啟僅返回行數,預設為false。 如果設定為true,對於查詢請求,將不再返回實際結果集,而僅返回行數。對於匯入和Insert操作,Sink將丟掉資料,不會有實際的寫發生。 該參數可以用於測試返回大量資料集時,規避結果集傳輸的耗時,重點關注底層查詢執行的耗時。 |
drop_table_if_ctas_failed | 控制 |
show_user_default_role | 控制是否在 |
group_by_and_having_use_alias_first | 指定 |
enable_file_cache | 是否啟用Block file cache,預設false。 該變數只有在be.conf中 |
enable_auto_analyze | 是否開啟自動收集功能,預設為true。 |
enable_cost_based_join_reorder | 控制是否開啟Join Reorder,以自動調節Join時的表順序。 預設為false。 |
enable_fallback_to_original_planner | 控制在啟用新最佳化器後是否根據情境自動回退到舊最佳化器,預設為false。 |
enable_odbc_transcation | 是否啟用JDBC Catalog的資料寫入時事務,預設為false。 |
enable_parallel_outfile | 是否啟用OUTFILE指令中的並發匯出,預設為false。 |
enable_sql_cache | 控制SQL是否使用 cache,預設為false。 |
enable_unicode_name_support | 是否啟用unicode字元的表/列名支援,預設為false。 設定為true可支援中文列名。 |
enable_vectorized_engine | 是否啟用向量化引擎以實現加速,預設為true。 |
experimental_enable_nereids_planner | 是否啟用新最佳化器。實驗性特性,預設為true。 |
experimental_enable_pipeline_engine | 是否啟用pipeline執行引擎。實驗性特性,預設為true。 |
experimental_enable_single_replica_insert | 是否啟用單副本匯入能力,預設為false。 該能力會從多個副本中選擇一個副本作為主副本(其他副本為從副本),且只對主副本進行計算,當主副本的資料檔案都寫入成功後,通知從副本所在節點直接接拉取主副本的資料檔案,實現副本間的資料同步。 |
faster_float_convert | 是否啟用更快的浮點數轉換演算法,注意會影響輸出格式,預設為false。 |
enable_page_cache | 控制是否啟用Page cache,預設為 true。 |
strict_mode | 使用者指定匯入資料是否開啟strict 模式,預設為false。 |
配置類參數
配置類參數的取值與具體參數值有關。
參數名稱 | 參數說明 |
auto_broadcast_join_threshold | 執行Join時將向所有節點廣播表的最大位元組大小,通過將此值設定為-1可以禁用廣播。 SelectDB提供了兩種Join的實現方式:
當小表的資料量較小時, 系統會自動嘗試進行Broadcast Join,也可以顯式指定每個Join運算元的實現方式。系統提供了可配置的參數 說明 不建議用該參數來調整Join,如果必須要使用某一種Join,建議使用Hint,例如 join[shuffle]。 |
batch_size | 用於指定在查詢執行過程中,各個節點傳輸的單個資料包的行數。 預設一個資料包的行數為1024行,即源端節點每產生1024行資料,就打包發送到目的節點。調整為較大的行數,會在掃描巨量資料量情境下提升查詢的吞吐,但可能會在小查詢情境下增加查詢延遲,同時也會增加查詢的記憶體開銷。 建議設定範圍為1024至4096。 |
default_order_by_limit | 指定ORDER BY返回的預設條數。 預設為-1,預設返回查詢後的最大條數,上限為long資料類型的MAX_VALUE值。 |
exec_mem_limit | 指定單個查詢的記憶體限制。預設為2 GB。允許設定單位為B(Byte)/KB/MB/GB/TB/PB,不設定單位的場合預設以B(Byte)計算。 該參數用於限制一個查詢計劃中,單個查詢計劃的執行個體所能使用的記憶體。一個查詢計劃可能有多個查詢單元,一個BE節點可能執行一個或多個查詢單元,所以該參數並不能準確限制一個查詢在整個叢集的記憶體使用量,也不能準確限制一個查詢在單一BE節點上的記憶體使用量。具體需要根據產生的查詢計劃判斷。 通常只有在一些阻塞節點(如排序節點、彙總節點、Join節點)上才會消耗較多的記憶體,而其他節點(如掃描節點)中,資料為流式通過,並不會佔用較多的記憶體。 當出現 |
lower_case_table_names | 用於控制使用者表表名大小寫是否敏感。
|
max_pushdown_conditions_per_column | 該變數的具體含義請參閱BE配置項中 |
max_scan_key_num | 該變數的具體含義請參閱BE配置項中 |
parallel_exchange_instance_num | 用於設定執行計畫中,一個上層節點接收下層節點資料所使用的Exchange node 數量。預設為-1,即表示Exchange node 數量等於下層節點執行執行個體的個數(預設行為)。 當設定為大於0,並且小於下層節點執行執行個體的個數時,則Exchange node數量等於設定值。 在一個分布式的查詢執行計畫中,上層節點通常有一個或多個Exchange node用於接收來自下層節點在不同BE上的執行執行個體的資料。通常Exchange node數量等於下層節點執行執行個體數量。 在一些彙總查詢情境下,如果底層需要掃描的資料量較大,但彙總之後的資料量很小,則可以嘗試修改此變數為一個較小的值,可以降低此類查詢的資源開銷。如在DUPLICATE KEY明細模型上進行彙總查詢的情境。 |
analyze_timeout | 控制ANALYZE逾時時間,單位為秒,預設43200秒。 |
auto_analyze_end_time | 自動統計資訊收集結束時間。 |
auto_analyze_start_time | 自動統計資訊收集開始時間。 |
auto_analyze_table_width_threshold | 控制自動統計資訊收集處理的最大表寬度,列數大於該值的表不會參與自動統計資訊收集。預設為70。 |
div_precision_increment | 此變數表示增加與/運算子執行的除法操作結果規模的位元。預設為4。 |
external_agg_bytes_threshold | 查詢中的彙總操作允許使用的記憶體。超過該值則會將記憶體資料臨時寫入磁碟。 |
external_sort_bytes_threshold | 查詢中的排序操作允許使用的記憶體。超過該值則會將記憶體資料臨時寫入磁碟。 |
external_table_auto_analyze_interval_in_millis | 控制對外表的自動ANALYZE的最小時間間隔,在該時間間隔內的外表僅ANALYZE一次。預設為86400000,單位為毫秒。 |
fragment_transmission_compression_codec | 控制使用何種壓縮格式進行資料轉送。預設為lz4。 |
huge_table_auto_analyze_interval_in_millis | 控制對大表的自動ANALYZE的最小時間間隔,在該時間間隔內大小超過 |
huge_table_default_sample_rows | 對大表的採樣行數。預設為4194304。 |
huge_table_lower_bound_size_in_bytes | 大小超過該值的表,在自動收集時將會自動通過採樣收集統計資訊。預設為0。 |
ignore_runtime_filter_ids | 在 預設為空白。 |
max_filter_ratio | 最大容忍可過濾(資料不規範等原因)的資料比例。預設零容忍。 |
max_instance_num | 未設定 |
parallel_pipeline_task_num | 代表了 SQL 查詢進行查詢並發的 Pipeline Task 數目。預設為0。 此時SelectDB會自動感知每個BE的CPU核心數,並把並發度設定為CPU核心數的一半且不超過 |
runtime_filter_type | 包括Bloom Filter、MinMax Filter、IN predicate、IN Or Bloom Filter、Bitmap Filter,預設會使用IN Or Bloom Filter,部分情況下同時使用Bloom Filter、MinMax Filter、IN predicate時效能更高。 |
runtime_filter_mode | 用於調整Runtime Filter的下推策略,包括OFF、LOCAL、GLOBAL三種策略,預設設定為GLOBAL策略。 |
runtime_filter_wait_time_ms | 左表的ScanNode等待每個Runtime Filter的時間,預設為1000ms。 |
runtime_filters_max_num | 每個查詢可應用的Runtime Filter中Bloom Filter的最大數量,預設為10。 |
runtime_bloom_filter_min_size | Runtime Filter中Bloom Filter的最小長度,預設為1048576(1M)。 |
runtime_bloom_filter_max_size | Runtime Filter中Bloom Filter的最大長度,預設為16777216(16M)。 |
runtime_bloom_filter_size | Runtime Filter中Bloom Filter的預設長度,預設為2097152(2M)。 |
runtime_filter_max_in_num | 如果Join右表資料行數大於這個值,我們將不產生IN predicate,預設為1024。 |
parallel_fragment_exec_instance_num | 針對掃描節點,設定其在每個BE節點上執行單元的個數。預設為1。 一個查詢計劃通常會產生一組Scan range,即需要掃描的資料範圍。這些資料分布在多個BE節點上。一個BE節點會有一個或多個Scan range。預設情況下,每個BE節點的一組Scan range只由一個執行單元處理。當機器資源比較充裕時,可以通過修改該變數,讓更多的執行單元同時處理一組Scan range,從而提升查詢效率。 Scan執行個體的數量決定了上層其他執行節點,如彙總節點和Join節點的數量。因此相當於增加了整個查詢計劃執行的並發度。修改該參數會對大查詢效率提升有協助,但較大數值會消耗更多的機器資源,如CPU、記憶體、磁碟IO。 |
query_timeout | 用於設定查詢逾時。 該變數會作用於當前串連中所有的查詢語句,對於INSERT語句推薦使用 |
insert_timeout | 用於設定針對INSERT語句的逾時。該變數僅作用於INSERT語句,建議在INSERT行為易持續較長時間的情境下設定。 預設為14400(4小時),單位為秒。 由於舊版本使用者會通過延長 |
send_batch_parallelism | 用於設定執行 |
sql_mode | 用於指定SQL模式,以適應某些SQL方言。關於SQL模式,可參閱該文檔。 |
sql_select_limit | 用於設定SELECT語句的預設返回行數,包括INSERT語句的SELECT從句。 預設為不限制。 |
time_zone | 用於設定當前會話的時區。預設值為 |
wait_timeout | 用於設定空閑串連的串連時間長度。當一個空閑串連在該時間長度內與SelectDB沒有任何互動,則SelectDB會主動斷開這個連結。 預設為28800(8小時),單位為秒。 |
default_rowset_type | 用於設定計算節點儲存引擎預設的儲存格式。 當前支援的儲存格式包括alpha和beta。預設為beta。 |
use_v2_rollup | 用於控制查詢使用Segment v2儲存格式的ROLLUP索引擷取資料。 該變數用於上線Segment v2的時候進行驗證使用。其他情況不建議使用。 |
prefer_join_method | 在選擇Join的具體實現方式是Broadcast Join還是Shuffle Join時,如果Broadcast Join的Cost和Shuffle Join的Cost相等時,該配置項決定優先選擇哪種Join方式。 目前該變數的可選值為“broadcast”或者“shuffle”。 |
insert_visible_timeout_ms | 執行INSERT語句時,在匯入動作(查詢和插入)完成後,還需要等待事務提交使資料可見。 此參數控制等待資料可見的逾時時間,預設為10000,最小為1000。 |
cpu_resource_limit | 用於限制一個查詢的資源開銷。這是一個實驗性質的功能。 目前的實現是限制一個查詢在單個節點上的Scan線程數量。通過限制Scan線程數,使得從底層返回的資料速度變慢,從而限制查詢整體的計算資源開銷。若設定為2,則一個查詢在單節點上最多使用2個Scan線程。 該參數會覆蓋 該參數會被User Property中的 預設為 -1,即不限制。 |
return_object_data_as_binary | 用於標識是否在SELECT結果中返回Bitmap/HLL結果。 在SELECTINTO OUTFILE語句中,如果匯出檔案格式為CSV,則會將Bitmap/HLL資料進行Base64編碼;如果是Parquet檔案格式,則會把資料作為Byte Array儲存。 下面將展示Java的例子,更多的樣本可查看samples。 |
block_encryption_mode | 用於控制塊加密模式,預設值為NULL。 當使用AES演算法加密時相當於 可選值: |
default_password_lifetime | 預設的密碼到期時間。 預設為0,即表示不到期。單位為天。 該參數只有當使用者的密碼到期屬性為DEFAULT時才生效。如: |
password_history | 預設的歷史密碼次數。 預設為0,即不做限制。 該參數只有當使用者的歷史密碼次數屬性為DEFAULT時,才啟用。如: |
validate_password_policy | 密碼強度校正策略。 預設為NONE或0,即不做校正。可以設定為STRONG或2。 當設定為STRONG或2時,通過 特殊字元包括: |
rewrite_or_to_in_predicate_threshold | 預設的改寫OR to IN的OR數量閾值。 預設為2,即表示有2個OR的時候,如果可以合并,則會改寫成IN。 |
file_cache_base_path | 指定Block file cache在BE上的儲存路徑,預設為“random”,隨機播放BE配置的儲存路徑。 |
topn_opt_limit_threshold | 設定TopN最佳化的Limit閾值。預設是1024。 對於語句 |
use_fix_replica | 使用固定Replica進行查詢。Replica從0開始,如果 預設為-1,表示未啟用。 |
相容性/保留變數
這類參數一般無實際作用。
參數名稱 | 參數說明 |
SQL_AUTO_IS_NULL | 用於相容 JDBC 串連池 C3P0。無實際作用。 |
auto_increment_increment | 用於相容MySQL用戶端。無實際作用。雖然SelectDB已支援AUTO_INCREMENT功能,但這個參數並不會對AUTO_INCREMENT的行為產生影響。 |
autocommit | 用於相容 MySQL 用戶端。無實際作用。 |
character_set_client | 用於相容 MySQL 用戶端。無實際作用。 |
character_set_connection | 用於相容 MySQL 用戶端。無實際作用。 |
character_set_results | 用於相容 MySQL 用戶端。無實際作用。 |
character_set_server | 用於相容 MySQL 用戶端。無實際作用。 |
collation_connection | 用於相容 MySQL 用戶端。無實際作用。 |
collation_database | 用於相容 MySQL 用戶端。無實際作用。 |
collation_server | 用於相容 MySQL 用戶端。無實際作用。 |
have_query_cache | 用於相容 MySQL 用戶端。無實際作用。 |
init_connect | 用於相容 MySQL 用戶端。無實際作用。 |
interactive_timeout | 用於相容 MySQL 用戶端。無實際作用。 |
language | 用於相容 MySQL 用戶端。無實際作用。 |
max_allowed_packet | 用於相容 JDBC 串連池 C3P0。無實際作用。 |
net_buffer_length | 用於相容 MySQL 用戶端。無實際作用。 |
net_read_timeout | 用於相容 MySQL 用戶端。無實際作用。 |
net_write_timeout | 用於相容 MySQL 用戶端。無實際作用。 |
query_cache_size | 用於相容 MySQL 用戶端。無實際作用。 |
query_cache_type | 用於相容 JDBC 串連池 C3P0。 無實際作用。 |
sql_safe_updates | 用於相容 MySQL 用戶端。無實際作用。 |
tx_isolation | 用於相容 MySQL 用戶端。無實際作用。 |
tx_read_only | 用於相容 MySQL 用戶端。無實際作用。 |
transaction_read_only | 用於相容 MySQL 用戶端。無實際作用。 |
transaction_isolation | 用於相容 MySQL 用戶端。無實際作用。 |
version | 用於相容 MySQL 用戶端。無實際作用。 |
performance_schema | 用於相容 8.0.16及以上版本的MySQL JDBC。無實際作用。 |
codegen_level | 用於設定 LLVM codegen 的等級,當前未生效。 |
license | 顯示 SelectDB 的 License。無其他作用。 |
resource_group | 暫不使用。 |
system_time_zone | 叢集初始化時設定為當前系統時區。不可更改。 |
version_comment | 用於顯示 SelectDB 的版本。不可更改。 |
dump_nereids_memo | 迴歸測試用。 |
group_concat_max_len | 為了相容某些BI工具能正確擷取和設定該變數,變數值實際並沒有作用。 |
be_number_for_test | 無實際作用。 |
workload_group | 暫未啟用。 |
逾時控制補充說明
目前SelectDB支援通過variable和user property兩種體系來進行逾時控制。其中均包含query_timeout和insert_timeout。
逾時生效的優先順序次序是:session variable>user property>global variable>default value。較高優先順序的變數未設定時,會自動採用下一個優先順序的數值。
query_timeout用於控制所有語句的逾時,insert_timeout只用於控制INSERT語句的逾時,在執行INSERT語句時,逾時時間會取query_timeout和insert_timeout中的最大值。
user property中的query_timeout和insert_timeout只能由 ADMIN 使用者對目標使用者予以指定,其語義在於改變被指定使用者的預設逾時時間,並且不具備quota語義。user property設定的逾時時間需要用戶端重連後觸發。
擴充閱讀
IANA 時區資料庫:IANA Time Zone Database
ICANN 時區資料庫:The tz-announce Archives