本文介紹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_score
compaction_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或者對象存儲上的文件時,使用的緩存大小。單位: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個數,大于這個值是才會進行真正的合并。