本文介紹BE進程的相關配置項。
背景資訊
BE進程的設定檔be.conf通常存放在BE部署路徑的conf/目錄下。而在0.14版本中會引入另一個設定檔be_custom.conf。該設定檔用於記錄您在運行時動態配置並持久化的配置項。BE進程啟動後,會先讀取be.conf中的配置項,之後再讀取be_custom.conf中的配置項。be_custom.conf中的配置項會覆蓋be.conf中相同的配置項。
查看配置項
您可以通過訪問BE的Web頁面查看當前配置項:http://be_host:be_webserver_port/varz。
設定配置項
BE的配置項有兩種方式進行配置:
靜態配置
在conf/be.conf檔案中添加和設定配置項。be.conf中的配置項會在BE進行啟動時被讀取。沒有在be.conf中的配置項將使用預設值。
動態配置
BE啟動後,可以通過以下命令動態設定配置項:
curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}'
在0.13及之前版本,通過該方式修改的配置項將在BE進程重啟後失效。在0.14及之後版本中,可以通過以下命令持久化修改後的配置,修改後的配置項儲存在be_custom.conf檔案中。
curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}&persist=true應用舉例
靜態方式修改max_base_compaction_concurrency。在be.cnf檔案中添加
max_base_compaction_concurrency=5之後,重啟BE進程以生效該配置。動態方式修改streaming_load_max_mb。BE進程啟動後,通過以下命令動態設定配置項:
streaming_load_max_mb:curl -X POST http://{be_ip}:{be_http_port}/api/update_config?streaming_load_max_mb=1024傳回值如下,則說明設定成功。
{ "status": "OK", "msg": "" }BE重啟後該配置將失效。如果想持久化修改結果,請用如下命令:
curl -X POST http://{be_ip}:{be_http_port}/api/update_config?streaming_load_max_mb=1024\&persist=true
配置項列表
alter_tablet_worker_count
預設值:3
說明:進行schema change的線程數。
generate_compaction_tasks_min_interval_ms
預設值:10
說明:產生compaction作業的最小間隔時間。單位:ms。
enable_vectorized_compaction
預設值:true
說明:是否開啟向量化compaction。
base_compaction_interval_seconds_since_last_operation
預設值:86400
說明:BaseCompaction觸發條件之一,表示上一次BaseCompaction距今的間隔。
base_compaction_num_cumulative_deltas
預設值:5
說明:BaseCompaction觸發條件之一,表示Cumulative檔案數目要達到的限制,達到這個限制之後會觸發BaseCompaction。
base_compaction_write_mbytes_per_sec
預設值:5
說明:BaseCompaction任務每秒寫磁碟最大速度。單位:MB。
base_cumulative_delta_ratio
預設值:0.3
說明:BaseCompaction觸發條件之一,Cumulative檔案大小達到Base檔案的比例。
base_compaction_trace_threshold
預設值:10
類型:Int32
說明:列印Base compaction的trace資訊的閾值。單位:秒。
Base compaction是一個耗時較長的後台操作,為了跟蹤其運行資訊,可以調整這個閾值參數來控制trace日誌的列印。列印資訊如下:
W0610 11:26:33.804431 56452 storage_engine.cpp:552] Trace:
0610 11:23:03.727535 (+ 0us) storage_engine.cpp:554] start to perform base compaction
0610 11:23:03.728961 (+ 1426us) storage_engine.cpp:560] found best tablet 546859
0610 11:23:03.728963 (+ 2us) base_compaction.cpp:40] got base compaction lock
0610 11:23:03.729029 (+ 66us) base_compaction.cpp:44] rowsets picked
0610 11:24:51.784439 (+108055410us) compaction.cpp:46] got concurrency lock and start to do compaction
0610 11:24:51.784818 (+ 379us) compaction.cpp:74] prepare finished
0610 11:26:33.359265 (+101574447us) compaction.cpp:87] merge rowsets finished
0610 11:26:33.484481 (+125216us) compaction.cpp:102] output rowset built
0610 11:26:33.484482 (+ 1us) compaction.cpp:106] check correctness finished
0610 11:26:33.513197 (+ 28715us) compaction.cpp:110] modify rowsets finished
0610 11:26:33.513300 (+ 103us) base_compaction.cpp:49] compaction finished
0610 11:26:33.513441 (+ 141us) base_compaction.cpp:56] unused rowsets have been moved to GC queue
Metrics: {"filtered_rows":0,"input_row_num":3346807,"input_rowsets_count":42,"input_rowsets_data_size":1256413170,"input_segments_num":44,"merge_rowsets_latency_us":101574444,"merged_rows":0,"output_row_num":3346807,"output_rowset_data_size":1228439659,"output_segments_num":6}be_port
預設值:9060
類型:Int32
說明:BE進程上thrift server的連接埠號碼,用於接收來自FE的請求。
be_service_threads
預設值:64
類型:Int32
說明:BE進程上thrift server service的執行線程數,代表可以用於執行FE請求的線程數。
brpc_max_body_size
此配置主要用來修改brpc的參數max_body_size。有時查詢失敗,在BE日誌中會出現body_size is too large的錯誤資訊。這可能發生在SQL模式為multi distinct、沒有group by且涉及表資料量超過1T的情況下。這個錯誤表示brpc的包大小超過了配置值。此時可以通過調大該配置避免這個錯誤。
brpc_socket_max_unwritten_bytes
這個配置主要用來修改brpc的參數socket_max_unwritten_bytes。有時查詢失敗,BE日誌中會出現The server is overcrowded的錯誤資訊,表示串連上有過多的未發送資料。當查詢需要發送較大的bitmap欄位時,可能會遇到該問題,此時可以通過調大該配置避免該錯誤。
transfer_large_data_by_brpc
預設值:true
類型:Bool
說明:該配置用來控制是否在Tuple或者Block data長度大於1.8 GB時,將protoBuf request序列化後和Tuple或者Block data一起嵌入到controller attachment後通過Http brpc發送。protoBuf request的長度超過2 GB時的,會出現
Bad request, error_text=[E1003]Fail to compress request的錯誤資訊。為了避免此錯誤資訊,在過去的版本中,曾將Tuple、Block data放入Attachment後通過預設的baidu_std brpc發送,但Attachment超過2 GB時將被截斷,通過Http brpc發送不存在2 GB的限制。
brpc_num_threads
此配置主要用來修改brpc中bthreads的數量。該配置的預設值為-1,這意味著bthreads的數量將被設定為機器的CPU核心數。您可以將該配置的值調大以擷取更好的QPS效能。更多資訊,請參見incubator-brpc使用說明。
brpc_port
預設值:8060
類型:Int32
說明:BE進程上的brpc的連接埠,用於BE進程之間進行通訊。
buffer_pool_clean_pages_limit
預設值:20
說明:清理可能被緩衝池儲存的Page。
buffer_pool_limit
預設值:20%
類型:String
說明:buffer pool之中最大的可分配記憶體。
buffer pool是BE新的記憶體管理結構,是BE緩衝池最大的記憶體可用量。通過buffer page來進行記憶體管理,並能夠實現資料的落盤。並發的所有查詢的記憶體申請都會通過buffer pool來申請。當前buffer pool僅作用在AggregationNode與ExchangeNode。
check_auto_compaction_interval_seconds
預設值:5
類型:Int32
說明:當自動執行compaction的功能關閉時,檢查自動compaction開關是否被開啟的時間間隔。
check_consistency_worker_count
預設值:1
說明:計算tablet的校正和checksum的背景工作執行緒數。
chunk_reserved_bytes_limit
預設值:20%
類型:Int32
說明:Chunk Allocator的reserved bytes限制,通常被設定為mem_limit的百分比。預設單位:位元組,值必須是2的倍數,且必須大於0。如果大於實體記憶體,將被設定為實體記憶體大小。增加這個變數可以提高效能,但是會獲得更多其他模組無法使用的空閑記憶體。
clear_transaction_task_worker_count
預設值:1
說明:用於清理事務的線程數。
clone_worker_count
預設值:3
類型:Int32
說明:用於執行複製任務的線程數。
cluster_id
預設值:-1
類型:Int32
說明:配置BE進程所屬的叢集Id。
該值通常由FE通過心跳向BE下發,不需要額外進行配置。當確認某BE進程屬於某一個確定的Drois叢集時,可以進行配置,同時需要修改資料目錄下的cluster_id檔案,使二者相同。
column_dictionary_key_ratio_threshold
預設值:0
說明:字串類型的取值比例,小於這個比例採用字典壓縮演算法。
column_dictionary_key_size_threshold
預設值:0
說明:字典壓縮列大小,小於這個值採用字典壓縮演算法。
compaction_tablet_compaction_score_factor
預設值:1
類型:Int32
說明:選擇tablet進行compaction時,計算tablet score的公式中compaction score的權重。
compaction_tablet_scan_frequency_factor
預設值:0
類型:Int32
說明:選擇tablet進行compaction時,計算tablet score的公式中tablet scan frequency的權重。
選擇一個tablet執行compaction任務時,可以將tablet的scan頻率作為一個選擇依據,對當前最近一段時間頻繁scan的tablet優先執行compaction。tablet score可以通過以下公式計算:
tablet_score = compaction_tablet_scan_frequency_factor tablet_scan_frequency + compaction_tablet_compaction_score_factor compaction_scorecompaction_task_num_per_disk
預設值:2
類型:Int32
說明:每個磁碟(HDD)可以並發執行的compaction任務數量。
compaction_task_num_per_fast_disk
預設值:4
類型:Int32
說明:每個高速磁碟(SSD)可以並發執行的compaction任務數量。
compress_rowbatches
預設值:true
類型:Bool
說明:序列化RowBatch時是否使用Snappy壓縮演算法進行資料壓縮。
create_tablet_worker_count
預設值:3
說明:BE建立tablet的背景工作執行緒數。
cumulative_compaction_rounds_for_each_base_compaction_round
預設值:9
類型:Int32
說明:Compaction任務的生產者每次連續生產多少輪cumulative compaction任務後生產一輪base compaction。
disable_auto_compaction
預設值:false
類型:Bool
說明:關閉自動執行compaction任務。
一般需要為關閉狀態,當調試或測試環境中想要手動操作compaction任務時,可以對該配置進行開啟。
cumulative_compaction_budgeted_bytes
預設值:104857600
說明:BaseCompaction觸發條件之一,Singleton檔案大小限制為100 MB。
cumulative_compaction_trace_threshold
預設值:2
類型:Int32
說明:列印cumulative compaction的trace資訊的閾值,單位:秒。
disable_compaction_trace_log
預設值:true
類型:Bool
說明:關閉compaction的trace日誌。
如果設定為true,cumulative_compaction_trace_threshold和base_compaction_trace_threshold將不起作用。並且trace日誌將關閉。
cumulative_compaction_policy
預設值:size_based
類型:String
說明:配置cumulative compaction階段的合并策略,目前實現了兩種合并策略:num_based和size_based。取值說明如下:
ordinary:最初版本的cumulative compaction合并策略,做一次cumulative compaction之後直接base compaction流程。
size_base:是ordinary策略的最佳化版本,僅當rowset的磁碟體積在相同數量級時才進行版本合并。合并之後滿足條件的rowset進行晉陞到base compaction階段。能夠做到在大量小大量匯入的情況下:降低base compact的寫入放大率,並在讀取放大率和空間放大率之間進行權衡,同時減少了檔案版本的資料。
cumulative_size_based_promotion_size_mbytes
預設值:1024
類型:Int64
說明:在size_based策略下,cumulative compaction的輸出rowset總磁碟大小超過了此配置大小,該rowset將用於base compaction。單位是m位元組。
一般情況下,配置在2G以內,為了防止cumulative compaction時間過長,導致版本積壓。
cumulative_size_based_promotion_ratio
預設值:0.05
類型:Double
說明:在size_based策略下,cumulative compaction的輸出rowset總磁碟大小超過base版本rowset的配置比例時,該rowset將用於base compaction。
一般情況下,建議此配置項不要高於0.1且不低於0.02。
cumulative_size_based_promotion_min_size_mbytes
預設值:64
類型:Int32
說明:在size_based策略下,cumulative compaction的輸出rowset總磁碟大小低於此配置大小,該rowset將不進行base compaction,仍然處於cumulative compaction流程中。單位是m位元組。
一般情況下,建議配置在512 MB以內,配置過大會導致base版本早期的大小過小,一直不進行base compaction。
cumulative_size_based_compaction_lower_size_mbytes
預設值:64
類型:Int64
說明:在size_based策略下,cumulative compaction進行合并時,選出的要進行合并的rowset的總磁碟大小大於此配置時,才按層級策略劃分合并。小於這個配置時,直接執行合并。單位是m位元組。
一般情況下,配置在128 MB以內,配置過大會導致cumulative compaction寫放大較多。
custom_config_dir
配置be_custom.conf檔案的位置。預設為conf/目錄下。在某些部署環境下,conf/目錄可能因為系統的版本升級被覆蓋掉。這會導致在運行時,持久化修改的配置項也被覆蓋。這時,您可以將be_custom.conf儲存在另一個指定的目錄中,以防止設定檔被覆蓋。
default_num_rows_per_column_file_block
預設值:1024
類型:Int32
說明:配置單個RowBlock之中包含多少行的資料。
default_rowset_type
預設值:BETA
類型:String
說明:標識BE預設選擇的儲存格式,可配置的參數為ALPHA、BETA。主要起以下兩個作用:
當建表的storage_format設定為Default時,通過該配置來選取BE的儲存格式。
進行Compaction時選擇BE的儲存格式。
delete_worker_count
預設值:3
說明:執行資料刪除任務的線程數。
disable_mem_pools
預設值:false
說明:是否禁用記憶體緩衝池,預設不禁用。
disable_storage_page_cache
預設值:false
類型:Bool
說明:是否進行使用page cache進行index的緩衝,該配置僅在BETA儲存格式時生效。
disk_stat_monitor_interval
預設值:5
說明:磁碟狀態檢查時間間隔。單位:秒。
doris_cgroups
說明:分配給doris的cgroups。
doris_max_pushdown_conjuncts_return_rate
預設值:90
類型:Int32
說明:BE在進行HashJoin時,會採取動態分區裁剪的方式將join條件下推到OlapScanner上。當OlapScanner掃描的資料大於32768行時,BE會進行過濾條件檢查,如果該過濾條件的過濾率低於該配置,則Doris會停止使用動態分區裁剪的條件進行資料過濾。
doris_max_scan_key_num
預設值:1024
類型:Int
說明:用於限制一個查詢請求中,Scan node節點能拆分的最大scan key的個數。當一個帶有條件的查詢請求到達Scan node節點時,Scan node會嘗試將查詢條件中Key列相關的條件拆分成多個Scan key range。之後這些Scan key range會被分配給多個Scanner線程進行資料掃描。較大的數值通常意味著可以使用更多的Scanner線程來提升掃描操作的並行度。但在高並發情境下,過多的線程可能會帶來更大的調度開銷和系統負載,反而會降低查詢響應速度。一個經驗數值為50。
當在高並發情境下發下並發度無法提升時,可以嘗試降低該數值並觀察影響。
doris_scan_range_row_count
預設值:524288
類型:Int32
說明:BE在進行資料掃描時,會將同一個掃描範圍拆分為多個ScanRange。該參數代表了每個ScanRange代表掃描資料範圍。通過該參數可以限制單個OlapScanner佔用IO線程的時間。
doris_scanner_queue_size
預設值:1024
類型:Int32
說明:TransferThread與OlapScanner之間RowBatch的緩衝隊列的長度。Doris進行資料掃描時是非同步進行的,OlapScanner掃描上來的Rowbatch會放入緩衝隊列之中,等待上層TransferThread取走。
doris_scanner_row_num
預設值:16384
說明:每個掃描線程單次執行最多返回的資料行數。
doris_scanner_thread_pool_queue_size
預設值:102400
類型:Int32
說明:Scanner線程池的隊列長度。在Doris的掃描任務之中,每一個Scanner會作為一個線程task提交到線程池之中等待被調度,而提交的任務數目超過線程池隊列的長度之後,後續提交的任務將阻塞直到隊列之中有新的空缺。
doris_scanner_thread_pool_thread_num
預設值:48
類型:Int32
說明:Scanner線程池線程數目。在Doris的掃描任務之中,每一個Scanner會作為一個線程task提交到線程池之中等待被調度,該參數決定了Scanner線程池的大小。
download_low_speed_limit_kbps
預設值:50
說明:下載最低限速,單位:KB/s。
download_low_speed_time
預設值:300
說明:下載時間限制,單位:秒。
download_worker_count
預設值:1
說明:下載線程數。
drop_tablet_worker_count
預設值:3
說明:刪除tablet的線程數。
enable_metric_calculator
預設值:true
說明:如果設定為true,Metric Calculator將運行,收集BE相關指標資訊,如果設定成false將不運行。
enable_partitioned_aggregation
預設值:true
類型:Bool
說明:BE節點是否通過PartitionAggregateNode來實現彙總操作,如果設定為false,將會執行AggregateNode完成彙總。非特殊需求情境不建議設定為false。
enable_prefetch
預設值:true
類型:Bool
說明:當使用PartitionedHashTable進行彙總和join計算時,是否進行HashBuket的預取,推薦設定為true。
enable_quadratic_probing
預設值:true
類型:Bool
說明:當使用PartitionedHashTable時發生Hash衝突時,是否採用平方探測法來解決Hash衝突。該值為false的話,則選用線性探測發來解決Hash衝突。關於平法探測法,詳情請參見quadratic_probing。
enable_system_metrics
預設值:true
說明:控制開啟和關閉系統指標。
enable_token_check
預設值:true
說明:用於向前相容,稍後將被刪除。
enable_stream_load_record
預設值:false
說明:是否開啟stream load操作記錄,預設不啟用。
es_http_timeout_ms
預設值:5000
說明:通過HTTP串連ES的逾時時間。單位:ms。
es_scroll_keepalive
預設值:5
說明:es scroll Keeplive的保持時間。單位:分鐘。
etl_thread_pool_queue_size
預設值:256
說明:ETL線程池的大小。
exchg_node_buffer_size_bytes
預設值:10485760
類型:Int32
說明:ExchangeNode節點Buffer隊列的大小,單位為byte。來自Sender端發送的資料量大於ExchangeNode的Buffer大小之後,後續發送的資料將阻塞直到Buffer騰出可寫入的空間。
file_descriptor_cache_capacity
預設值:32768
說明:檔案控制代碼緩衝的容量,預設緩衝32768個檔案控制代碼。
cache_clean_interval
預設值:1800
說明:檔案控制代碼緩衝清理的間隔,用於清理長期不用的檔案控制代碼。 同時也是Segment Cache的清理間隔時間。單位:秒。
flush_thread_num_per_store
預設值:2
說明:每個store用於重新整理記憶體表的線程數。
fragment_pool_queue_size
預設值:2048
說明:單節點上能夠處理的查詢請求上限。
fragment_pool_thread_num_min
預設值:64
說明:fragment執行線程池最小線程數。
fragment_pool_thread_num_max
預設值:256
說明:查詢線程數,預設最小啟動64個線程,後續查詢請求動態建立線程,最大建立256個線程。
heartbeat_service_port
預設值:9050
類型:Int32
說明:BE上心跳服務連接埠(thrift),用於接收來自FE的心跳。
heartbeat_service_thread_count
預設值:1
類型:Int32
說明:執行BE上心跳服務的線程數,不建議修改預設值。
ignore_broken_disk
預設值:false
說明:當BE啟動時,會檢查storage_root_path配置下的所有路徑。
ignore_broken_disk設定為true時,如果路徑不存在或路徑下無法進行讀寫檔案(壞盤),將忽略此路徑,如果有其他可用路徑則不中斷啟動。
ignore_broken_disk設定為false時,如果路徑不存在或路徑下無法進行讀寫檔案(壞盤),將中斷啟動失敗退出。
ignore_load_tablet_failure
預設值:false
類型:Bool
說明:用來決定在有tablet載入失敗的情況下是否忽略錯誤,繼續啟動BE。
BE啟動時,會對每個資料目錄單獨啟動一個線程進行tablet header元資訊的載入。預設配置下,如果某個資料目錄有tablet載入失敗,則啟動進程會終止。同時會在be.INFO日誌中看到如下錯誤資訊:
load tablets from header failed, failed tablets size: xxx, path=xxx表示該資料目錄共有多少tablet載入失敗。同時,日誌中也會有載入失敗的tablet的具體資訊。此時需要人工介入來對錯誤原因進行排查。排查後,通常有兩種方式進行恢複:
tablet資訊不可修複,在確保其他副本正常的情況下,可以通過meta_tool工具將錯誤的tablet刪除。
將ignore_load_tablet_failure設定為true,則BE會忽略這些錯誤的tablet,正常啟動。
ignore_rowset_stale_unconsistent_delete
預設值:false
類型:Bool
說明:用來決定當刪除到期的合并過的rowset後無法構成一致的版本路徑時,是否仍要刪除。
合并的到期rowset版本路徑會在半個小時後進行刪除。在異常下,刪除這些版本會出現構造不出查詢一致路徑的問題,當配置為false時,程式檢查比較嚴格,程式會直接報錯退出。 當配置為true時,程式會正常運行,忽略這個錯誤。一般情況下,忽略這個錯誤不會對查詢造成影響,僅會在fe下發了合并過的版本時出現-230錯誤。
inc_rowset_expired_sec
預設值:1800
說明:匯入啟用的資料,儲存引擎保留的時間,用於增量複製。單位:秒。
index_stream_cache_capacity
預設值:10737418240
說明:BloomFilter、Min、Max等統計資訊緩衝的容量。
kafka_api_version_request
預設值:true
說明:如果依賴的kafka版本低於0.10.0.0,該值應該被設定為false。
kafka_broker_version_fallback
預設值:0.10.0
說明:如果依賴的kafka版本低於0.10.0.0,當kafka_api_version_request值為false的時候,將使用回退版本kafka_broker_version_fallback設定的值,有效值為:0.9.0.x、0.8.x.y。
load_data_reserve_hours
預設值:4
說明:用於mini load。mini load資料檔案將在此時間後被刪除。單位:小時。
load_error_log_reserve_hours
預設值:48
說明:load錯誤記錄檔將在此時間後刪除。單位:小時。
load_process_max_memory_limit_bytes
預設值:107374182400
說明:單節點上所有的匯入線程佔據的記憶體上限,預設值:100G。將這些預設值設定得很大,是為了在您升級Doris時提供更好的負載效能。
load_process_max_memory_limit_percent
預設值:80
說明:單節點上所有的匯入線程佔據的記憶體上限比例,預設80%。將這些預設值設定得很大,是為了在您升級Doris時提供更好的負載效能。
log_buffer_level
說明:日誌刷盤的策略,預設保持在記憶體中。
madvise_huge_pages
預設值:false
說明:是否使用Linux記憶體大頁,預設不啟用。
make_snapshot_worker_count
預設值:5
說明:製作快照的線程數。
max_client_cache_size_per_host
預設值:10
說明:每個主機的最大用戶端緩衝數,BE中有多種用戶端緩衝,但目前我們使用相同的緩衝大小配置。如有必要,使用不同的配置來設定不同的用戶端緩衝。
max_base_compaction_threads
預設值:4
類型:Int32
說明:Base Compaction線程池中線程數量的最大值。
max_cumu_compaction_threads
預設值:10
類型:Int32
說明:Cumulative Compaction線程池中線程數量的最大值。
max_consumer_num_per_group
預設值:3
說明:一個資料消費者組中的最大消費者數量,用於routine load。
min_cumulative_compaction_num_singleton_deltas
預設值:5
說明:Cumulative Compaction策略,表示最小增量檔案的數量。
max_cumulative_compaction_num_singleton_deltas
預設值:1000
說明:Cumulative Compaction策略,表示最大增量檔案的數量。
max_download_speed_kbps
預設值:50000
說明:最大下載速度限制。單位:kb/s。
max_free_io_buffers
預設值:128
說明:對於每個io緩衝區大小,IoMgr將保留的最大緩衝區數從1024B到8MB的緩衝區,最多約為2GB的緩衝區。
max_garbage_sweep_interval
預設值:3600
說明:磁碟進行垃圾清理的最大間隔,預設一個小時。
max_memory_sink_batch_count
預設值:20
說明:最大外部掃描緩衝批次計數,表示緩衝max_memory_cache_batch_count batch_size row,預設為20,batch_size的預設值為1024,表示將緩衝20次,每次1024行。
max_percentage_of_error_disk
預設值:0
類型:Int32
說明:儲存引擎允許存在損壞硬碟的百分比,損壞硬碟超過改比例後,BE將會自動結束。
max_pushdown_conditions_per_column
預設值:1024
類型:Int
說明:用於限制一個查詢請求中,針對單個列,能夠下推到儲存引擎的最大條件數量。在查詢計劃執行的過程中,一些列上的過濾條件可以下推到儲存引擎,這樣可以利用儲存引擎中的索引資訊進行資料過濾,減少查詢需要掃描的資料量。比如等值條件、IN 謂詞中的條件等。這個參數在絕大多數情況下僅影響包含 IN 謂詞的查詢。例如WHERE colA IN (1,2,3,4,...)。較大的數值意味值 IN 謂詞中更多的條件可以推送給儲存引擎,但過多的條件可能會導致隨機讀的增加,某些情況下可能會降低查詢效率。該配置可以單獨進行會話層級的配置 。
樣本表結構為id INT, col2 INT, col3 varchar(32), ...。查詢請求為... WHERE id IN (v1, v2, v3, ...)。如果IN謂詞中的條件數量超過了該配置,則可以嘗試增加該配置值,觀察查詢響應是否有所改善。
max_runnings_transactions_per_txn_map
預設值:100
說明:txn管理器中每個txn_partition_map的最大txns數,這是一種自我保護,以避免在管理器中儲存過多的txns。
max_send_batch_parallelism_per_job
預設值:5
類型:Int
說明:OlapTableSink發送批處理資料的最大並行度,為send_batch_parallelism設定的值不允許超過 max_send_batch_parallelism_per_job,如果超過那麼send_batch_parallelism將被設定為max_send_batch_parallelism_per_job的值。
max_tablet_num_per_shard
預設值:1024
說明:每個shard的tablet數目,用於劃分tablet,防止單個目錄下tablet子目錄過多。
max_tablet_version_num
預設值:500
類型:Int
說明:限制單個tablet最大version的數量。用於防止匯入過於頻繁,或compaction不及時導致的大量version堆積問題。當超過限制後,匯入任務將被拒絕。
mem_limit
預設值:80%
類型:String
說明:限制BE進程使用伺服器最大記憶體百分比。用於防止BE記憶體擠占太多的機器記憶體,該參數必須大於0,當百分大於100%之後,該值會預設為100%。
memory_limitation_per_thread_for_schema_change
預設值:2
說明:單個schema change任務允許佔用的最大記憶體。單位:GB。
memory_maintenance_sleep_time_s
預設值:10
說明:記憶體維護迭代之間的休眠時間。單位:秒。
memory_max_alignment
預設值:16
說明:最大校對記憶體。
read_size
預設值:8388608
說明:讀取大小是發送到OS的讀取大小。 在延遲和整個過程之間進行權衡,試圖讓磁碟保持忙碌但不引入磁碟定址。 對於8 MB讀取,隨機IO和順序IO的效能相似。
min_buffer_size
預設值:1024
說明:最小讀取緩衝區大小。單位:位元組。
min_compaction_failure_interval_sec
預設值:5
類型:Int32
說明:在Cumulative Compaction過程中,當選中tablet沒能成功的進行版本合并,則會等待一段時間後才會再次有可能被選中。等待的這段時間就是這個配置的值。單位:秒。
min_compaction_threads
預設值:10
類型:Int32
說明:Compaction線程池中線程數量的最小值。
min_file_descriptor_number
預設值:60000
說明:BE進程的檔案控制代碼limit要求的下限。
min_garbage_sweep_interval
預設值:180
說明:磁碟進行垃圾清理的最小時間間隔,單位:秒。
mmap_buffers
預設值:false
說明:是否使用mmap分配記憶體,預設不使用。
num_cores
預設值:0
類型:Int32
說明:BE可以使用CPU的核心數。當該值為0時,BE將從/proc/cpuinfo之中擷取原生CPU核心數。
num_disks
預設值:0
說明:控制機器上的磁碟數量。 如果為0,則來自系統設定。
num_threads_per_core
預設值:3
說明:控制每個核心運行工作的線程數。 通常選擇2倍或3倍的核心數量。 這使核心保持忙碌而不會導致過度抖動。
num_threads_per_disk
預設值:0
說明:每個磁碟的最大線程數也是每個磁碟的最大隊列深度。
number_tablet_writer_threads
預設值:16
說明:tablet寫線程數。
path_gc_check
預設值:true
說明:是否啟用回收掃描資料線程檢查,預設啟用。
path_gc_check_interval_second
預設值:86400
說明:回收掃描資料線程檢查時間間隔,單位:秒。
path_gc_check_step
預設值:1000
說明:gc檢查的步長。
path_gc_check_step_interval_ms
預設值:10
說明:兩次gc檢查之間的時間間隔。
path_scan_interval_second
預設值:86400
說明:gc前路徑掃描的時間間隔。
pending_data_expire_time_sec
預設值:1800
說明:儲存引擎保留的未生效資料的最大時間長度,預設單位:秒。
periodic_counter_update_period_ms
預設值:500
說明:更新速率計數器和採樣計數器的周期,預設單位:毫秒。
plugin_path
預設值:${DORIS_HOME}/plugin
說明:外掛程式路徑。
port
預設值:20001
類型:Int32
說明:BE單測時使用的連接埠。
pprof_profile_dir
預設值:${DORIS_HOME}/log
說明:pprof profile儲存目錄。
priority_networks
為一些有很多IP的伺服器聲明一個選擇策略。 請注意,最多應該有一個IP與此列表匹配。 這是一個以分號分隔格式的列表,用CIDR標記法,例如:10.10.10.0/24 , 如果沒有匹配這條規則的IP,會隨機播放一個。
priority_queue_remaining_tasks_increased_frequency
預設值:512
說明:BlockingPriorityQueue中任務優先順序的調整頻率。
publish_version_worker_count
預設值:8
說明:生效版本的線程數。
pull_load_task_dir
預設值:${DORIS_HOME}/var/pull_load
說明:拉取Laod任務的目錄。
push_worker_count_high_priority
預設值:3
說明:匯入線程數,用於處理HIGH優先順序任務。
push_worker_count_normal_priority
預設值:3
說明:匯入線程數,用於處理NORMAL優先順序任務。
push_write_mbytes_per_sec
預設值:10
類型:Int32
說明:匯入資料速度控制,預設最快每秒10MB。適用於所有的匯入方式。單位:MB。
query_scratch_dirs
預設值:${DORIS_HOME}
類型:String
說明:BE進行資料落盤時選取的目錄來存放臨時資料,與儲存路徑配置類似,多目錄之間用分號(;)分隔。
release_snapshot_worker_count
預設值:5
說明:釋放快照的線程數。
report_disk_state_interval_seconds
預設值:60
說明:代理向FE報告磁碟狀態的間隔時間。單位:秒。
report_tablet_interval_seconds
預設值:60
說明:代理向FE報告olap表的間隔時間。單位:秒。
report_task_interval_seconds
預設值:10
說明:代理向FE報告工作簽名的間隔時間。單位:秒。
result_buffer_cancelled_interval_time
預設值:300
說明:結果緩衝區取消時間。單位:秒。
routine_load_thread_pool_size
預設值:10
說明:routine load任務的線程池大小。 這應該大於FE配置的
max_concurrent_task_num_per_be(預設 5)。
row_nums_check
預設值:true
說明:檢查BE、CE和schema更改的行號。 true是開啟的,false是關閉的。
row_step_for_compaction_merge_log
預設值:0
類型:Int64
可動態修改:是
說明:Compaction執行過程中,每次合并row_step_for_compaction_merge_log行資料會列印一條LOG。如果該參數被設定為0,表示merge過程中不需要列印LOG。
scan_context_gc_interval_min
預設值:5
說明:此配置用於上下文gc線程調度周期。單位:分鐘。
send_batch_thread_pool_thread_num
預設值:256
類型:Int32
說明:SendBatch線程池線程數目。在NodeChannel的發送資料任務之中,每一個NodeChannel的SendBatch操作會作為一個線程task提交到線程池之中等待被調度,該參數決定了SendBatch線程池的大小。
send_batch_thread_pool_queue_size
預設值:102400
類型:Int32
說明:SendBatch線程池的隊列長度。在NodeChannel的發送資料任務之中,每一個NodeChannel的SendBatch操作會作為一個線程task提交到線程池之中等待被調度,而提交的任務數目超過線程池隊列的長度之後,後續提交的任務將阻塞直到隊列之中有新的空缺。
serialize_batch
預設值:false
說明:BE之間rpc通訊是否序列化RowBatch,用於查詢層之間的資料轉送。
sleep_one_second
預設值:1
類型:Int32
說明:全域變數,用於BE線程休眠1秒,不應該被修改。
small_file_dir
預設值:${DORIS_HOME}/lib/small_file/
說明:用於儲存SmallFileMgr下載的檔案的目錄。
snapshot_expire_time_sec
預設值:172800
說明:快照檔案清理的間隔,預設值:48小時。
status_report_interval
預設值:5
說明:設定檔報告之間的間隔。單位:秒。
storage_flood_stage_left_capacity_bytes
預設值:1073741824
說明:資料目錄應該剩下的最小儲存空間,預設1 GB。
storage_flood_stage_usage_percent
預設值:95
說明:資料目錄的最大已用容量百分比。storage_flood_stage_usage_percent和storage_flood_stage_left_capacity_bytes兩個配置限制了資料目錄的磁碟容量的最大使用。如果這兩個閾值都達到,則無法將更多資料寫入該資料目錄。
storage_medium_migrate_count
預設值:1
說明:要複製的線程數。
storage_page_cache_limit
預設值:20%
說明:緩衝儲存頁大小。
storage_page_cache_shard_size
預設值:16
說明:StoragePageCache的分區大小,值為 2^n (n=0,1,2,...)。建議設定為接近BE CPU核心數的值,可減少StoragePageCache的鎖競爭。
index_page_cache_percentage
預設值:10
類型:Int32
說明:索引頁緩衝佔總頁面緩衝的百分比,取值為[0, 100]。
storage_root_path
預設值:${DORIS_HOME}
類型:String
說明:BE資料存放區的目錄,多目錄之間用英文狀態的分號(;)分隔。可以通過路徑區別儲存目錄的介質,HDD或SSD。可以添加容量限制在每個路徑的末尾,通過英文狀態逗號(,)隔開。 如果不是SSD和HDD磁碟混合使用的情況,不需要按照如下樣本一和樣本二的配置方法配置,只需指定儲存目錄即可;也不需要修改FE的預設儲存介質配置。
樣本一:
storage_root_path=/home/disk1/doris.HDD;/home/disk2/doris.SSD;/home/disk2/doris,如果是SSD磁碟要在目錄後面加上.SSD,HDD磁碟在目錄後面加.HDD。樣本二:
storage_root_path=/home/disk1/doris,medium:hdd;/home/disk2/doris,不論HHD磁碟目錄還是SSD磁碟目錄,檔案夾目錄名稱都無需添加尾碼,storage_root_path參數裡指定medium即可。說明medium:ssd說明如下:
/home/disk1/doris.HDD,表示儲存介質是HDD。
/home/disk2/doris.SSD,表示儲存介質是SSD。
/home/disk2/doris,儲存介質預設為HDD。
/home/disk1/doris,medium:hdd,表示儲存介質是HDD。
/home/disk2/doris,medium:ssd,表示儲存介質是SSD。
storage_strict_check_incompatible_old_format
預設值:true
類型:Bool
可動態修改:否
說明:用來檢查不相容的舊版本格式時是否使用嚴格的驗證方式。
配置用來檢查不相容的舊版本格式時是否使用嚴格的驗證方式,當含有舊版本的hdr格式時,使用嚴謹的方式時,程式會打出fatal log並且退出運行;否則,程式僅列印warn log。
streaming_load_max_mb
預設值:10240
類型:Int64
可動態修改:是
說明:用於限制資料格式為csv的一次Stream Load匯入中允許的最巨量資料量。單位:MB。
Stream Load一般適用於匯入幾個GB以內的資料,不適合匯入過大的資料。
streaming_load_json_max_mb
預設值:100
類型:Int64
可動態修改:是
說明:用於限制資料格式為JSON Stream Load匯入中,允許的最巨量資料量。單位:MB。
一些資料格式,如JSON,無法進行拆分處理,必須讀取全部資料到記憶體後才能開始解析,因此,這個值用於限制此類格式資料單次匯入最巨量資料量。
streaming_load_rpc_max_alive_time_sec
預設值:1200
說明:TabletsChannel的存活時間。如果此時通道沒有收到任何資料, 通道將被刪除。
sync_tablet_meta
預設值:false
說明:儲存引擎是否開sync保留到磁碟上。
sys_log_dir
預設值:${DORIS_HOME}/log
類型:String
說明:BE日誌資料的儲存目錄。
sys_log_level
預設值:INFO
說明:記錄層級。記錄層級從低到高的順序為:INFO<WARNING<ERROR<FATAL。
sys_log_roll_mode
預設值:SIZE-MB-1024
說明:日誌拆分的大小,每1 GB拆分一個記錄檔。
sys_log_roll_num
預設值:10
說明:記錄檔保留的數目。
sys_log_verbose_level
預設值:10
說明:日誌顯示的層級,用於控制碼中VLOG開頭的日誌輸出。
sys_log_verbose_modules
日誌列印的模組,寫olap就只列印olap模組下的日誌。
tablet_map_shard_size
預設值:1
說明:tablet_map_lock分區大小,值為 2^n, n=0,1,2,3,4 ,這是為了更好地管理tablet。
tablet_meta_checkpoint_min_interval_secs
預設值:600
說明:TabletMeta Checkpoint線程輪詢的時間間隔。單位:秒。
tablet_meta_checkpoint_min_new_rowsets_num
預設值:10
說明:TabletMeta Checkpoint的最小Rowset數目。
tablet_scan_frequency_time_node_interval_second
預設值:300
類型:Int64
說明:用來表示記錄metric發生query_scan_count的時間間隔。為了計算當前一段時間的tablet的scan頻率,需要每隔一段時間記錄一次metric的query_scan_count。
tablet_stat_cache_update_interval_second
預設值:300
說明:tablet狀態緩衝的更新間隔,單位:秒。
tablet_rowset_stale_sweep_time_sec
預設值:1800
類型:Int64
說明:用來表示清理合并版本的到期時間,噹噹前時間now() 減去一個合并的版本路徑中rowset最近建立時間大於tablet_rowset_stale_sweep_time_sec時,對當前路徑進行清理,刪除這些合并過的rowset,單位為秒。
當寫入過於頻繁,磁碟空間不足時,可以配置較少這個時間。不過這個時間過短小於5分鐘時,可能會引發FE查詢不到已經合并過的版本,引發查詢-230錯誤。
tablet_writer_open_rpc_timeout_sec
預設值:60
說明:在遠程BE 中開啟tablet writer的rpc逾時。 操作時間短,可設定短逾時時間匯入處理程序中,發送一個 Batch(1024行)的RPC逾時時間。預設60秒。因為該RPC可能涉及多個分區記憶體塊的寫盤操作,所以可能會因為寫盤導致RPC逾時,可以適當調整這個逾時時間來減少逾時錯誤(如 send batch fail 錯誤)。同時,如果調大write_buffer_size配置,也需要適當調大這個參數。
tablet_writer_ignore_eovercrowded
預設值:false
類型:Bool
說明:寫入時可忽略brpc的'[E1011]The server is overcrowded'錯誤。
當遇到'[E1011]The server is overcrowded'的錯誤時,可以調整配置項brpc_socket_max_unwritten_bytes,但這個配置項不能動態調整。所以可通過設定此項為true來臨時避免寫失敗。注意,此配置項隻影響寫流程,其他的rpc請求依舊會檢查是否overcrowded。
tc_free_memory_rate
預設值:20
說明:可用記憶體,取值範圍:[0-100]。
tc_max_total_thread_cache_bytes
預設值:1073741824
類型:Int64
說明:用來限制tcmalloc中總的線程緩衝大小。這個限制不是硬限,因此實際線程緩衝使用可能超過這個限制。詳情請參見TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES。
如果發現系統在高壓力情境下,通過BE線程堆棧發現大量線程處於tcmalloc的鎖競爭階段,如大量的SpinLock相關堆棧,則可以嘗試增大該參數來提升系統效能。
tc_use_memory_min
預設值:10737418240
說明:TCmalloc的最小記憶體,當使用的記憶體小於這個時,不返回給作業系統。
thrift_client_retry_interval_ms
預設值:1000
類型:Int64
說明:用來為be的thrift用戶端設定稍候再試,避免fe的thrift server發生雪崩問題,單位:ms。
thrift_connect_timeout_seconds
預設值:3
說明:預設thrift用戶端連線逾時時間。單位:秒。
thrift_rpc_timeout_ms
預設值:5000
說明:thrift預設逾時時間。單位:ms。
thrift_server_type_of_fe
該配置表示FE的Thrift服務使用的服務模型, 類型為string, 大小寫不敏感,該參數需要和fe的thrift_server_type參數的設定保持一致。目前該參數的取值有兩個:THREADED和THREAD_POOL。
若該參數為THREADED,該模型為非阻塞式I/O模型。
若該參數為THREAD_POOL,該模型為阻塞式I/O模型
total_permits_for_compaction_score
預設值:10000
類型:Int64
可動態修改:是
說明:被所有的compaction任務所能持有的permits上限,用來限制compaction佔用的記憶體。
trash_file_expire_time_sec
預設值:259200
說明:資源回收筒清理的間隔,當磁碟空間不足時,trash下的檔案儲存期可不遵守此參數。
txn_commit_rpc_timeout_ms
預設值:10000
說明:txn提交rpc逾時時間。
txn_map_shard_size
預設值:128
說明:txn_map_lock分區大小,取值為2^n,n=0,1,2,3,4。這是一項增強功能,可提高管理txn的效能。
txn_shard_size
預設值:1024
說明:txn_lock分區大小,取值為2^n,n=0,1,2,3,4, 這是一項增強功能,可提高提交和發布txn的效能。
unused_rowset_monitor_interval
預設值:30
說明:清理到期Rowset的時間間隔。單位:秒。
upload_worker_count
預設值:1
說明:上傳檔案最大線程數。
use_mmap_allocate_chunk
預設值:false
說明:是否使用mmap分配塊。 如果啟用此功能,建議增加vm.max_map_count的值,其預設值為65530。您可以通過
sysctl -w vm.max_map_count=262144或echo 262144 > /proc/sys/vm/max_map_count命令以root身份進行操作max_map_count,當這個設定生效時,您必須將chunk_reserved_bytes_limit設定為一個相對較大的數字,否則效能可能非常差。
user_function_dir
預設值:${DORIS_HOME}/lib/udf
說明:udf函數目錄。
webserver_num_workers
預設值:48
說明:webserver預設背景工作執行緒數。
webserver_port
預設值:8040
類型:Int32
說明:BE上的http server的服務連接埠。
write_buffer_size
預設值:104857600
說明:刷寫前緩衝區的大小匯入資料在BE上會先寫入到一個記憶體塊,當這個記憶體塊達到閾值後才會寫回磁碟。預設大小是100 MB。過小的閾值可能導致BE上存在大量的小檔案。可以適當提高這個閾值減少檔案數量。但過大的閾值可能導致RPC逾時。
zone_map_row_num_threshold
預設值:20
類型:Int32
說明:如果一個page中的行數小於這個值就不會建立zonemap,用來減少資料膨脹。
aws_log_level
預設值:3
類型:Int32
說明:AWS SDK 的記錄層級。樣本如下:
Off = 0, Fatal = 1, Error = 2, Warn = 3, Info = 4, Debug = 5, Trace = 6
enable_tcmalloc_hook
預設值:true
類型:Bool
說明:是否Hook TCmalloc new/delete,目前在Hook中統計thread local MemTracker。
mem_tracker_consume_min_size_bytes
預設值:1048576
類型:Int32
說明:TCMalloc Hook consume/release MemTracker時的最小長度,小於該值的consume size會持續累加,避免頻繁調用MemTracker的consume/release,減小該值會增加consume/release的頻率,增大該值會導致MemTracker統計不準,理論上一個MemTracker的統計值與真實值相差 = (mem_tracker_consume_min_size_bytes × 這個MemTracker所在的BE線程數)。
max_segment_num_per_rowset
預設值:200
類型:Int32
說明:用於限制匯入時,新產生的rowset中的segment數量。如果超過閾值,匯入會失敗並報錯 -238。過多的segment會導致compaction佔用大量記憶體引發OOM錯誤。
remote_storage_read_buffer_mb
預設值:16
類型:Int32
說明:讀取hdfs或者Object Storage Service上的檔案時,使用的緩衝大小。單位:MB。增大這個值可以減少遠端資料讀取的調用次數,但會增加記憶體開銷。
external_table_connect_timeout_sec
預設值:5
類型:Int32
說明:和外部表格建立串連的逾時時間。單位:秒。
segment_cache_capacity
預設值:1000000
類型:Int32
說明:Segment Cache緩衝的Segment最大數量。
預設值目前只是一個經驗值,可能需要根據實際情境修改。增大該值可以緩衝更多的segment從而避免一些IO。減少該值則會降低記憶體使用量。
auto_refresh_brpc_channel
預設值:false
類型:Bool
說明:擷取brpc串連時,通過hand_shake rpc判斷串連的可用性,如果不可用則重建立立串連。
high_priority_flush_thread_num_per_store
預設值:1
類型:Int32
說明:每個儲存路徑所分配的用於高優匯入任務的flush線程數量。
routine_load_consumer_pool_size
預設值:10
類型:Int32
說明:routine load所使用的data consumer的緩衝數量。
load_task_high_priority_threshold_second
預設值:120
類型:Int32
說明:當一個匯入任務的逾時時間小於這個閾值是,Doris將認為他是一個高優任務。高優任務會使用獨立的flush線程池。
min_load_rpc_timeout_ms
預設值:20
類型:Int32
說明:load作業中各個rpc的最小逾時時間。
doris_scan_range_max_mb
預設值:1024
類型:Int32
說明:每個OlapScanner讀取的最巨量資料量。
string_type_length_soft_limit_bytes
預設值:1048576
類型:Int32
說明:String類型最大長度的軟限。單位:位元組。
enable_quick_compaction
預設值:false
類型:Bool
說明:是否開啟quick_compaction,主要用在小資料量頻繁匯入的情境,通過快速compaction的機制及時合并匯入版本可以有效避免-235的問題,小資料量的定義目前是根據行數來定義。
quick_compaction_max_rows
預設值:1000
類型:Int32
說明:當匯入的行數小於這個值認為這次匯入是小資料量的匯入,在快速合并時會被選中。
quick_compaction_batch_size
預設值:10
類型:Int32
說明:快速合并的觸發時機,匯入次數達到quick_compaction_batch_size時觸發一次。
quick_compaction_min_rowsets
預設值:10
類型:Int32
說明:最少進行合并的版本數,當選中的小資料量的rowset個數,大於這個值是才會進行真正的合并。